我正在阅读《 Lisp之地》(它已有10年历史了,但是也是如此,所以它看起来足够新了)。我在第13章,您在其中编写Web服务器。它只是以 standard-output 的形式打开客户端套接字,然后使用princ
和format 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,但是如果我添加body标签并在开始时也声明doctype html,它也会起到同样的作用。 curl响应中的%在princ
中不存在,当我尝试转到服务器的其他URL(如localhost:8080或localhost:8080 / greeting?name = Lewis)时,会得到%。
我实际上并不打算将Web服务器用于任何用途,但是本书的其余部分似乎涉及到开发使用该服务器的应用程序,而且我想完成这本书,所以这很好如果我至少可以使Web服务器与至少一个浏览器一起使用。
答案 0 :(得分:1)
按照上面指向论坛的讨论,看起来像这样修复了它。我们需要一个“ 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)
感谢讨论中的所有帮助,让我得到了这个答案!