Почему делает почти каждый пример, который я могу найти (включая этот вопрос от приблизительно год назад), говорят, что 404 заголовка должны быть HTTP/1.0 404 Not Found
когда мы действительно использовали HTTP 1.1 больше десятилетия? Есть ли любая причина не отправить HTTP/1.1 404 Not Found
вместо этого?
(Не то, чтобы это имеет значение все так очень... Мне главным образом просто любопытно.)
Использование версии HTTP может зависеть от следующих факторов:
Современные браузеры могут хорошо поддерживать как 1.0, так и 1.1, и и клиент, и сервер согласятся на самую высокую версию, которую они могут поддерживать вместе. Ключевые различия между двумя протоколами можно найти: http://www8.org/w8-papers/5c-protocols/key/key.html
Однако нет никаких ключевых различий в использовании 404 Not Found . Однако будьте последовательны для всего вашего сайта. т.е. если вы используете HTTP / 1.1, вы используете его на всем своем веб-сайте.
Я бы подумал, что ответ должен быть HTTP / 1.0 404 Not Found
, если запрос был HTTP 1.0, и HTTP / 1.1 404 Not Found
, если запрос был HTTP 1.1.
На практике серверам будет проще возвращать стандартные ответы, а ответ HTTP 1.0 будет понят как клиентам 1.0, так и 1.1, поэтому безопаснее всего возвращать его. Если вы знаете, что клиент понимает 1.1 (например, потому что это то, о чем он просил), то ответ 1.1 должен работать.
Возможно, перестрахуйтесь и отправьте ответ 1.0.
Это не имеет особого значения. Клиент отвечает за сообщение серверу, какую версию HTTP он использует. Затем предполагается, что сервер ответит той же версией. Так бывает не всегда; Я только что получил ответ от сервера:
$ telnet example.com 80
Trying 123.123.123.123...
Connected to example.com.
Escape character is '^]'.
GET /fork HTTP/1.0
HTTP/1.1 404 Not Found
Content-Length: 1635
Content-Type: text/html
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Tue, 04 May 2010 22:30:36 GMT
Connection: close
Я попросил сервер использовать HTTP 1.0, но он пошел дальше и ответил HTTP 1.1.
Если посмотреть на RFC 1.1 и 1.0, то 404 присутствует в обоих - так что, вероятно, только для того, чтобы сервер сообщил клиенту, что он работает на http 1.1.
Тем не менее, если сервер отвечает 404 через Http 1.1, это означает, что он мог вернуть 410 - Gone вместо этого, чтобы указать ресурс, который раньше существовал, но больше не существует. Этот код состояния не является частью 1.0, и поэтому эта информация может быть полезной для клиента (особенно для поисковых роботов).
РЕДАКТИРОВАТЬ
Извините - этот ответ, вероятно, отвечает наоборот! Я полагаю, вы, вероятно, можете рассчитывать только на несколько человек из числа общедоступных веб-серверов, которые будут беспокоиться о том, чтобы запомнить все ресурсы, которые раньше существовали и которых больше нет (я бы ни в коем случае не закодировал это на своем веб-сервере!) - поэтому, вероятно, лучше всего ответить 1.0 404, чтобы указать, что `` его просто нет '', а не `` этого нет, но другие вещи на сайте могли быть раньше, но больше не будут - в этом случае я мог бы отправить вам 410 '.
Также вы разрешаете клиентам версии 1.0 работать с вашим сайтом.
Впрочем, все это немного педантично.