Common lisp 在OS X上使用带有clisp的Lisp语言中的web服务器代码获取错误\u无效\u HTTP\u响应

Common lisp 在OS X上使用带有clisp的Lisp语言中的web服务器代码获取错误\u无效\u HTTP\u响应,common-lisp,clisp,land-of-lisp,Common Lisp,Clisp,Land Of Lisp,我正在读《Lisp之地》(它已经有10年历史了,但clisp也有10年历史了,所以它似乎已经足够最新了)。我在第13章,你写了一个网络服务器。它只是将客户机套接字作为标准输出打开,然后使用princ和format t向客户机进行写操作。web服务器的完整源代码位于 我在输入代码和从网站下载并运行webserver.lisp时遇到了相同的问题。当我在Chrome中访问该站点时,会得到ERR\u INVALID\u HTTP\u响应。在Safari中,我无法打开页面。当我尝试在Firefox中访问该

我正在读《Lisp之地》(它已经有10年历史了,但clisp也有10年历史了,所以它似乎已经足够最新了)。我在第13章,你写了一个网络服务器。它只是将客户机套接字作为标准输出打开,然后使用
princ
format t
向客户机进行写操作。web服务器的完整源代码位于

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

> curl http://localhost:8080/greeting
<html><form>What is your name?<input name='name' /></form></html>%
卷曲http://localhost:8080/greeting 你叫什么名字?% 我知道它不是最好的HTML,但如果我在开始时添加body标记并声明doctype HTML,它也会这样做。curl响应中的%在
原则中不存在,当我尝试转到服务器的其他URL(如localhost:8080或localhost:8080/greeting?name=Lewis)时,我会得到一个%


实际上,我并不打算在很多事情上使用这个web服务器,但本书的其余部分似乎都在制作一个使用它的应用程序,我想完成这本书,所以如果我至少可以让web服务器与至少一个浏览器一起工作,那就太好了。

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

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

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

哦,当我使用命令行curl is OS X时,像www.google.com这样的普通网页在输出的末尾也有一个百分比,所以我猜这一事实与此无关。谷歌有,但微软没有。不知道它从哪里来。我认为这与你的问题有关@MartinBuchmann:要获得更多一致性,请在一行末尾写CR LF。出于安全考虑:在没有*read eval*为零的情况下,永远不要调用read from string。。我尝试在progn块中的另一个输出之前添加(格式t“HTTP/1.1 200 OK ~%”),但没有解决任何问题。如果您在UNIX上~%将编写一个换行符。HTTP行的末尾是cr,然后是lf。不仅仅是你一个人。先写一个返回字符,然后写一个换行字符。