Подтвердить что ты не робот

404 - HTTP 1.0 или 1.1?

Почему почти каждый пример, который я могу найти (включая этот вопрос примерно год назад), говорит, что заголовок 404 должен быть HTTP/1.0 404 Not Found, когда мы действительно использовал HTTP 1.1 уже более десяти лет? Есть ли причина не отправлять HTTP/1.1 404 Not Found вместо этого?

(Не то, чтобы это было так важно... Мне в основном просто любопытно.)

4b9b3361

Ответ 1

Использование версии HTTP может быть основано на следующих факторах:

  • Поддержка вашего веб-сервера для HTTP 1.0 или 1.1
  • Поддержка веб-браузера для HTTP 1.0 или 1.1
  • Ваше предпочтение как веб-разработчик, для которого версия протокола для использования

Современные браузеры могут поддерживать как версии 1.0, так и 1.1, и оба клиента и сервер согласятся на самую высокую версию, которые оба могут поддерживать вместе. Основные отличия между двумя протоколами: http://www8.org/w8-papers/5c-protocols/key/key.html

Однако нет никаких ключевых различий в использовании 404 Not Found. Однако будьте последовательны для всего своего сайта. т.е. если вы используете HTTP/1.1, вы используете его на своем веб-сайте.

Ответ 2

В PHP вы, вероятно, должны использовать:

header( $_SERVER['SERVER_PROTOCOL']." 404 Not Found", true );

или даже лучше

header( $_ENV['SERVER_PROTOCOL']." 404 Not Found", true );

(если поддерживается) и, таким образом, оставить его на веб-сервере, какой протокол использовать.

На самом деле, если вы передадите код статуса в качестве третьего параметра, вы можете передать все, что хотите, в 1-м, если оно не пустое, а PHP сделает все остальное. См. http://php.net/header

header("foobar", true, 404 );

Кроме того: вы не можете запрашивать определенную версию протокола с клиентской стороны, поскольку транзакция основана на переходе на хоп, а не в конце. Сервер и ваш браузер могут очень хорошо использовать HTTP/1.1, но если прокси-сервер использует только HTTP/1.0, это то, что вы увидите у своего клиента.

Ответ 3

Это не так важно. Клиент отвечает за сообщение серверу, какую версию 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.

Ответ 4

Я бы подумал, что ответ должен быть 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.

Ответ 5

Глядя на версии 1.1 и 1.0 RFC, в обоих случаях есть 404, поэтому, вероятно, не по какой-либо другой причине, кроме как для сервера, чтобы сообщить клиенту, что он работает на http 1.1.

Тем не менее, если сервер отвечает на 404 по Http 1.1, это означает, что он мог бы возвращать 410 - Gone вместо этого, чтобы указать ресурс, который раньше существовал, но больше не работает. Этот код состояния не является частью 1.0, и поэтому эта информация может быть полезной для клиента (особенно для веб-сканеров).

EDIT

Извините, этот ответ, вероятно, отвечает наоборот! Я полагаю, вы, вероятно, можете рассчитывать лишь на несколько рук на количество общедоступных веб-серверов, которые будут беспокоиться о том, чтобы помнить все ресурсы, которые раньше существовали и которые больше не выполняются (никоим образом не я бы это кодировал на моем веб-сервере!) - поэтому, вероятно, лучше всего ответить 1.0 404, чтобы указать, что "это просто не там", а не "это не здесь", но другие вещи вокруг сайта могли бы быть, но уже не были - в этом случае я мог бы послать вас 410 '.

Также существует тот факт, что вы разрешаете клиентам только 1.0 работать с вашим сайтом.

Это сказало - все это немного педантично.