PHP apache_request_headers () gerçeklik ile diagrees (Kundakçı tarafından teyit edildiği gibi): neden?

4 Cevap php

Ben (YUI.util.Connect.asyncRequest kullanılarak yapılan) Ajax istekleri kullanan PHP bir web uygulaması yazdım.

Çoğu zaman, bu çalışıyor. Bu talep XMLHttpRequest bir X-Requested-With değeri ile gönderilir. Benim PHP denetleyici kodu gelen bir isteği Ajax ya da değil ve tüm iyi çalışıp çalışmadığını kontrol etmek için () apache_request_headers kullanır.

Ama her zaman değil. Aralıklı, ben Ajax isteği gönderilir (ve Kundakçı istek üzerine başlıkları XMLHttpRequest bir X-istenen-Birlikte içerdiğini benim için doğrular) ama apache_request_headers () kendi listesinde bu başlık dönen değil bir durum alıyorum.

Aşağıdaki gibi apache_request_headers var_dump ne zaman çıkış () (eksikliğini not X-

'Host' => string 'peterh.labs.example.com' (length=26)
'User-Agent' => string 'Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.3) Gecko/2008101315 Ubuntu/8.10 (intrepid) Firefox/3.0.3' (length=105)
'Accept' => string 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' (length=63)
'Accept-Language' => string 'en-gb,en;q=0.5' (length=14)
'Accept-Encoding' => string 'gzip,deflate' (length=12)
'Accept-Charset' => string 'ISO-8859-1,utf-8;q=0.7,*;q=0.7' (length=30)
'Keep-Alive' => string '300' (length=3)
'Connection' => string 'keep-alive' (length=10)
'Referer' => string 'http://peterh.labs.example.com/qmail/' (length=40)
'Cookie' => string 'WORKFLOW_SESSION=55f9aff2051746851de453c1f776ad10745354f6' (length=57)
'Pragma' => string 'no-cache' (length=8)
'Cache-Control' => string 'no-cache' (length=8)

Ama Kundakçı bana söyler:

Request Headers:
Host             peterh.labs.example.com
User-Agent       Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.3) Gecko/2008101315 Ubuntu/8.10 (intrepid) Firefox/3.0.3
Accept           text/html,application/xhtml+xml,application/xml;q=0.9,**;q=0.8
Accept-Language  en-gb,en;q=0.5
Accept-Encoding  gzip,deflate
Accept-Charset   ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive       300
Connection       keep-alive
X-Requested-With XMLHttpRequest
Referer          http://peterh.labs.example.com/qmail/
Cookie           WORKFLOW_SESSION=55f9aff2051746851de453c1f776ad10745354f6

Aynı kodu çalıştırırken bu uyumsuzluğu (görünüşte) aralıklı. Bu yazılımı söz konusu olduğunda Ama ben "aralıklı" inanmıyorum! Yardım!

4 Cevap

Ben apache_request_headers () ve kundakçı uyumsuzluğu, ancak istek başlıklarını okumak için size $ _SERVER süper global kullanabilirsiniz neden emin değilim

each header that is being sent by a client (and it doesn't matter how is the client) will arrive to the $SERVER array. The key of that header will be with HTTP prefix, all letters capital and dash is converted to underscore (_)

sizin durumunuzda da gerekli değeri bulabilirsiniz:

$ _SERVER ['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'

Bu soru karşısında gelenlerin ileride başvurmak için, "kesintili" bir yönlendirme oluyor sunucu tarafında nedeniyle olabilir. 302 yönlendirme oluşursa X-istenen-ile başlığının orijinal isteğinde gönderilen oldu olsa bile birlikte geçti değildir. Bu sorunun ilk neden olabilir.

Eksik başlık süper küreseli olmadığını iki kez kontrol $_SERVER. Ben gerçekten olsaydı Genel olarak, ben apache_ * güvenmek olmaz.

Bir yan not olarak, X-Talep-ile bir standart yok mu? Ben ekleyerek çeşitli kütüphanelerde okudum, ama henüz standart haline bilmiyordum.

Ben özellikle bu davayı cevap veremez, ama genel olarak ben yerine bir başlığın, xmlhttp isteklerini sinyal için bir (sorgu) parametresini kullanarak öneriyoruz. Sen HTTP başlıklarıyla keman kendi üzerine alabilir ne komik, güvenlik veya proxy sunucusu biliyor, ya da düz bir tarayıcı HTML yanıt (ya da tersi) olmalıydı AJAX yanıtı önbelleğe asla.