type personalizadas headers definicion data content chrome cabeceras http http-headers

personalizadas - http request



¿Se requiere el número de puerto en el parámetro de encabezado "host" de HTTP? (4)

Consulte la sección 14.23 de la especificación HTTP que especifica que el número de puerto debe incluirse si no es el puerto predeterminado de 80.

Digamos que hago una solicitud HTTP a: foosite.com pero el puerto al que envío la solicitud es 6103 y NO pongo ese puerto en el encabezado del Host por ejemplo:

GET /barpage HTTP/1.1 Host: foosite.com Method: GET

¿Debería el servidor http reconocer que estoy intentando hablar con él en el puerto 6103? O, dado que se omitió en el encabezado de la solicitud, ¿estoy jugando si el servidor realmente lo reconoce?

Hago esta pregunta para decir esto: he encontrado que los navegadores, al menos firefox + chrome, colocan el puerto en el encabezado del Host . Pero la aplicación Java que estoy usando no lo hace. Y cuando el puerto no se pasa en el Host el servidor responde de nuevo pensando que estoy en el puerto 80. Entonces, ¿a quién necesito tejer? ¿El operador del servidor, o el programador de Java?


Ejemplo de encabezados de una solicitud real a un servidor con suerte inexistente '' http://myhost.com:3003/content/page.htm ''

Accept: */* Accept-Encoding: gzip, deflate Accept-Language: en-US;q=0.9,en;q=0.8,nb;q=0.7,de;q=0.6 Connection: keep-alive Host: myhost.com:3244 Referer: http://myhost.com:3244/content/page.htm

El RFC https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html requiere algún entrenamiento para leer.

La sección 14:24 no es tan fácil de traducir todos los elementos a la realidad simple:

Host = "Host" ":" host [ ":" port ] ;


RFC2616 establece que

Un "host" sin ninguna información de puerto de cola implica el puerto predeterminado para el servicio solicitado (por ejemplo, "80" para una URL de HTTP). Por ejemplo, una solicitud en el servidor de origen para http://www.w3.org/pub/WWW/ incluiría adecuadamente:

GET /pub/WWW/ HTTP/1.1 Host: www.w3.org

Esto significa que https://example.com no necesitaría un puerto de cola, ya que el puerto predeterminado es conocido por https. He revisado las solicitudes HTTP de Firefox, Chrome y Edge y encontré que ninguno de ellos agregó el número de puerto para el encabezado del host cuando el protocolo del dominio era https. Para asegurarse de que el número de puerto se agrega cuando el número de puerto también se agregó a la URL. Las siguientes capturas de pantalla provienen de Google Chrome


ACTUALIZADO para los navegadores modernos:

Los navegadores (y curl) agregarán el puerto solo cuando no sea el puerto estándar, como lo requiere la especificación HTTP y se indica en la answer de @superfell.

Los navegadores de este día (2013) eliminarán el puerto del encabezado de host cuando el puerto es el estándar (puerto http 80, puerto https 443). Algunos clientes, que utilizan su propio método, como el Baidu Spider, incluyen el número de puerto incluso cuando el puerto es 80 .

Si esto es correcto o no, no lo sé. La especificación no dice si está bien o no incluir el número de puerto cuando el puerto utilizado es el predeterminado.

Para responder a su comment , los servidores harán lo que sea necesario para cumplir con la especificación, y la especificación sugiere solo los casos CUANDO es necesario. Debido a esto, siento que no es realmente una cuestión de cómo lo maneja el servidor; es más bien cómo el cliente emite la solicitud: incluye el número de puerto en el encabezado del host o no.