2011-09-02 17 views
6

He aquí un extracto de un artículo de Wikipedia:¿La URL de solicitud HTTP no forma parte del encabezado de solicitud HTTP?

En contraste con el método de petición GET donde sólo una URL y cabeceras son enviado al servidor, las solicitudes POST también incluyen un cuerpo de mensaje.

Basado en esto, parece que la URL se envía por separado de la cabecera, pero si eso es así, ¿por qué utilizamos el método header() en PHP para establecer una URL para redirigir a?

header("Location: http://google.com"); 
+3

Está confundiendo la solicitud HTTP y la respuesta HTTP. La función de encabezado de PHP agrega un encabezado nuevo a los encabezados de RESPONSE, GET y POST son SOLICITUDES. – CaNNaDaRk

+0

Ah ... Esto tiene sentido. –

+0

En mi respuesta tiene un ejemplo de una PETICIÓN y una RESPUESTA y se le explica cómo son los encabezados. – CaNNaDaRk

Respuesta

9

Cuando desee explorar una URL desde su navegador, escriba una URL. El navegador pone la URL dentro de una petición HTTP como esto:

GET /path/to/resource.php?var=data1&othervar=data2 HTTP/1.1 
Host: example.com 
Connection: keep-alive 
"empty line" 

A continuación, un servidor web le da una respuesta como esta:

HTTP/1.0 200 OK 
Date: Fri, 02 Sep 2011 14:37:36 GMT 
Server: Apache 
Cache-Control: private, s-maxage=0, max-age=0, must-revalidate 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Content-Length: 149 
Content-Type: text/javascript; charset=utf-8 
Connection: keep-alive 
"empty line" 
"149 bytes of Response data" 

Cada línea como ésta "header-name: header_value \ r \ n "es un encabezado.
La función de encabezado PHP agrega un encabezado a la respuesta antes de enviarla al navegador del usuario.
En su ejemplo la cabecera es:

Location: http://google.com 

Y ha añadido justo después de la última cabecera antes de la "línea vacía" (que es una línea que contiene sólo un \ r \ n).
peticiones POST son diferentes de peticiones GET porque tiene un cuerpo de solicitud después de la "línea vacía"):

POST /path/to/resource.php HTTP/1.1 
Host: example.com 
Connection: keep-alive 
Content-Length: "number of bytes in the body" 
"empty line" 
variable=data&othervar=data2 

En conclusión una solicitud HTTP se hace así:

  1. Solicitud/fila de respuesta (POST o GET seguido de url y versión http para solicitud, versión Http seguida de código de respuesta y cadena de respuesta para la respuesta) terminado con \ r \ n
  2. Encabezados de solicitud/respuesta (nombre-encabezado: valor_de_cabezado \ r \ n)
  3. fila vacía (\ r \ n)
  4. respuesta/solicitud cuerpo

PS. Las filas SIEMPRE están cerradas por bytes "\ r \ n" ("líneas vacías" están hechas de esos dos bytes).

+0

¿Es la primera cita 'GET/path ...' parte del encabezado de la solicitud? –

+2

No realmente, "OBTENER ... HTTP/1.1" y "POST ... HTTP/1.1" son la RAZÓN DE SOLICITUD, que son seguidas por los encabezados de solicitud. – CaNNaDaRk

+0

Gracias! Eso lo hace mucho más claro. –

2

header()añade un encabezado en el archivo.

Así que si desea establecer el Content-Type:

header("Content-type: text/javascript"); 

Y así sucesivamente ...

Location es sólo otra cabecera puede establecer y/o cambiar con el php header() función

Desde el doc:

la segunda especia l caso es el encabezado "Ubicación:". No solo devuelve este encabezado al navegador, sino que también devuelve un código de estado REDIRECT (302) al navegador, a menos que el código de estado 201 o 3xx ya se haya configurado.

+0

Aquí hay otro extracto (esta vez de los documentos de PHP): 'header() se usa para enviar un encabezado HTTP sin procesar. –

+0

@EmanuilRusev - ¿cómo cambia eso mi respuesta? – Neal

+0

@Emanuil ... todos los encabezados son 'enviados' ... esa es la idea de un encabezado ... lea la actualización de mi respuesta – Neal

0

Hay cabeceras de respuesta y encabezados de la solicitud

http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

Se establece el encabezado de ubicación en PHP como respuesta a una solicitud. El navegador mira la respuesta y actúa en consecuencia.

Así que ir a la página original y el encabezado de ubicación le dice al navegador que vaya a otro lugar.

Cuestiones relacionadas