1

我正在阅读 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,它也会一样。curl 响应中的 % 不在 中princ,当我尝试访问服务器的其他 URL(如 localhost:8080 或 localhost:8080/greeting?name=Lewis)时,我得到一个 %。

我实际上并不打算将这个网络服务器用于任何事情,但本书的其余部分似乎涉及制作一个使用它的应用程序,我想完成这本书,所以如果我能做到就好了至少让网络服务器与至少一个浏览器一起工作。

4

1 回答 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)

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

于 2019-04-06T15:23:09.830 回答