PHP apache_request_headers() diagrees مع الواقع (كما أكدت الحرائق):لماذا ؟

StackOverflow https://stackoverflow.com/questions/249968

سؤال

كنت قد كتبت التطبيق على شبكة الإنترنت في PHP مما يجعل استخدام طلبات اياكس (باستخدام YUI.util.ربط.asyncRequest).

أكثر من مرة, هذا يعمل بشكل جيد.يتم إرسال الطلب مع X-طلب-مع قيمة مدعوم.بي PHP رمز وحدة تحكم يستخدم apache_request_headers() للتحقق ما إذا كانت واردة طلب Ajax أو لا و كل شيء يعمل بشكل جيد.

ولكن ليس دائما.بشكل متقطع ، أنا الحصول على الحالة التي يكون فيها طلب اياكس يتم إرسال (و الحرائق يؤكد لي أن رؤوس بناء على طلب تشمل X-طلب-مع من مدعوم) ولكن apache_request_headers() ليست العودة التي في رأس قائمتها.

الإخراج من var_dump على apache_request_headers() هو كما يلي (لاحظ عدم وجود 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)

ولكن الحرائق يقول لي:

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

هذا الخلل هو (على ما يبدو) متقطعة عند تنفيذ نفس القانون.ولكن أنا لا أؤمن "متقطعة" عندما يتعلق الأمر البرمجيات!مساعدة!

هل كانت مفيدة؟

المحلول

لست متأكدا لماذا apache_request_headers() و الحرائق غير متطابقة ، ولكن من أجل طلب قراءة رؤوس يمكنك استخدام $_SERVER السوبر العالمية

كل رأس يتم إرسالها من قبل العميل (و لا يهم كيف هو العميل) سوف تصل إلى $خادم الصفيف.مفتاح رأس سيكون مع HTTP بادئة كل الحروف كابيتال داش يتم تحويلها إلى تسطير أسفل السطر (_)

في هذه الحالة يمكنك العثور الضرورية قيمة في:

$_SERVER['HTTP_X_REQUESTED_WITH'] = 'مدعوم'

نصائح أخرى

للرجوع إليها في المستقبل من أولئك القادمين عبر هذا السؤال ، "متقطعة" قد يكون راجعا إلى توجيه يحدث من جانب الخادم.إن توجيه 302 يحدث X-طلب-مع رأس لا مرت على طول على الرغم من أنها قد أرسلت في الطلب الأصلي.قد يكون هذا السبب الأصلي للمشكلة.

التحقق من أن المفقودين رأس ليس في superglobal $_SERVER.عموما لا تعتمد على apache_* إذا كنت حقا إلى.

على جانب علما ، X-طلب-مع المعيار ؟ لقد قرأت عن مختلف المكتبات مضيفا أنه, ولكن لم أكن أعرف أنه أصبح القياسية بعد.

لا أستطيع على وجه التحديد الإجابة على هذه الحالة ، ولكن بصفة عامة أنصح باستخدام (الاستعلام) معلمة إلى إشارة xmlhttp طلبات بدلا من رأس.أنت لا تعرف أبدا ما مضحك الأمن أو ملقم وكيل قد تأخذ على عاتقها كمان مع رؤوس HTTP أو ذاكرة التخزين المؤقت AJAX الاستجابة التي ينبغي أن يكون سهل المتصفح HTML استجابة (أو العكس بالعكس).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top