2014-10-20 12 views
13

Attualmente sto provando a leggere l'intestazione di autorizzazione in uno script PHP che sto chiamando con una richiesta POST. L'intestazione Autorizzazione è popolata con un token. Sembra che l'intestazione dell'autorizzazione sia in qualche modo rimossa prima che arrivi al mio script PHP. Sto eseguendo la richiesta di post con Postman (addon di Chrome) e ho abilitato CORS nel mio script PHP. Non ho accesso direttamente al server Apache.Intestazione di autorizzazione mancante nella richiesta POST di PHP

HTTP Request:

Accept:*/* 
Accept-Encoding:gzip,deflate 
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,ja;q=0.2 
Authorization:Bearer mytoken 
Cache-Control:no-cache 
Connection:keep-alive 
Content-Length:32 
Content-Type:text/plain;charset=UTF-8 
Host:www.myhost.com 
Origin:chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm 
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)  
Chrome/38.0.2125.104 Safari/537.36 

script PHP:

header("Access-Control-Allow-Origin: *"); 
header("Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type,  Accept"); 
header("Content-Type: application/json"); 

$headers = getallheaders(); 
echo $headers['Authorization']; 

Le uscite di script di cui sopra '' (= nulla).

+0

Qualcuno ha un'idea di cos'altro potrei controllare per eseguire il debug del problema? – jimmy

risposta

35

Dopo un po 'di tempo abbiamo trovato una soluzione a questo problema. In qualche modo l'intestazione di autorizzazione è stata eliminata e aggiungendo le seguenti righe nel mio .htaccess sono riuscito a farlo funzionare.

RewriteEngine On 
RewriteCond %{HTTP:Authorization} ^(.*) 
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] 
+0

Ho avuto lo stesso problema durante il tentativo di utilizzare l'autorizzazione HTTP di base con il mio REST API su Php 5.4 e Apache. Avevo modificato il file .htaccess per supportare RewriteEngine On per il resto API e allo stesso modo tutti gli header delle mie richieste sembravano essere lì tranne l'autorizzazione quando li interrogavo in PHP. La tua correzione è corretta, grazie! – Deemoe

+1

Questo risolve lo stesso problema che si verifica quando si utilizza CodeIgniter 3 utilizzando la libreria codeigniter-restserver quando vengono utilizzati percorsi personalizzati. È interessante notare che crea anche due intestazioni, "HTTP_AUTHORIZATION" e "REDIRECT_HTTP_AUTHORIZATION", entrambe con un valore identico. – tj111

+0

Risposta eccezionale, funziona perfettamente. Se hai altre condizioni nel tuo file .htaccess, l'ho messo all'inizio (prima). – Calin

1

seguito array contiene intestazioni di richiesta, che può mancare nella variabile $ _SERVER

$headers = apache_request_headers(); 

(particolarmente vero per 'HTTP_X_REQUESTED_WITH' intestazione ajax, che si ritroverà in questo modo come: $headers['X_REQUESTED_WITH']

0

Non so perché il mio php 5.4.45 in esecuzione su NGINX ha rifiutato qualsiasi intestazione personalizzata contenente caratteri di sottolineatura:

ACCETTATO: CURLOPT_HTTPHEADER => array ('autorizzazione: 123456')

RIFIUTATO: CURLOPT_HTTPHEADER => array ('my_Authorization: 123456')

spero che possa aiutare qualcuno. Cheers

Problemi correlati