在 Land of Lisp 中使用 Web 服务器代码获取ERR_INVALID_HTTP_RESPONSE,在 OS



我正在阅读 Land of Lisp(它已经有 10 年的历史了,但 clisp 也是如此,所以它看起来足够最新)。 我在第 13 章,你写一个 Web 服务器。 它只是将客户端套接字作为标准输出打开,然后使用princformat t写出到客户端。 Web 服务器的完整源代码 http://landoflisp.com/webserver.lisp。

我在输入代码和从网站下载 webserver.lisp 并运行它时都遇到了同样的问题。 当我访问Chrome中的网站时,我得到了ERR_INVALID_HTTP_RESPONSE。 在 Safari 中,我无法打开页面。 当我尝试在 Firefox 中访问该站点时,我得到了预期的页面,但所有 html 标记都只是呈现为文本。 当我尝试在 curl 中与网站交互时,我在输出中得到了一个收盘百分比,我不确定它来自哪里。

> curl http://localhost:8080/greeting
<html><form>What is your name?<input name='name' /></form></html>%

我知道这不是最好的 HTML,但如果我也添加正文标签并在开头声明 doctype html,它会做同样的事情。 卷曲响应中的%在princ中不存在,当我尝试访问服务器的其他URL(如localhost:8080或localhost:8080/greeting?name=Lewis)时,我得到一个%。

我实际上并不打算将这个 Web 服务器用于任何用途,但本书的其余部分似乎涉及制作使用它的应用程序,我想完成这本书,所以如果我至少可以让 Web 服务器至少使用一个浏览器,那就太好了。

看起来这修复了它,根据上面指向论坛的讨论。 我们需要一个"HTTP 1.1 200 OK",然后是一个\r,然后是一个\r在换行符上,然后是页面。 这使得它在Firefox和Chrome中都能正常工作。 我刚刚将其添加到请求处理程序中:

(format t "HTTP/1.1 200 OK~C~C" #return #linefeed)
(format t "~C~C" #return #linefeed)

感谢讨论中的所有帮助,让我得到这个答案!

最新更新