त्रुटि पृष्ठों पर चार भयावह षोडश अंक - और उन्हें कैसे दूर किया जाए

आप इस रहस्यमयी गड़बड़ का सामना तभी करेंगे जब एक साथ कई स्थितियाँ संयुक्त हो जाएँगी।

आपकी साइट को Apache Server द्वारा होस्ट किया गया है। (यह शर्त पूरी करना मुश्किल नहीं है: अब अपाचे सबसे लोकप्रिय वेब सर्वरों में से एक है।)

आपकी साइट में एक nginx कैशिंग सर्वर भी है। (एक छोटी सी साइट के लिए साझा होस्टिंग खरीदना, आप अंतिम मिनट तक कुछ भी नहीं जान सकते हैं कि होस्टिंग प्रदाता, बचत संसाधनों की देखभाल कर रहा है, nginx को लटका दिया है। जब तक, निश्चित रूप से, आप HTTP प्रतिक्रिया के हेडर को पढ़ने के लिए अच्छा है ।)

आपने PHP पर चलने वाला कुछ इंजन लगाया। (उदाहरण के लिए, सीएमएस ड्रुपल। या, उदाहरण के लिए, मीडियाविकि विकी।)

उसके बाद, आप यह देखना चाहते हैं कि इंजन द्वारा बनाए गए त्रुटि पृष्ठ संख्या 404 कैसे दिखते हैं। आप विकि पर एक गैर-मौजूद लेख का पता फ़ीड करते हैं, या Drupal पर एक गैर-मौजूद पृष्ठ का पता फ़ीड करते हैं।

और फिर वे आते हैं। चार हेक्साडेसिमल अंक। वे 404 त्रुटि (साथ ही 403) का वर्णन करते हुए पृष्ठ के कोड में दिखाई देते हैं, वे इस कोड में " <! DOCTYPE " के सामने आते हैं, और इसलिए कई ब्राउज़र (उदाहरण के लिए, फ़ायरफ़ॉक्स) उन्हें पृष्ठ के शेष पाठ के ऊपर प्रदर्शित करते हैं - जिसका अर्थ है सीएमएस या विकी के रचनाकारों द्वारा कल्पना की गई डिज़ाइन को तोड़ें:

3340 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr"> <head> <title> … … … 

मामला क्या है?

Drupal, यह पता चला है, त्रुटि 404 के मामले में " drupal_set_header ('HTTP / 1.1 404 Not Found') फ़ंक्शन को कॉल करता है। हां, और मीडियाविकि में (यहां तक ​​कि सबसे हाल के संस्करण 1.18 - चेक किए गए) में भी ऐसी ही त्रुटि है। सुपरग्लोबल चर $ _SERVER ['SERVER_PROTOCOL'] की सावधानीपूर्वक जांच करने के बजाय , इंजन भोलेपन से मानते हैं कि HTTP प्रोटोकॉल संस्करण 1.1 का उपयोग करना सुरक्षित है।

इस बीच, यह मामले से बहुत दूर है: बैकएंड के साथ संचार करते समय nginx HTTP प्रोटोकॉल संस्करण 1.0 पर निर्भर करता है। बदले में, अपाचे सर्वर, पीएचपी प्रतिक्रिया में HTTP 1.1 प्रोटोकॉल (एक लापता सामग्री लंबाई हेडर के साथ ) को देखकर, HTTP 1.1 पर स्विच करता है और विखंडू में प्रतिक्रिया भेजता है और हेडर "ट्रांसफर-एन्कोडिंग: chunked" प्रदान करता है, लेकिन ग्रैंग्क्स है इसने मदद नहीं की

समस्या को कैसे हल करें?

बहुत सरल है। यह अपाचे सर्वर विन्यास में दो निर्देश देने के लिए पर्याप्त है (उदाहरण के लिए, विकी या सीएमएस इंजन के साथ निर्देशिका के अंदर .htaccess फ़ाइल ) जो अपाचे को किसी भी विकल्प के बिना HTTP संस्करण 1.0 का उपयोग करने के लिए मजबूर करती है :

 SetEnv force-response-1.0 1 SetEnv downgrade-1.0 1 

यह आपको तुरंत वांछित प्राप्त करने की अनुमति देता है।

ठीक है, आप ऊपर वर्णित समस्या को एक नया नहीं कह सकते - लेकिन इस बीच, इसे हल करने के लिए पर्याप्त नुस्खा केवल 2009 उप-रिकॉर्ड की टिप्पणियों में हैब्राह के साथ निहित है, और इसलिए पूरी तरह से Google नहीं करता है। व्यक्तिगत रूप से, मेरे लिए इसे WebFaction पर खोजना आसान था।

मैं समस्या के अपने स्वयं के वक्तव्य के हबराब्र पर पोस्ट करके स्थिति को ठीक कर रहा हूं और इसे हल करने के लिए एक प्रभावी नुस्खा को फिर से लिख रहा हूं।

Source: https://habr.com/ru/post/In135662/


All Articles