2010-05-04 11 views
18

¿Por qué casi todos los ejemplos que puedo encontrar (incluyendo this question desde hace aproximadamente un año) dicen que una cabecera 404 debe ser HTTP/1.0 404 Not Found cuando realmente hemos estado usando HTTP 1.1 para más de una década? ¿Hay alguna razón para no enviar HTTP/1.1 404 Not Found en su lugar?cabecera 404 - HTTP 1.0 o 1.1?

(No es que importe casi nada ... Lo que más me curiosidad.)

+0

Alrededor de 11 millones de resultados de Google para '1.0', alrededor de 4.3 millones de resultados para' 1.1'. Supongo que eso significa usar '1.0'. –

+1

Esa pregunta no dice que el encabezado debe ser HTTP/1.0. Solo se usó en ese ejemplo. así que no asuma =) – mauris

Respuesta

5

El uso de la versión HTTP puede basarse en los siguientes factores:

  • Su compatibilidad con el servidor Web para HTTP 1.0 o 1.1
  • El apoyo del navegador web para HTTP 1.0 o 1.1
  • Su preferencia como desarrollador web en la que la versión del protocolo a utilizar

navegadores modernos pueden soportar tanto 1.0 y 1.1 así, y tanto el cliente y el servidor se conforma con la versión más alta que ambos pueden apoyar juntos. Las diferencias clave entre el protocolo 2 se pueden encontrar: http://www8.org/w8-papers/5c-protocols/key/key.html

Sin embargo, no hay diferencias clave en el uso de 404 Not Found. Sin embargo, sea coherente para todo su sitio web. es decir, si usa HTTP/1.1, lo usa en su sitio web.

1

En cuanto a los dos 1.1 y 1.0 RFC, 404 es allí en tanto - por lo que es probablemente por ninguna otra razón que para que el servidor le comunique al cliente que está operando en http 1.1.

Dicho eso: si un servidor responde con 404 sobre Http 1.1, implica que podría haber devuelto 410 - Gone para indicar un recurso que solía existir pero que ya no existe. Este código de estado no es parte de 1.0, y por lo tanto, esta información podría ser útil para un cliente (especialmente web crawlers).

EDITAR

Lo sentimos - esta respuesta es, probablemente, respondiendo al revés! Creo que probablemente solo puedas contar con unas pocas manos la cantidad de servidores web públicos que se molestarán en recordar todos los recursos que solían existir y que ya no funcionan (¡de ninguna manera codificaría eso en mi servidor web!) - así que probablemente sea mejor responder con 1.0 404 para indicar que 'simplemente no está allí' en lugar de 'eso no está aquí, pero otras cosas alrededor del sitio podrían haberlo sido pero no más, en cuyo caso podría haberte enviado a 410 '.

También está el hecho de que se va a permitir 1.0 sólo para clientes a trabajar con su sitio.

Dicho esto, todo es un poco pedante.

2

No importa demasiado. El cliente es responsable de decirle al servidor qué versión de HTTP utiliza. Entonces, el servidor debe responder con la misma versión. Esto no siempre sucede; Acabo de recibir esta respuesta de un servidor:

$ 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 

Le pregunté al servidor para utilizar HTTP 1.0, pero siguió adelante y respondió con HTTP 1.1.

2

Hubiera pensado que la respuesta debería ser HTTP/1.0 404 Not Found si la solicitud era HTTP 1.0 y HTTP/1.1 404 Not Found si la solicitud era HTTP 1.1.

En la práctica, va a ser más fácil para los servidores de respuestas enlatadas devueltos, y la respuesta HTTP 1.0 Se entenderá por ambos clientes 1.0 y 1.1, de modo más seguro para volver eso. Si sabe que el cliente entiende 1.1 (por ejemplo, porque eso es lo que solicitó), entonces la respuesta 1.1 debería funcionar.

Discutible, juega seguro y envía la respuesta 1.0.

+1

Sí, no necesita usar 1.1 cuando no está usando ninguna característica 1.1 – Earlz

26

En PHP probablemente debería utilizar:

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

o incluso mejor

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

(si es compatible) y por lo tanto dejar que el servidor web protocolo a utilizar.

En realidad, si pasa el código de estado como tercer parámetro, puede pasar lo que desee en la primera, siempre que no esté vacío, y PHP hará el resto. Ver http://php.net/header

header("foobar", true, 404); 

También: No solicitud puede una cierta versión del protocolo desde el lado del cliente ya que la transacción se basa salto-a-salto, y no de extremo a extremo. El servidor y su navegador pueden usar HTTP/1.1, pero si un proxy intermedio está usando solo HTTP/1.0, eso es lo que verá de su cliente.

+0

¿Hay alguna forma de agarrar los encabezados * raw * enviados por el cliente? Con eso me refiero a los encabezados línea por línea. – Pacerier

+0

@Pacerier No sé sobre encabezados RAW, pero todos son parte de la matriz $ _SERVER. – DanMan

+0

No, quiero decir que quiero obtener los encabezados de texto antes de que se analicen en la matriz. – Pacerier

Cuestiones relacionadas