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

आपको Apigee Edge दस्तावेज़ दिख रहा है.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इस पेज पर जाएं Apigee X दस्तावेज़.
जानकारी

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

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

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

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

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 यूज़र इंटरफ़ेस (यूआई) में Trace को चालू करें.
  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 यूज़र इंटरफ़ेस (यूआई) में Trace को चालू करें.
  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 यूज़र इंटरफ़ेस (यूआई)
    • प्रबंधन API

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

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

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

प्रबंधन API

  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"
    

    निजी Cloud उपयोगकर्ता:

    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. इसलिए, आपको इस मैसेज में 400 Bad Request गड़बड़ी मिलती है The plain HTTP request was sent to HTTPS port.

रिज़ॉल्यूशन

अगर आपका टारगेट सर्वर सुरक्षित है या TLS से कॉन्फ़िगर की गई है, तो आपको टारगेट सर्वर.

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

  • Edge यूज़र इंटरफ़ेस (यूआई)
  • प्रबंधन API

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

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

प्रबंधन API

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

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

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

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