الكشف عن نوع طلب HTTP (GET، الرأس، الخ) من المجموعة الاستشارية لاندونيسيا الثعبان

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

سؤال

وكيف يمكنني معرفة طلب HTTP بلدي بيثون CGI تلقى؟ أحتاج السلوكيات المختلفة للرأس وGET.

وشكرا!

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

المحلول

import os

if os.environ['REQUEST_METHOD'] == 'GET':
    # blah

نصائح أخرى

وهذه ليست إجابة مباشرة على سؤالك. ولكن سؤالك ينبع من فعل الأشياء بطريقة خاطئة.

لا تكتب بيثون البرامج النصية CGI.

mod_wsgi التطبيق. والأفضل من ذلك، استخدام إطار الشبكة بيثون. هناك العشرات. اختيار واحد مثل WERKZEUG .

والمعيار WSGI (الموصوفة في PEP 333 ) يجعل من ذلك بكثير وأسهل بكثير للعثور على الأشياء في طلب ويب.

وتنفيذ mod_wsgi هو أسرع وأكثر أمانا من CGI.

وإطار شبكة الإنترنت هو أيضا أسهل من الكتابة الخاصة النصي CGI أو mod_wsgi طلبك.

وماذا تحتاج للتمييز بين GET والرأس؟

وعادة يجب أن لا تمييز وينبغي أن يعامل طلب HEAD تماما مثل GET. وذلك لأن المقصود طلب HEAD للعودة نفس رؤوس بالضبط كما GET. والفرق الوحيد هو أنه سيكون هناك أي محتوى استجابة. فقط لأنه لا يوجد محتوى استجابة وإن لا يعني انك لم يعد لدينا للعودة صالح رأس طول المحتوى، أو رؤوس الأخرى، التي تعتمد على المحتوى استجابة.

في mod_wsgi، الذي مختلف الناس تشير لك في، وسوف فعلا عمدا تغيير أسلوب طلب من الرأس إلى GET في بعض الحالات للوقاية من الناس الذين يعالجون خطأ الرأس بشكل مختلف. حالة معينة حيث يتم ذلك حيث يتم سجلت تصفية إخراج أباتشي. والسبب أن يتم ذلك في هذه الحالة هو لأن تصفية إخراج قد نتوقع أن نرى محتوى الاستجابة ومن أن تولد رؤوس استجابة إضافية. لو كنت لتقرر عدم عناء توليد أي محتوى استجابة لطلب HEAD، سوف يحرم تصفية إخراج المحتوى ورؤوس أنها إضافة ثم قد لا أتفق مع ما ستعاد من طلب GET. النتيجة النهائية لهذا هو أنه يمكنك الاشياء مخابئ وتشغيل المتصفح.

والشيء نفسه يمكن أن ينطبق على قدم المساواة للمخطوطات CGI وراء أباتشي كمرشحات الانتاج لا يزال من الممكن أضاف في هذه الحالة أيضا. للمخطوطات CGI لا يوجد شيء في مكانه على الرغم من أن حماية ضد مستخدمي يجري غبي ويفعلون أشياء بشكل مختلف لطلب HEAD.

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