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

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

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

क्लाइंट ऐप्लिकेशन को 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 Public और Private Cloud के उपयोगकर्ता
TLS के लिए कॉन्फ़िगर किए गए टारगेट एंडपॉइंट को भेजा गया एचटीटीपी अनुरोध टारगेट एंडपॉइंट में, TLS की सुविधा वाले बैकएंड सर्वर को एचटीटीपी अनुरोध भेजा गया. Edge Public और Private Cloud के उपयोगकर्ता
टारगेट सर्वर का गलत कॉन्फ़िगरेशन टारगेट सर्वर को सुरक्षित पोर्ट 443 के साथ कॉन्फ़िगर किया गया है, लेकिन एसएसएल चालू नहीं है. Edge Public और Private Cloud के उपयोगकर्ता

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

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

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

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

  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 की सुविधा वाले बैकएंड सर्वर को भेजे जाने वाले एचटीटीपी अनुरोधों को गलत तरीके से कॉन्फ़िगर किया हो.

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

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

  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 के लिए कॉन्फ़िगर किए गए टारगेट सर्वर को एचटीटीपी अनुरोध भेजता है. इससे यह समस्या होती है.

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

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

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

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

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

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

  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 यूज़र इंटरफ़ेस (यूआई)
    • Management API

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

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

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

Management API

  1. किसी खास टारगेट सर्वर के कॉन्फ़िगरेशन के बारे में जानकारी पाने के लिए, Get target server API को एक्ज़ीक्यूट करें. जैसा कि यहां दिखाया गया है:

    Public Cloud का उपयोगकर्ता:

    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"
    

    Private 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 यूज़र इंटरफ़ेस (यूआई)
  • Management API

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

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

Management API

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

गड़बड़ी की जानकारी इकट्ठा करना ज़रूरी है

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

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