Получение ERR_INVALID_HTTP_RESPONSE с использованием кода веб-сервера в Land of Lisp с помощью clisp на OS X - PullRequest
1 голос
/ 05 апреля 2019

Я читаю Землю Лиспа (ей 10 лет, но так же классно, так что она кажется достаточно актуальной). Я в главе 13, где вы пишете веб-сервер. Он просто открывает клиентский сокет как стандартный вывод , а затем использует princ и format t для записи клиенту. Полный исходный код веб-сервера: 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 и объявить html doctype в начале. % В ответе curl отсутствует в princ, и я получаю%, когда пытаюсь перейти на другие URL-адреса для сервера, такие как localhost: 8080 или localhost: 8080 /reeting? Name = Lewis.

На самом деле я не планирую использовать этот веб-сервер для чего-либо, но остальная часть книги, похоже, посвящена созданию приложения, которое его использует, и я хотел бы закончить книгу, так что было бы неплохо если бы я мог хотя бы заставить веб-сервер работать хотя бы с одним браузером.

1 Ответ

1 голос
/ 06 апреля 2019

Похоже, что это исправлено, как указано выше, указывая на форум.Нам нужно было «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)

Спасибо за помощь в обсуждении, которая привела меня к этому ответу!

...