नेट क्या है :: ERR_HTTP2_PROTOCOL_ERROR?


36

मैं वर्तमान में एक वेबसाइट पर काम कर रहा हूं, जो net::ERR_HTTP2_PROTOCOL_ERROR 200Google Chrome पर एक त्रुटि चलाता है । मुझे यकीन नहीं है कि इस त्रुटि को क्या उकसा सकता है, मैंने सिर्फ HTTPS में वेबसाइट एक्सेस करते समय ही इसे पॉप आउट कर दिया था। मैं 100% यकीन नहीं कर सकता कि यह संबंधित है, लेकिन ऐसा लगता है कि यह जावास्क्रिप्ट को ठीक से निष्पादित करने से रोकता है।

उदाहरण के लिए, निम्न परिदृश्य होता है:

  1. मैं HTTPS में वेबसाइट एक्सेस कर रहा हूं

  2. मेरा ट्विटर फ़ीड https://publish.twitter.com के माध्यम से एकीकृत किया गया है

  3. मैं कंसोल में ERR_HTTP2_PROTOCOL_ERROR देख सकता हूं

  4. यदि मैं ट्विटर फ़ीड को लोड करने के लिए कोड निकालता हूं, तो त्रुटि बनी रहती है

  5. यदि मैं वेबसाइट को HTTP में एक्सेस करता हूं, तो ट्विटर फीड दिखाई देता है और त्रुटि गायब हो जाती है

Google Chrome त्रुटि को ट्रिगर करने वाला एकमात्र वेब ब्राउज़र है: यह एज और फ़ायरफ़ॉक्स दोनों पर अच्छा काम करता है। (एनबी: मैंने सफारी के साथ प्रयास किया, और मेरी भी ऐसी ही kcferrordomaincfnetwork 303त्रुटि है)

मैं सोच रहा था कि क्या यह सर्वर द्वारा दिए गए हेडर से संबंधित हो सकता है क्योंकि त्रुटि में यह '200' उल्लेख है, और 404/500 पेज कुछ भी ट्रिगर नहीं कर रहा है।

बात यह है कि त्रुटि का दस्तावेजीकरण नहीं किया गया है। Google खोज मुझे बहुत कम परिणाम देता है। इसके अलावा, मैंने देखा कि यह बहुत हाल के Google Chrome रिलीज़ पर दिखाई देता है; त्रुटि v.64.X पर पॉप नहीं होती है, लेकिन यह v.75 + (OS की परवाह किए बिना; मैं मैक थियो पर काम कर रहा हूं) पर करता हूं।

इस बिंदु पर किसी भी जाँच पड़ताल की ख़ुशी ख़ुशी होगी!

अग्रिम में धन्यवाद।

ट्रिस्टन


संपादित करें 1: फ़ायरफ़ॉक्स पर वेबसाइट ओके से संबंधित हो सकती है लेकिन सफारी पर नहीं (kCFErrorDomainCFNetwork त्रुटि 303) न तो क्रोम (शुद्ध :: ERR_SPDY_PROTOCOL_ERROR)


संपादित करें 2: आगे की जांच से पता निम्नलिखित हैं:

  • यदि सर्वर 2XX के बजाय 404 देता है, तो त्रुटि ठीक उसी पृष्ठ पर पॉप नहीं होती है
  • त्रुटि HTTPS प्रमाणपत्र के साथ स्थानीय पर पॉप नहीं होती है
  • एक अलग सर्वर पर त्रुटि पॉप (दोनों OVH के हैं), जो एक अलग प्रमाणपत्र का उपयोग करता है
  • त्रुटि कोई फर्क नहीं पड़ता कि PHP संस्करण का क्या उपयोग किया जाता है, 5.6 से 7.3 तक (फ्रेमवर्क का उपयोग किया गया: Cakephp 2.10)

संपादित करें 3: जैसा कि अनुरोध किया गया है, नीचे असफल रीसोर्स के लिए दिया गया हेडर है, जो पूरे वेब पेज पर है। भले ही त्रुटि HTTP हेडर 200 वाले प्रत्येक पृष्ठ पर ट्रिगर हो रही हो, वे पृष्ठ हमेशा क्लाइंट के ब्राउज़र पर लोड हो रहे होते हैं, लेकिन कभी-कभी एक तत्व गायब होता है (मेरी छूट में, बाहरी ट्विटर फ़ीड)। नेटवर्क टैब पर हर दूसरी संपत्ति में एक सफलता वापसी होती है, पूरे दस्तावेज को छोड़कर। कंसोल में विफल लाइन

Google Chrome शीर्षलेख (त्रुटि के साथ):

क्रोम हेडर

फ़ायरफ़ॉक्स हेडर (त्रुटि के बिना):

फ़ायरफ़ॉक्स हेडर

curl --head --http2कंसोल में एक अनुरोध निम्न सफलता देता है:

HTTP/2 200 
date: Fri, 04 Oct 2019 08:04:51 GMT
content-type: text/html; charset=UTF-8
content-length: 127089
set-cookie: SERVERID31396=2341116; path=/; max-age=900
server: Apache
x-powered-by: PHP/7.2
set-cookie: xxxxx=0919c5563fc87d601ab99e2f85d4217d; expires=Fri, 04-Oct-2019 12:04:51 GMT; Max-Age=14400; path=/; secure; HttpOnly
vary: Accept-Encoding

संपादित करें 4: क्रोम के साथ गहराई तक जाने की कोशिश: // नेट-एक्सपोर्ट / और https://netlog-viewer.appspot.com टूल बता रहे हैं कि अनुरोध RST_STREAM के साथ समाप्त होता है:

t=123354 [st=5170]    HTTP2_SESSION_RECV_RST_STREAM
                      --> error_code = "2 (INTERNAL_ERROR)"
                      --> stream_id = 1

इस अन्य पोस्ट में मैंने जो पढ़ा , उसके लिए " HTTP / 2 में, यदि क्लाइंट अनुरोध को निरस्त करना चाहता है, तो वह RST_STREAM भेजता है। जब सर्वर को RST_STREAM प्राप्त होता है, तो वह क्लाइंट को DATA फ्रेम भेजना बंद कर देगा, जिससे प्रतिक्रिया रुक जाएगी। (या डाउनलोड)। कनेक्शन अभी भी अन्य अनुरोधों के लिए उपयोग करने योग्य है, और अनुरोध / प्रतिक्रियाएं जो कि समाप्त हो गई हैं, के साथ समवर्ती थीं, प्रगति जारी रख सकती है। [...] यह संभव है कि जब तक RST_STREAM यात्रा करता है। सर्वर के लिए क्लाइंट, अनुरोध की पूरी सामग्री पारगमन में है और ग्राहक के पास पहुंच जाएगी, जो इसे छोड़ देगा। हालांकि, बड़ी प्रतिक्रिया सामग्री के लिए, RST_STREAM भेजने से सर्वर से पहले आने का एक अच्छा मौका हो सकता है। प्रतिक्रिया सामग्री भेजी जाती है, और इसलिए बैंडविड्थ की बचत होगी। "

वर्णित व्यवहार वही है जो मैं देख सकता हूं। लेकिन इसका मतलब यह होगा कि ब्राउज़र अपराधी है, और फिर मुझे समझ में नहीं आता कि दो समान पृष्ठों पर ऐसा क्यों होता है जिसमें एक 200 हेडर और दूसरा 404 (वही अगर मैं JS को अक्षम करता हूं)।


aboutssl.org/fix-google-chrome-error-err_ssl_protocol_error 110 में से एक परिणाम है -
Jaromanda X

मैं स्पष्ट रूप से यहां आया हूं, और केवल क्लाइंट-साइड से संबंधित उत्तर हैं, जो एक समाधान नहीं हो सकता है।
ट्रिस्टन जी

क्या गैर-क्रोम ब्राउज़र में त्रुटि होती है? यदि नहीं, तो यह क्लाइंट-साइड (विशेष रूप से चार्म ब्राउज़र) समस्या कैसे नहीं है?
जैरोमंडा एक्स ऑक्ट

1
संभवतः एक विकृत HTTP प्रतिक्रिया हेडर है। क्या पूरी साइट लोड नहीं हो रही है? या सिर्फ एक या अधिक संपत्ति? क्या आप HTTP / 2 का उपयोग करते समय लोड नहीं होने वाली संपत्ति के लिए HTTP प्रतिक्रिया में दिखाए गए HTTP प्रतिक्रिया हेडर को शामिल करने के लिए प्रश्न को संपादित कर सकते हैं? और एज / फ़ायरफ़ॉक्स के लिए भी जहां यह काम करता है?
बैरी पोलार्ड

1
वहाँ कुछ भी गलत नहीं देख सकता, इसलिए यह मुख्य अनुरोध नहीं है। कुकीज़ बात को भी नजरअंदाज करें - ऐसा नहीं है। यह देखने की कोशिश करें कि क्या आप पता लगा सकते हैं: michalspacek.com/…
बैरी पोलार्ड

जवाबों:


7

कई हफ्तों तक मैं इस "बग" से परेशान था:

net :: ERR_HTTP2_PROTOCOL_ERROR 200

मेरे मामले में, यह PHP द्वारा उत्पन्न छवियों पर हुआ।

यह header()स्तर पर था , और इस पर विशेष रूप से एक:

header ('Content-Length:'. Filesize($cache_file));

इसने स्पष्ट रूप से सटीक आकार नहीं लौटाया, इसलिए मैंने इसे हटा दिया और अब सब कुछ ठीक है।

इसलिए क्रोम हेडर के माध्यम से प्रेषित डेटा की सटीकता की जांच करता है, और यदि यह मेल नहीं खाता है, तो यह विफल हो जाता है।

संपादित करें

मैंने पाया कि क्यों के content-lengthमाध्यम से filesizeगलत गणना की जा रही थी: GZIPसंपीड़न PHP फ़ाइलों पर सक्रिय है, इसलिए प्रश्न में फ़ाइल को छोड़कर समस्या को ठीक कर देगा। इस कोड को इसमें डालें .htaccess:

SetEnvIfNoCase Request_URI ^ / thumb.php no-gzip -vary

यह काम करता है और हम हेडर रखते हैं Content-length


1
महान तुमने मुझे बचाया !!! लेकिन मैं अभी भी वास्तविक समस्या को नहीं समझता, मेरे मामले में त्रुटि केवल https में होती है, लेकिन http में नहीं।
निको

नमस्कार @Nico, हाँ, मुझे लगता है कि यह सामान्य है, घोषित आकार और ब्राउज़र (क्रोम) द्वारा डाउनलोड की गई फ़ाइल के बीच सत्यापन केवल https प्रोटोकॉल में किया जाना चाहिए। बहुत खुशी है कि यह समाधान आपकी मदद कर सकता है!
Xtendo

1
किसी तरह मैं "सामग्री-लंबाई" के बजाय "सामग्री-गति" का उपयोग करने में कामयाब रहा। अंतरिक्ष को हटाने के बाद, इसने काम किया। धन्यवाद।
मार्टिन लोट्रिंग

नमस्कार @ मॉर्टिन लॉटरी बहुत खुशी है कि यह अब आपके लिए काम करती है! :-)
१०:

6

मुझे पता नहीं चला कि वास्तव में क्या हो रहा है, लेकिन मुझे एक समाधान मिला।

OVH की CDN विशेषता अपराधी थी। मैंने इसे अपनी होस्ट सेवा पर स्थापित किया था, लेकिन अपने डोमेन के लिए अक्षम था क्योंकि मुझे इसकी आवश्यकता नहीं थी।

किसी तरह, जब मैं इसे सक्षम करता हूं, तो सब कुछ काम करता है।

मुझे लगता है कि यह अपाचे को HTTP2 प्रोटोकॉल का उपयोग करने के लिए मजबूर करता है, लेकिन जो मुझे समझ में नहीं आता है वह यह है कि वास्तव में मेरे प्रत्येक हेडर में एक HTTP2 उल्लेख था, जो मुझे लगता है कि इसका मतलब है कि सर्वर सही प्रोटोकॉल का उपयोग कर जवाब दे रहा था।

इसलिए मेरे विशेष मामले का समाधान सभी संबंधित डोमेन पर CDN विकल्प को सक्षम करना था।

अगर कोई भी बेहतर ढंग से समझता है कि यहां क्या हो सकता है, स्पष्टीकरण साझा करने के लिए स्वतंत्र महसूस करें।


purd

4

मुझे इसका सामना करना पड़ा क्योंकि Chrome में एक बड़ी प्रतिक्रिया भेजने पर http2 सर्वर ने कनेक्शन बंद कर दिया

क्यों? क्योंकि यह सिर्फ http2 सर्वर की एक सेटिंग है, जिसका नाम राइटटाइमआउट है


4

मेरे मामले में यह था - वेब सर्वर पर कोई डिस्क स्थान नहीं बचा।


दिलचस्प है, मेरे लिए एक ही है, सामने वेबसर्वर डिस्क भरा था। ऐसा लगता है कि नग्नेक्स इस स्थिति को नहीं पकड़ता क्योंकि लॉग में कुछ भी ध्यान देने योग्य नहीं था।
vchrizz

3

मुझे एक समान समस्या का अनुभव हुआ, मुझे HTTP GET अनुरोधों में से एक पर ERR_HTTP2_PROTOCOL_ERROR मिल रहा था।

मैंने देखा कि क्रोम अपडेट लंबित था, इसलिए मैंने क्रोम ब्राउज़र को नवीनतम संस्करण में अपडेट किया और अगली बार जब मैं ब्राउज़र को पुनः लोड करता हूं तो त्रुटि हो गई थी।


2

जब Nginx सर्वर बाहरी दुनिया के लिए नोड- js अनुप्रयोग को उजागर करने वाले होने पर मुझे यह समस्या थी। Nginx ने फ़ाइल (css, js, ...) को संकुचित किया gzipऔर क्रोम के साथ ऐसा ही लगा।

समस्या तब हल हुई जब हमने पाया कि नोड- js सर्वर भी सामग्री को gzip के साथ संपीड़ित करता है। किसी-किसी में, इस समस्या को दोहराता है। नोड-जेएस संपीड़न को रद्द करने से समस्या हल हो गई।


6
यह देखना दिलचस्प है कि कई व्यक्तियों ने पहले ही इस पोस्ट का जवाब दिया है, और हर बार समस्या की जड़ कुछ अलग थी। मुझे लगता है कि यह त्रुटि वास्तव में काफी भ्रामक है।
ट्रिस्टन जी

2

यह त्रुटि वर्तमान में ठीक की जा रही है: https://chromium-review.googlesource.com/c/chromium/src//200634

लेकिन इसने मेरी मदद की, nginx सेटिंग बदलना:

  • गज़िप चालू करना;
  • add_header 'कैश-कंट्रोल' 'नो-स्टोर, नो-कैश, री-रिवाइंडलेट, प्रॉक्सी-रिवाइडलेट, अधिकतम आयु = 0';
  • समाप्त हो रहा है;

मेरे मामले में, Nginx Node.js एप्लिकेशन के लिए एक रिवर्स प्रॉक्सी के रूप में कार्य करता है।


इस जवाब ने मेरे लिए भी काम किया। इस लिंक का पालन करें docs.nginx.com/nginx/admin-guide/web-server/compression उचित वाक्यविन्यास के लिए
भार्गवी गोपालचार

1

यह मेरे साथ तब हुआ जब मैंने एक नया डोमेन नाम पंजीकृत किया, उदाहरण के लिए, "new" for example.com (new.example.com)। नाम को कुछ घंटों के लिए मेरे स्थान पर अस्थायी रूप से हल नहीं किया जा सका, जबकि इसे विदेशों में हल किया जा सकता था। इसलिए मैंने उस वेबसाइट का परीक्षण करने के लिए एक प्रॉक्सी का उपयोग किया जहां मैंने net::ERR_HTTP2_PROTOCOL_ERRORकुछ AJAX पोस्ट के लिए क्रोम कंसोल में देखा था। घंटों बाद, जब नाम को स्थानीय रूप से फिर से शुरू किया जा सकता था, तो वे त्रुटि बस गायब हो गई।

मुझे लगता है कि उस त्रुटि का कारण यह है कि AJAX अनुरोधों को मेरे प्रॉक्सी द्वारा पुनर्निर्देशित नहीं किया गया था, यह सिर्फ एक वेबसाइट पर जाता है जिसे मेरे स्थानीय DNS रिज़ॉल्वर द्वारा हल नहीं किया गया था।


1

मुझे कई बार इस त्रुटि का सामना करना पड़ा और यह सर्वर से क्लाइंट तक बड़े संसाधनों (3 एमबी से बड़े) को स्थानांतरित करने के कारण था।


0

मुझे एक ही मुद्दा मिला (asp, c # - HttpPostedFileBase) जब मैं एक फ़ाइल पोस्ट कर रहा था जो 1MB से बड़ी थी (भले ही एप्लिकेशन को फ़ाइल आकार के लिए कोई सीमा नहीं है), मेरे लिए मॉडल वर्ग के सरलीकरण में मदद मिली। यदि आपको यह समस्या मिली है, तो मॉडल के कुछ हिस्सों को हटाने का प्रयास करें, और देखें कि क्या यह किसी भी तरह से मदद करेगा। अजीब लगता है, लेकिन मेरे लिए काम किया।


0

मैं पिछले हफ्ते से इस समस्या का सामना कर रहा हूं क्योंकि मैं AJAX के माध्यम से अपने PHP सर्वर को DELETE अनुरोध भेजने की कोशिश कर रहा हूं। मैंने हाल ही में अपनी होस्टिंग योजना को अपग्रेड किया है जहां मेरे पास अपने होस्ट पर एक SSL प्रमाणपत्र है जो PHP और JS फ़ाइलों को संग्रहीत करता है। SSL प्रमाणपत्र जोड़ने के बाद से अब मुझे इस समस्या का अनुभव नहीं है। यह उम्मीद करना इस अजीब त्रुटि के साथ मदद करता है।


0

मुझे भी इस त्रुटि का सामना करना पड़ा और मुझे विश्वास है कि इसके पीछे कई कारण हो सकते हैं। मेरा था, एआरआर समयबद्ध हो रहा था।

मेरे मामले में, ब्राउज़र एक रिवर्स प्रॉक्सी साइट के लिए अनुरोध कर रहा था जहां मैंने अपने पुनर्निर्देशन नियम निर्धारित किए हैं और वह प्रॉक्सी साइट अंततः वास्तविक साइट का अनुरोध कर रही है। अब विशाल डेटा के लिए यह 2 मिनट 5 सेकंड से अधिक समय ले रहा था और मेरे सर्वर के लिए एप्लिकेशन अनुरोध रूटिंग समय 2 मिनट पर सेट किया गया था। मैंने नीचे चरणों द्वारा ARR टाइमआउट बढ़ाकर इसे ठीक किया: 1. IIS पर जाएं। सर्वर नाम पर क्लिक करें 3. बीच के फलक में एप्लिकेशन रिक्वेस्ट रूटिंग कैश पर क्लिक करें। राइट पेन में सर्वर प्रॉक्सी सेटिंग्स पर क्लिक करें। टाइमआउट 6 बढ़ाएं लागू करें पर क्लिक करें


0

हमारे मामले में, कारण अमान्य हैडर था। जैसा कि एडिट 4 में बताया गया है:

  • लॉग ले लो
  • दर्शक में ईवेंट चुनें
  • HTTP2_SESSION को चुना

कुछ इसी तरह देखें:

HTTP2_SESSION_RECV_INVALID_HEADER

-> त्रुटि = "शीर्ष लेख में अमान्य वर्ण।"

-> शीर्षलेख_नाम = " चारसेट = utf-8 "


0

मेरी टीम ने एक एकल जावास्क्रिप्ट फ़ाइल पर देखा जिसे हम सेवा कर रहे थे। हर दूसरी फाइल ने ठीक काम किया। हम से बदल http2करने के लिए वापस http1.1या तो और फिर net::ERR_INCOMPLETE_CHUNKED_ENCODINGया ERR_CONTENT_LENGTH_MISMATCH। हमें अंततः पता चला कि एक कॉर्पोरेट फ़िल्टर (ट्रस्टवेव) था जो गलती से एक "इन्फोलक" का पता लगा रहा था (हमें संदेह है कि यह हमारी फ़ाइल / फ़ाइलनाम में कुछ पता चला था जो एक सामाजिक सुरक्षा नंबर जैसा था)। इस फ़िल्टर को मोड़ने के लिए कॉर्पोरेट प्राप्त करने से हमारे मुद्दों का समाधान हुआ।


0

हमने लंबे बेस 64 स्ट्रिंग्स वाले पृष्ठों पर इस समस्या का अनुभव किया। समस्या तब होती है क्योंकि हम CloudFlare का उपयोग करते हैं।

विवरण: https://community.cloudflare.com/t/err-http2-protocol-error/119619

मंच पोस्ट से मुख्य अनुभाग:

कई ब्राउज़रों पर गुप्त टैब पर आगे के परीक्षण के बाद, फिर BASE64 से वास्तविक .png छवि के लिए कोड पर परिवर्तन करना, मुद्दा फिर कभी किसी भी ब्राउज़र में नहीं हुआ। । बेस के बनने से पहले .png के पास लगभग 500kb थी, इसलिए CloudFlare के पास डोमेन और हर्को के बीच एक प्रॉक्सी के रूप में एक ही लाइन (क्योंकि बेस 64 एक लंबी स्ट्रिंग है) पर टेक्स्ट की विशाल लाइनों के साथ समस्याएँ हैं। जैसा कि पहले उल्लेख किया गया है, सीधे हरोकू यूआरएल को मारना भी इस मुद्दे पर कभी नहीं हुआ।

क्लाउड हैक को अस्थायी हैक HTTP / 2 को निष्क्रिय करना है।

आशा है कि कोई और बेहतर समाधान तैयार कर सकता है जिसे CloudFlare पर HTTP / 2 को निष्क्रिय करने की आवश्यकता नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.