2011-01-17 14 views
5

Ho cercato di ricevere le richieste HTTP con campi personalizzati nelle intestazioni, ma sembra che il mio server li rimuove ...Server rimuove i campi di intestazione HTTP personalizzate

Questa è la richiesta che sto trasmettendo al server (ho letto che richiesta con un proxy HTTP):

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 

ho stampato le intestazioni della richiesta quando arrivo sul mio page.php. Vedo che:

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 

quando dovrebbe essere visto che (si sta lavorando su una versione locale)

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 

Sto usando PHP 5.2.17 sul server.

Avete qualche idea per aiutarmi a risolvere quel problema?

Grazie!

+1

Puoi mostrare le intestazioni reali (o $ _SERVER []) invece dei soli valori? – mario

+0

Sei sicuro che non sia un firewall che sta eliminando le intestazioni? Un sacco di firewall cancellerà le intestazioni accettabili e rimuoverà tutte le altre. – ircmaxell

+0

C'è un proxy (calamaro) ovunque? – powtac

risposta

5

Apache rimuove l'intestazione di autenticazione perché è un rischio per la sicurezza, se utilizzato con CGI. Stai usando PHP attraverso CGI?

Penso che in alcune circostanze il PHP toglie anche l'autenticazione. Di nuovo, c'è il rischio che esporlo agli script consenta al codice di un utente di annusare gli altri utenti sullo stesso server (ad es., Se Alice e Bob hanno entrambi account).

+0

Sì, sto usando php con CGI. Non sapevo che Apache toglie l'intestazione di autenticazione ... strano! – MartinMoizard

+1

Qual è l'intestazione di Autenticazione di cui parli? –

1

Si prega di includere i nomi effettivi delle intestazioni che vengono tagliate. Questa domanda è inutile nella sua forma attuale, costringendoci a indovinare ...

Hai controllato con Firebug/HTTPFox che il tuo browser sta effettivamente inviando quelle intestazioni? A meno che tu non abbia configurato specificamente il server per ripulire le intestazioni, passerà attraverso quelle personalizzate così come sono.

L'intestazione Autorizzazione, che è il punto in cui vengono inviati i dati OAuth, verrà inviata SOLO da un client in risposta a una richiesta 401 "autorizzazione richiesta" lato server. Se non è stata aggiunta la configurazione "must have password to get in" sul lato server, il client non invierà informazioni auth.

+0

Ho modificato il mio messaggio, ora puoi vedere i nomi delle intestazioni. Quindi l'importante che viene tagliato è chiamato "Autorizzazione". Non ho ancora controllato Firebug/HTTPFox perché la mia richiesta è stata inviata da un'app per iPhone, ma per ora è stata inviata dal simulatore di iPhone. Sto facendo questa richiesta http dopo che il server ha inviato una risposta richiesta 401 Autorizzazione. – MartinMoizard

+0

Bene, attaccare un proxy HTTP lì che può registrare le intestazioni che vede in arrivo dall'emulatore. PHP di per sé non eliminerebbe le intestazioni e Apache di solito non lo farebbe, quindi molto probabilmente la tua app non le sta inviando. –

+0

E cosa potrebbe spiegare che su un server locale funziona e non quando sto ospitando il mio codice da qualche altra parte? Cercherò di registrare le intestazioni e ti farò sapere ...! Grazie mille – MartinMoizard

6

In realtà, c'è una soluzione piuttosto semplice. La colpa è con fastcgi. Puoi solo fornire un file .htaccess con una regola di riscrittura per salvare l'intestazione.

<IfModule mod_rewrite.c> 

... 

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

</IfModule> 

credito va qui: https://drupal.org/node/1365168

Si parla anche di una soluzione ancora più semplice lasciare che queste intestazioni passano attraverso, se si utilizza un host virtuale.

Problemi correlati