使用Lisp的Land中的Web服务器代码和OS X上的clisp获取ERR_INVALID_HTTP_RESPONSE

问题描述 投票:1回答:1

我正在阅读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,但如果我在开始时添加body标签并声明doctype html,它也会这样做。 curl响应中的%不在princ中,当我尝试使用localhost:8080或localhost:8080 / greeting?name = Lewis等服务器的其他URL时,我得到%。

我实际上并没有计划在任何方面使用这个Web服务器,但本书的其余部分似乎涉及制作一个使用它的应用程序,我想完成这本书,所以如果我能这样做会很好至少让Web服务器至少使用一个浏览器。

common-lisp clisp land-of-lisp
1个回答
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)

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

© www.soinside.com 2019 - 2024. All rights reserved.