2010-07-29 14 views
40

decir te hago una petición HTTP a: foosite.com pero el puerto De hecho, me enviar la solicitud a es 6103 y no pongo ese puerto en la cabecera Host por ejemplo:¿Se requiere el número de puerto en el parámetro de encabezado HTTP "host"?

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

caso http servidor entonces reconocer que Estoy tratando de hablar con él en el puerto 6103? O como se omitió en el encabezado de la solicitud, ¿estoy apostando si el servidor realmente lo reconoce?

Me hago esa pregunta para decir esto: he encontrado que los navegadores, al menos firefox + chrome, ponen el puerto int el encabezado Host. Pero la aplicación Java que estoy usando no. Y cuando el puerto no se pasa en el Host, el servidor responde pensando que estoy en el puerto 80. Entonces, ¿a quién debo engañar? ¿El operador del servidor o el programador Java?

+4

6103 es un puerto raro para HTTP – NullUserException

+0

Acepto con @NullUserException. HTTP se establece de manera predeterminada en el puerto 80, así que me gustaría obtener con su desarrollador de Java para asegurarse de que incluyan el puerto no estándar en sus llamadas. – kbrimington

+0

Es básicamente para un servicio API para listados de bienes raíces. Específicamente RETS http://www.rets.org/documentation. Las compañías que proporcionan RETS para servicios de listados múltiples tienden a otorgarles subdominios o puertos fuera de su dominio principal, por lo que les gusta socalmls.someretscompany.com o someretscompany.com:6111. No preguntes por qué usan puertos. Solo trabajo aquí;) –

Respuesta

46

Ver section 14.23 of the HTTP spec que especifica que el puerto # debe incluirse si no es el puerto por defecto de 80.

+2

Sí, también lo leí en el RFC. Probablemente debería haber notado eso. Esperaba que alguien dijera algo sabio en el sentido de saber específicamente cómo ciertos servidores web y marcos de aplicaciones web reaccionan a este tipo de solicitud, como: "Algunos servidores web/marcos de aplicaciones lo manejan, pero X e Y no", etc. etc. Al final, esperaba aceptar lo que el RFC tenía que decir, pero voy a dar esta pregunta tal vez un día antes de rendirme. –

+4

@superfell te refieres a DEBE y NO DEBERÍA ¿no? – Pacerier

+0

Gracias, ahora sé que esto es un [error en IE11 móvil] (https://answers.microsoft.com/en-us/winphone/forum/-/-/23abc83b-c28f-4838-ac82-5b043e48d8e2)! – Eric

4

navegadores (y rizo) añadirá el puerto sólo cuando no es el puerto estándar, como lo exige la HTTP spec y anotado en @ superfell's answer.

navegadores este día (2013), en realidad franja el puerto del Encabezado de host cuando el puerto es el estándar (http puerto 80, https puerto 443). Algunos clientes usan su propio método, como Baidu Spider, include the port number even when the port is 80.

Si esto es correcto o no, no 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 todo lo que tengan que hacer para cumplir con la especificación, y la especificación solo sugiere los casos CUANDO se necesita. Debido a esto, creo que no es realmente una cuestión de cómo el servidor se ocupa de él; es más cómo el cliente emite la solicitud: incluye el número de puerto en el encabezado del host, o no.

+0

la especificación dice claramente que está bien incluir el número de puerto (la autoridad de denominación incluye el puerto), es decir, el número de puerto * es obligatorio *, a menos que sea el predeterminado para el servicio. –

Cuestiones relacionadas