Редактировать Мне кажется, что в ситуации 404, вы отправляете что-то вроде этого:
HTTP/1.1 404 Not Found
Content-Type: text/html
HTTP/1.1 200 OK
Content-Length: 1234
Content-Type: text/html
... сопровождаемый 404 страницей. Обратите внимание на строку 200, следующую за 404. Это потому, что ваша обработка 404 вызывает sendFile
, который выводит код состояния ответа 200. Это, вероятно, сбивает с толку получателя.
Старый ответ, который пропустил, что:
HTTP-ответ начинается со строки состояния, за которой (необязательно) следует серия заголовков, а затем (необязательно) включает тело ответа. Строка состояния и заголовки - это просто строки в определенном формате, например (для выбора случайного примера):
HTTP/1.0 404 Not Found
Чтобы реализовать ваш небольшой HTTP-сервер, я бы рекомендовал прочитать спецификацию и посмотреть, как должны выглядеть ответы. Это немного концептуальный скачок, но на самом деле это просто строки текста, возвращаемые в соответствии с согласованным форматом. (Ну, во всяком случае, это был концептуальный скачок для меня несколько лет назад. Я привык к средам, которые слишком усложняли вещи.)
Также может быть полезно сделать такие вещи из вашей любимой командной строки:
telnet www.google.com 80
GET /thispagewontbefound
... и нажмите Enter. Вы получите что-то вроде этого:
HTTP/1.0 404 Not Found
Content-Type: text/html; charset=UTF-8
X-Content-Type-Options: nosniff
Date: Sun, 12 Sep 2010 23:01:14 GMT
Server: sffe
Content-Length: 1361
X-XSS-Protection: 1; mode=block
... сопровождаемый некоторым HTML, чтобы обеспечить дружественную страницу 404. Первая строка выше - это строка состояния, остальные - заголовки. Между строкой статуса / заголовками и первой строкой содержимого (например, страница) есть пустая строка.