2011-01-17 17 views
5

He estado tratando de recibir peticiones HTTP con campos personalizados en las cabeceras, pero parece que mi servidor de los elimina ...Server quita campos de cabecera HTTP personalizados

Esta es la solicitud que estoy enviando al servidor (he leído que la solicitud HTTP con un Proxy):

POST /oauth.php/request_token HTTP/1.1 
Host: domain.com 
User-Agent: DearStranger/1.0 CFNetwork/485.12.7 Darwin/10.6.0 
Authorization: OAuth realm="", oauth_consumer_key="ebb942f0d260b06cb533c6133c28408004d343197", oauth_signature_method="HMAC-SHA1", oauth_signature="qPBFAa8XRRbor2%2F%2FQXv6kU3%2F7jU%3D", oauth_timestamp="1295278460", oauth_nonce="E7D6AC76-74CE-4951-8182-7EBF9B382E7E", oauth_version="1.0" 
Accept: */* 
Accept-Language: en-us 
Accept-Encoding: gzip, deflate 
Pragma: no-cache 
Content-Length: 0 
Connection: keep-alive 
Proxy-Connection: keep-alive 

imprimí las cabeceras de la petición cuando llego en mi page.php. Veo que:

uri http://domain.com/oauth.php/request_token 
parameters 
headers Array 
.... Accept : */* 
.... Accept-Encoding : gzip, deflate 
.... Accept-Language : en-us 
.... Connection : keep-alive 
.... Host : domain.com 
.... User-Agent : DearStranger/1.0 CFNetwork/485.12.7 Darwin/10.6.0 
method POST 

cuando debería estar viendo que (se está trabajando en una versión local)

uri http://localhost:8888/oauth.php/request_token 
parameters 
headers Array 
.... Accept : */* 
.... Accept-Encoding : gzip, deflate 
.... Accept-Language : en-us 
.... Authorization : OAuth realm="", oauth_consumer_key="582d95bd45d455fa2e5819f88fc0c5a104d2c7ff3", oauth_signature_method="HMAC-SHA1", oauth_signature="agPSFdtlGxXv2sbrz3pRjHlROOE%3D", oauth_timestamp="1295272680", oauth_nonce="667A133C-5071-48AB-9F13-8146425E46B7", oauth_version="1.0" 
.... Connection : keep-alive 
.... Content-Length : 0 
.... Host : localhost:8888 
.... User-Agent : DearStranger/1.0 CFNetwork/485.12.7 Darwin/10.6.0 
method POST 

estoy usando PHP 5.2.17 en el servidor.

¿Tiene alguna idea para ayudarme a solucionar ese problema?

Gracias!

+1

¿Puede mostrar los encabezados reales (o $ _SERVER []) en lugar de solo los valores? – mario

+0

¿Estás seguro de que no se trata de un firewall que está eliminando los encabezados? Muchos firewalls incluirán encabezados aceptables en la lista blanca y eliminarán todos los demás. – ircmaxell

+0

¿Hay un proxy (calamar) en alguna parte? – powtac

Respuesta

5

Apache elimina el encabezado Autenticación porque representa un riesgo de seguridad cuando se utiliza con CGI. ¿Estás usando PHP a través de CGI?

Creo que PHP también quita Autenticación en algunas circunstancias. Nuevamente, existe el riesgo de que al exponerlo a las secuencias de comandos permita que el código de un usuario pueda oler a otros usuarios en el mismo servidor (por ejemplo, si Alice y Bob tienen cuentas).

+0

Sí, estoy usando php con CGI. No sabía que Apache elimina el encabezado Autenticación ... ¡extraño! – MartinMoizard

+1

¿De qué es este encabezado de Autenticación? –

1

Incluya los nombres reales de los encabezados que se van a cortar. Esta pregunta es inútil en su forma actual, forzándonos a adivinar ...

¿Ha comprobado con Firebug/HTTPFox que su navegador realmente está enviando esos encabezados? A menos que haya configurado específicamente el servidor para limpiar los encabezados, pasará a través de los personalizados como están.

El encabezado de autorización, que es donde se envían los datos de OAuth, SÓLO sería enviado por un cliente en respuesta a una solicitud de "autorización requerida" 401 del lado del servidor. Si no ha agregado la configuración del servidor "debe tener contraseña para entrar", el cliente no va a enviar información de autenticación.

+0

He editado mi mensaje, ahora puede ver los nombres de los encabezados. Entonces, el importante que se corta se llama "Autorización". Todavía no he comprobado nada con Firebug/HTTPFox porque mi solicitud se envía desde una aplicación de iPhone, pero por ahora se envía desde el simulador de iPhone. Estoy haciendo esta solicitud http después de que el servidor envió una respuesta de Autorización 401 requerida. – MartinMoizard

+0

Bueno, adhiere un proxy HTTP allí que puede registrar los encabezados que ve entrantes desde el emulador. PHP por sí solo no quitaría los encabezados, y Apache generalmente tampoco, por lo que es muy probable que tu aplicación no los envíe. –

+0

¿Y qué podría explicar que en un servidor local esté funcionando y no cuando estoy alojando mi código en otro lugar? ¡Voy a tratar de registrar los encabezados y te avisaré ...! Muchas gracias – MartinMoizard

6

En realidad, hay una solución bastante fácil. La falla establece con fastcgi. Solo puede proporcionar un archivo .htaccess con una regla de reescritura para guardar el encabezado.

<IfModule mod_rewrite.c> 

... 

# Pass Authorization headers to an environment variable 
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

</IfModule> 

crédito va aquí: https://drupal.org/node/1365168

También se habla de una solución aún más simple para que estas cabeceras pasan a través, si está utilizando una máquina virtual.

Cuestiones relacionadas