400 गलत अनुरोध - एचटीटीपीएस पोर्ट को भेजा गया सादा एचटीटीपी अनुरोध

Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं.
जानकारी

समस्या का ब्यौरा

क्लाइंट ऐप्लिकेशन को The plain HTTP request was sent to HTTPS port मैसेज के साथ HTTP 400 Bad Request रिस्पॉन्स मिलता है.

गड़बड़ी का मैसेज

क्लाइंट ऐप्लिकेशन को यह रिस्पॉन्स कोड मिलता है:

HTTP/1.1 400 Bad Request

नीचे दिया गया एचटीएमएल गड़बड़ी वाला पेज:

<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
</body>
</html>

संभावित कारण

वजह ब्यौरा समस्या हल करने के लिए निर्देश
TLS से कॉन्फ़िगर किए गए वर्चुअल होस्ट के लिए एचटीटीपी अनुरोध क्लाइंट, TLS से कॉन्फ़िगर किए गए वर्चुअल होस्ट को एचटीटीपी अनुरोध भेजता है Edge के सार्वजनिक और निजी क्लाउड के उपयोगकर्ता
TLS के कॉन्फ़िगर किए गए टारगेट एंडपॉइंट पर एचटीटीपी अनुरोध टारगेट एंडपॉइंट में, TLS की सुविधा वाले बैकएंड सर्वर पर एचटीटीपी अनुरोध किया गया. Edge के सार्वजनिक और निजी क्लाउड के उपयोगकर्ता
टारगेट सर्वर का गलत कॉन्फ़िगरेशन टारगेट सर्वर को सुरक्षित पोर्ट 443 के साथ कॉन्फ़िगर किया गया है, लेकिन एसएसएल चालू नहीं है. Edge के सार्वजनिक और निजी क्लाउड के उपयोगकर्ता

वजह: TLS से कॉन्फ़िगर किए गए वर्चुअल होस्ट पर एचटीटीपी अनुरोध

यह गड़बड़ी तब होती है, जब कोई क्लाइंट Apigee पर किसी एपीआई से कनेक्ट करने की कोशिश कर रहा है और बताया गया वर्चुअल होस्ट, एसएसएल का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया है और उसे इसके बजाय एक एचटीटीपी अनुरोध मिलता है.

संक्रमण की जांच

यह समस्या नॉर्थबाउंड एंडपॉइंट पर होती है. क्लाइंट ऐप्लिकेशन और राऊटर के बीच के एंट्री पॉइंट इंटरैक्शन पर, एपीआई अनुरोध फ़ेल हो जाते हैं. इसलिए, गड़बड़ी के ये मैसेज NGINX राऊटर के ऐक्सेस लॉग में लॉग नहीं किए जाते. इसलिए, इन अनुरोधों को एपीआई मॉनिटरिंग और ट्रेस टूल जैसे टूल में कैप्चर नहीं किया जाता.

  1. अपने एपीआई अनुरोध की पुष्टि करें और देखें कि क्या आपने ऐसे होस्ट उपनाम के लिए एचटीटीपी अनुरोध किया है जिसे सिर्फ़ सुरक्षित पोर्ट 443 पर अनुरोध स्वीकार करने के लिए कॉन्फ़िगर किया गया है. अगर ऐसा है, तो इसी वजह से समस्या हुई है.

    गलत एपीआई अनुरोध का सैंपल:

    curl http://org-test.apigee.net:443/400-demo
    
    <html>
    <head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
    <body>
    <center><h1>400 Bad Request</h1></center>
    <center>The plain HTTP request was sent to HTTPS port</center>
    <hr><center>server</center>
    </body>
    </html>
    
  2. ऊपर दिए गए सैंपल अनुरोध में, ध्यान दें कि सुरक्षित पोर्ट 443 पर, होस्ट के उपनाम myorg-test.apigee.net पर एचटीटीपी अनुरोध किया गया है. 400 Bad Request गड़बड़ी की वजह यही है.

रिज़ॉल्यूशन

आपको यह पुष्टि करनी होगी कि क्लाइंट, एचटीटीपी के बजाय एचटीटीपी का इस्तेमाल कर रहा है या नहीं. साथ ही, नीचे बताए गए तरीके से सही अनुरोध करना होगा:

एपीआई अनुरोध का सैंपल:

curl https://org-test.apigee.net:443/400-demo

या

curl https://org-test.apigee.net/400-demo
< HTTP/1.1 200 OK
< Date: Thu, 25 Feb 2021 13:01:43 GMT
< Content-Type: text/xml;charset=UTF-8
< Content-Length: 403
< Connection: keep-alive
< Server: gunicorn/19.9.0
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Credentials: true

वजह: TLS से कॉन्फ़िगर किए गए टारगेट एंडपॉइंट पर एचटीटीपी अनुरोध

यह गड़बड़ी तब होती है, जब आपने एपीआई प्रॉक्सी के टारगेट एंडपॉइंट में, TLS की सुविधा वाले बैकएंड सर्वर पर गलत तरीके से एचटीटीपी अनुरोध कॉन्फ़िगर किए हों.

संक्रमण की जांच

ट्रेस टूल की मदद से गड़बड़ी का पता लगाने के लिए, नीचे दिया गया तरीका अपनाएं:

  1. जिस एपीआई प्रॉक्सी पर असर पड़ा है उसके लिए, Apigee यूज़र इंटरफ़ेस (यूआई) में ट्रेस चालू करें.
  2. एपीआई प्रॉक्सी को अनुरोध करें.
  3. उस एपीआई अनुरोध को चुनें जो 400 रिस्पॉन्स कोड के साथ पूरा नहीं हो पाया.
  4. अलग-अलग चरणों पर जाएं और देखें कि गड़बड़ी कहां हुई थी.
  5. आम तौर पर, आपको बैकएंड सर्वर से 400 की गड़बड़ी वाला रिस्पॉन्स मिलेगा. इसका मतलब है कि आपको 400 गड़बड़ी का रिस्पॉन्स, टारगेट सर्वर से मिला रिस्पॉन्स में दिखेगा, जैसा कि यहां दिखाया गया है:

  6. ट्रेस में मौजूद AX (Analytics डेटा रिकॉर्ड किया गया) आइकॉन पर क्लिक करके, वह टारगेट एंडपॉइंट तय करें जिसके लिए अनुरोध किया गया था.

  7. target.url पर ध्यान दें, जिसमें प्रोटोकॉल, बैकएंड सर्वर होस्ट का उपनाम, और कभी-कभी पोर्ट नंबर शामिल होता है. टारगेट यूआरएल के लिए इस्तेमाल किया गया पोर्ट 443 है, लेकिन प्रोटोकॉल एचटीटीपी है.
  8. कॉन्फ़िगरेशन को समझने के लिए, टारगेट एंडपॉइंट की परिभाषा देखें.
  9. पुष्टि करें कि बैकएंड सर्वर होस्ट सुरक्षित है और वह 443 जैसे सुरक्षित पोर्ट पर सुनता है. अगर <URL> एलिमेंट में http के तौर पर प्रोटोकॉल का इस्तेमाल किया जा रहा है, तो इस समस्या की वजह यही है.

    सैंपल टारगेट एंडपॉइंट कॉन्फ़िगरेशन:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <TargetEndpoint name="default">
        <Description/>
        <FaultRules/>
        <PreFlow name="PreFlow">
            <Request/>
            <Response/>
        </PreFlow>
        <PostFlow name="PostFlow">
            <Request/>
            <Response/>
        </PostFlow>
        <Flows/>
        <HTTPTargetConnection>
            <Properties/>
            <URL>http://somehost.org:443/get</URL>
        </HTTPTargetConnection>
    </TargetEndpoint>
    

    ऊपर दिए गए उदाहरण से पता चलता है कि आप एचटीटीपी प्रोटोकॉल का इस्तेमाल कर रहे हैं, लेकिन इस्तेमाल किया गया पोर्ट सुरक्षित पोर्ट 443 है. इसकी वजह से बैकएंड सर्वर, 400 Bad Request और गड़बड़ी के मैसेज The plain HTTP request was sent to HTTPS port के साथ जवाब देता है.

रिज़ॉल्यूशन

  1. अगर आपका बैकएंड सर्वर सुरक्षित/TLS की सुविधा वाला है, तो पक्का करें कि टारगेट एंडपॉइंट के <URL> एलिमेंट में https के तौर पर प्रोटोकॉल का इस्तेमाल किया जा रहा हो, जैसा कि इस उदाहरण में दिखाया गया है:

    सैंपल टारगेट एंडपॉइंट कॉन्फ़िगरेशन:

    <HTTPTargetConnection>
        <Properties/>
        <URL>https://somehost.org:443/get</URL>
    </HTTPTargetConnection>
    
  2. अगर आपका बैकएंड सर्वर सुरक्षित नहीं है, तो:

    • सुरक्षित पोर्ट नंबर का ज़िक्र न करें, जैसे कि 443.
    • अगर आपका बैकएंड सर्वर किसी ऐसे पोर्ट पर काम करता है जो सुरक्षित नहीं है, तो आपको पोर्ट नंबर का ज़िक्र करने की ज़रूरत नहीं है
    • अगर किसी ऐसे पोर्ट का इस्तेमाल किया जा रहा है जो सुरक्षित नहीं है, तो पोर्ट नंबर बताएं. उदाहरण के लिए: 9080

    सैंपल टारगेट एंडपॉइंट कॉन्फ़िगरेशन:

    <HTTPTargetConnection>
        <Properties/>
        <URL>http://somehost.org/get</URL>
    </HTTPTargetConnection>
    
    or
    
    <HTTPTargetConnection>
        <Properties/>
        <URL>http://somehost.org:9080/get</URL>
    </HTTPTargetConnection>
    

कारण: गलत टारगेट सर्वर कॉन्फ़िगरेशन

अगर टारगेट सर्वर को एसएसएल चालू किए बिना, 443 जैसे सुरक्षित पोर्ट के साथ कॉन्फ़िगर किया गया है, तो Apigee Edge का मैसेज प्रोसेसर, सुरक्षित या TLS से कॉन्फ़िगर किए गए टारगेट सर्वर पर एचटीटीपी अनुरोध भेजता है.

संक्रमण की जांच

ट्रेस टूल की मदद से गड़बड़ी का पता लगाने के लिए, नीचे दिया गया तरीका अपनाएं:

  1. जिस एपीआई प्रॉक्सी पर असर पड़ा है उसके लिए, Apigee यूज़र इंटरफ़ेस (यूआई) में ट्रेस चालू करें.
  2. एपीआई प्रॉक्सी को अनुरोध करें.
  3. उस एपीआई अनुरोध को चुनें जो 400 रिस्पॉन्स कोड के साथ पूरा नहीं हो पाया.
  4. अलग-अलग चरणों पर जाएं और देखें कि गड़बड़ी कहां हुई थी.
  5. आम तौर पर, आपको बैकएंड सर्वर से 400 गड़बड़ी का रिस्पॉन्स मिलता रहेगा. इसका मतलब है कि आपको 400 गड़बड़ी का रिस्पॉन्स, टारगेट सर्वर से मिला रिस्पॉन्स में दिखेगा, जैसा कि यहां दिखाया गया है:

  6. ट्रेस में मौजूद AX (Analytics डेटा रिकॉर्ड किया गया) आइकॉन पर क्लिक करके, वह टारगेट एंडपॉइंट तय करें जिसके लिए अनुरोध किया गया था.

  7. target.name पर ध्यान दें, जो टारगेट एंडपॉइंट का नाम दिखाता है.

    ऊपर दिए गए उदाहरण में, ट्रेस फ़ाइल के उदाहरण में target.name, डिफ़ॉल्ट पर सेट है. इससे पता चलता है कि इस अनुरोध के लिए इस्तेमाल किया गया टारगेट एंडपॉइंट डिफ़ॉल्ट है.

  8. कॉन्फ़िगरेशन को समझने के लिए, टारगेट एंडपॉइंट की परिभाषा देखें.

    सैंपल टारगेट एंडपॉइंट कॉन्फ़िगरेशन:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <TargetEndpoint name="default">
        <Description/>
        <FaultRules/>
        <PreFlow name="PreFlow">
            <Request/>
            <Response/>
        </PreFlow>
        <PostFlow name="PostFlow">
            <Request/>
            <Response/>
        </PostFlow>
        <Flows/>
        <HTTPTargetConnection>
            <Properties/>
            <LoadBalancer>
            <Server name="faulty-target"/>
            </LoadBalancer>
        </HTTPTargetConnection>
    </TargetEndpoint>
    

    टारगेट एंडपॉइंट के ऊपर दिए गए कॉन्फ़िगरेशन से पता चलता है कि faulty-target नाम के टारगेट सर्वर का इस्तेमाल किया जा रहा है.

  9. टारगेट सर्वर का नाम मिलने के बाद, टारगेट सर्वर के कॉन्फ़िगरेशन की जांच करने के लिए, इनमें से किसी एक तरीके का इस्तेमाल किया जा सकता है:

    • Edge यूज़र इंटरफ़ेस (यूआई)
    • मैनेजमेंट एपीआई

Edge यूज़र इंटरफ़ेस (यूआई)

  1. Apigee Edge > एडमिन > एनवायरमेंट > टारगेट सर्वर पर जाएं.
  2. एपीआई प्रॉक्सी से पहचाने गए खास टारगेट सर्वर को चुनें और बदलाव करें पर क्लिक करें.
  3. टारगेट सर्वर और एसएसएल जानकारी के लिए बताए गए पोर्ट की पुष्टि करें.
  4. अगर टारगेट सर्वर को किसी सुरक्षित पोर्ट (उदाहरण के लिए: 443) के साथ कॉन्फ़िगर किया गया है, लेकिन एसएसएल चालू नहीं है, तो इसी समस्या की वजह है.

    जैसा कि ऊपर दिए गए स्क्रीनशॉट में देखा जा सकता है, 443 का इस्तेमाल किया गया पोर्ट है, लेकिन टारगेट सर्वर कॉन्फ़िगरेशन में उस पोर्ट के लिए एसएसएल चालू नहीं है. ऐसा करने पर, Apigee Edge का मैसेज प्रोसेसर, सुरक्षित पोर्ट 443 पर एचटीटीपी अनुरोध भेजता है. इसलिए, आपको The plain HTTP request was sent to HTTPS port मैसेज के साथ गड़बड़ी 400 Bad Request मिलती है.

मैनेजमेंट एपीआई

  1. टारगेट सर्वर के किसी खास कॉन्फ़िगरेशन के बारे में जानकारी पाने के लिए, टारगेट सर्वर एपीआई का इस्तेमाल करें. इसका तरीका नीचे बताया गया है:

    सार्वजनिक क्लाउड उपयोगकर्ता:

    curl -v 'https://api.enterprise.apigee.com/v1/organizations/ORG_NAME/environments/ENV_NAME>/targetservers/TARGET_SERVER_NAME' \
    -H "Content-Type:application/xml" \
    -H "Authorization:Bearer $TOKEN"
    

    प्राइवेट क्लाउड उपयोगकर्ता:

    curl -v 'http://MANAGEMENT_IP:8080/v1/organizations/ORG_NAME/environments/ENV_NAME/targetservers/TARGET_SERVER_NAME' \
    -H "Content-Type:application/xml" \
    -H "Authorization:Bearer $TOKEN"
    
  2. टारगेट सर्वर और एसएसएल जानकारी के लिए बताए गए पोर्ट की पुष्टि करें.
  3. अगर टारगेट सर्वर को किसी सुरक्षित पोर्ट (उदाहरण के लिए: 443) के साथ कॉन्फ़िगर किया गया है, लेकिन SSLInfo सेक्शन के बारे में नहीं बताया गया है या उसे चालू नहीं किया गया है, तो इसी समस्या की वजह है.

    सैंपल टारगेट सर्वर कॉन्फ़िगरेशन:

    {
      "host" : "somehost.org",
      "isEnabled" : true,
      "name" : "faulty-target",
      "port" : 443
    }
    

    ऊपर दिए गए सैंपल आउटपुट में, हम देख सकते हैं कि टारगेट कनेक्शन के लिए इस्तेमाल किया गया पोर्ट 443 है, लेकिन SSLInfo कॉन्फ़िगरेशन ब्लॉक नहीं है.

    इस वजह से Apigee Edge का मैसेज प्रोसेसर, सुरक्षित पोर्ट 443 पर एचटीटीपी अनुरोध भेजता है. इसलिए, आपको The plain HTTP request was sent to HTTPS port मैसेज के साथ 400 Bad Request गड़बड़ी मिली है.

रिज़ॉल्यूशन

अगर आपका टारगेट सर्वर सुरक्षित है या TLS पर कॉन्फ़िगर किया गया है, तो आपको उस सर्वर के लिए एसएसएल चालू करना होगा.

ऐसा करने के लिए, इनमें से किसी एक विकल्प का इस्तेमाल किया जा सकता है:

  • Edge यूज़र इंटरफ़ेस (यूआई)
  • मैनेजमेंट एपीआई

Edge यूज़र इंटरफ़ेस (यूआई)

  1. Edge यूज़र इंटरफ़ेस (यूआई) > एडमिन > एनवायरमेंट > टारगेट सर्वर पर टारगेट सर्वर पर जाएं.
  2. कोई टारगेट सर्वर चुनें और बदलाव करें पर क्लिक करें.
  3. अगर आपका टारगेट सर्वर सुरक्षित है और 443 जैसे किसी पोर्ट का इस्तेमाल करता है, तो एसएसएल विकल्प के बगल में मौजूद चेक बॉक्स को चुनकर एसएसएल को चालू करें.
  4. Truststore, Ciphers, और Protocols को कॉन्फ़िगर करें. (सिर्फ़ ज़रूरत होने पर)

मैनेजमेंट एपीआई

टारगेट सर्वर को कॉन्फ़िगर करने के लिए, management API का इस्तेमाल करें. टारगेट सर्वर कॉन्फ़िगरेशन अपडेट करें दस्तावेज़ में इसके बारे में बताया गया है.

ऐप्लिकेशन की परफ़ॉर्मेंस से जुड़ी जानकारी इकट्ठा करनी होगी

अगर ऊपर दिए गए निर्देशों का पालन करने के बाद भी समस्या बनी रहती है, तो गड़बड़ी से जुड़ी यह जानकारी इकट्ठा करें. इसके बाद, Apigee Edge की सहायता टीम से संपर्क करें.

  1. अगर आप सार्वजनिक क्लाउड का इस्तेमाल करते हैं, तो यह जानकारी दें:
    • संगठन का नाम
    • परिवेश का नाम
    • एपीआई प्रॉक्सी का नाम
    • गड़बड़ी को फिर से सामने लाने के लिए कर्ल कमांड पूरा करें
    • ट्रेस टूल आउटपुट (अगर आप असफल अनुरोध के लिए कैप्चर कर पाए हैं)
  2. अगर आप प्राइवेट क्लाउड का इस्तेमाल करते हैं, तो यह जानकारी दें:
    • गड़बड़ी का पूरा मैसेज देखा गया
    • परिवेश का नाम
    • एपीआई प्रॉक्सी बंडल
    • टारगेट सर्वर की परिभाषा (अगर अपने एंडपॉइंट में टारगेट सर्वर का इस्तेमाल किया जा रहा है)
    • ट्रेस टूल आउटपुट (अगर आप असफल अनुरोध के लिए कैप्चर कर पाए हैं)