खराब अनुरोध - अमान्य होस्टनाम IIS7


86

जब मैं पोर्ट 8080 पर अपने वेब ऐप को हिट करने की कोशिश करता हूं तो मुझे निम्नलिखित त्रुटि मिलती है

खराब अनुरोध - अमान्य होस्टनाम
HTTP त्रुटि 400। अनुरोध होस्टनाम अमान्य है।

मैं यह भी नहीं जानता कि इस समस्या का निदान कहाँ से शुरू करूँ

जवाबों:


74

क्या आपने जाँच की कि क्या बंधन IIS है? (inetmgr.exe) 8080 पर सभी होस्टनामों को स्वीकार करने के लिए इसे पंजीकृत नहीं किया जा सकता है।

उदाहरण के लिए, यदि आप इसे mysite.com:8080 के लिए सेट करते हैं और इसे लोकलहोस्ट पर हिट करते हैं: 8080, तो IIS को अनुरोध मिलेगा लेकिन मैच करने के लिए एक होस्टनाम बाइंडिंग नहीं है इसलिए यह अस्वीकार करता है।

उसके बाहर, आपको सर्वर पर IIS लॉग (C: \ inetpub \ log \ wmsvc #) की जांच करनी चाहिए और देखें कि क्या आप अपना अनुरोध देख रहे हैं। तब आपको पता चलेगा कि क्या यह आपके क्लाइंट या सर्वर पर ही समस्या है।


2
मेरे मामले में, मुझे अपने C: \ Windows \ System32 \ ड्राइवरों \ etc \ Host में निम्न पंक्ति जोड़ना था: "127.0.0.1 लोकलहोस्ट"
क्रिस

4
आप IIS प्रबंधक में बाइंडिंग कहाँ कॉन्फ़िगर करते हैं?
स्टीव स्मिथ

30

FWIW, यदि आप किसी भी होस्टनाम / आईपी को निर्देशित अनुरोधों की अनुमति देना चाहते हैं तो आप अपना बंधन इस तरह सेट कर सकते हैं:

<binding protocol="http" bindingInformation="*:80:*" />

मैं इस बंधन का उपयोग करता हूं ताकि मैं IE6 के साथ एक वीएम लोड कर सकूं और फिर अपने आवेदन को डीबग कर सकूं।


संपादित करें: IIS एक्सप्रेस डीबग करने के लिए उपयोग करते समय, इस विकल्प की कॉन्फ़िग फ़ाइल के लिए डिफ़ॉल्ट स्थान है

C:\Users\{User}\Documents\IISExpress\config\applicationhost.config

1
आप हमारे मुफ्त वी.एस. एक्सटेंशन का उपयोग करके रिमोट के साथ काम करने के लिए आईआईएस एक्सप्रेस भी प्राप्त कर सकते हैं जिसे कन्वेयर कहा जाता है (इसमें कोई भी परिवर्तन नहीं होता है)। टूल्स-> एक्सटेंशन्स का उपयोग करें ... इसे पाने के लिए, या marketplace.visualstudio.com/… पर
जिम डब्ल्यू का कहना है कि मोनिका

25

Microsoft का यह पृष्ठ स्थानीय नेटवर्क पर अन्य कंप्यूटरों से IIS सर्वर एक्सप्रेस तक पहुंच स्थापित करने का तरीका बताता है।

संक्षेप में:

1) विशेषाधिकारों के साथ कमांड प्रॉम्प्ट से:

netsh http add urlacl url=http://[your ip address]:8181/ user=everyone

2) उन्नत सुरक्षा के साथ विंडोज फ़ायरवॉल में, पोर्ट 8181 के लिए बाहरी कनेक्शन की अनुमति देने के लिए एक नया इनबाउंड नियम बनाएं

3) Applicationhost.config में, अपने प्रोजेक्ट के लिए नोड में, जोड़ें:

<binding protocol="http" bindingInformation="*:8181:[your ip address]" />

न जोड़ें (जैसा कि दूसरे उत्तर में सुझाया गया है):

<binding protocol="http" bindingInformation="*:8181:*" />

उपरोक्त वाइल्डकार्ड बाइंडिंग ने मेरी पहुंच को तोड़ दिया http://192.168.1.6:8181/


4
इसके अलावा, आपको प्रशासक विशेषाधिकार के साथ विज़ुअल स्टूडियो चलाना होगा अन्यथा आप IIS एक्सप्रेस से नहीं जुड़ पाएंगे। जब प्रशासक के रूप में परीक्षण समाप्त हो जाता है, तो आपको applicationhost.config फ़ाइल से अतिरिक्त प्रविष्टि को हटाकर HTTP.sys प्रविष्टि का उपयोग करके हटाकर पिछले चरणों को उलटने की आवश्यकता होगी: netsh http delete urlacl url=http://[your ip address]:8181/
Steve

1
यदि आपका कंप्यूटर एक अलग भाषा में सेट है, तो "उपयोगकर्ता = हर कोई" कुछ और होना चाहिए। फ्रेंच में यह उपयोगकर्ता = "टाउट ले मोंडे" है। इस उत्तर को देखें: stackoverflow.com/a/18856394/1317559
Yster

24

इसलिए, मैंने इसे IIS प्रबंधक में अपनी वेबसाइट पर जाकर और स्थानीय नाम से साइट बाइंडिंग में होस्ट नाम को बदलकर * हल कर दिया है। तुरंत काम शुरू कर दिया।

IIS में साइट बाइंडिंग


उत्तम! AWS उदाहरण के लिए काम एक लारवेल साइट चलाने के लिए किया जाता है
विष्णु राठ

यह asp.net कोर के साथ मेरे मुद्दे को तय करता है, जहां यह स्थानीयहोस्ट पर काम करता है, लेकिन रिमोट आईपी नहीं, धन्यवाद!
फिलिप

इसने मेरे मामले में काम किया। हालाँकि मैंने 100+ साइट्स को होस्ट किया था। पहली बार गलती की और फ़ायरवॉल नियमों या किसी अन्य समाधान में खोजने में सक्षम नहीं था।
केतन कोटक

9

के लिए Visual Studio 2017और Visual Studio 2015, IIS Expressसेटिंग्स छिपा में संग्रहित है .vsनिर्देशिका और पथ कुछ इस तरह है .vs\config\applicationhost.config, इच्छा काम नीचे की तरह बंधन जोड़ने

<bindings>
    <binding protocol="http" bindingInformation="*:8802:localhost" />
    <binding protocol="http" bindingInformation="*:8802:127.0.0.1" />
</bindings>

सिंटैक्स: https://docs.microsoft.com/en-us/dotnet/api/microsoft.web.administration.binding.bindinginformation?view=iis-dotnet


2
इस पद्धति का उपयोग करने वाले किसी के लिए, यह ध्यान रखना महत्वपूर्ण नहीं है कि सही बाइंडिंग सूचना टेम्पलेट है: आईपी पता: पोर्ट: होस्ट हेडर। इसलिए सही कार्यान्वयन है: <bindings> <binding protocol="http" bindingInformation="localhost:8802:*" /> <binding protocol="http" bindingInformation="127.0.0.1:8802:*"/> </bindings>
लियोनेल अफ़्गबेडजी

1
.Vs फ़ोल्डर आपके प्रोजेक्ट रूट फ़ोल्डर में फ़ोल्डर है। उस Applicationhost.config में टैग <साइट का नाम = "[YourService / ProjectName]> देखें और वहां <bindings> टैग खोजें।
NexX

4

IPv6 पते के लिए बाध्य करने के लिए मत भूलना! मैं लोकलहोस्ट का उपयोग करके 127.0.0.1 पर एक साइट जोड़ने की कोशिश कर रहा था और खराब अनुरोध / अमान्य होस्टनाम त्रुटि मिली। जब मैंने लोकलहोस्ट को पिंग किया तो उसने :: 1 को हल कर दिया क्योंकि IPv6 को सक्षम किया गया था, इसलिए मुझे केवल समस्या को ठीक करने के लिए अतिरिक्त बंधन जोड़ना था।

IIS साइट बाइंडिंग


4

इससे मेरी समस्या हल हो गई (मेरी खराब अंग्रेजी के लिए खेद है):

  1. व्यवस्थापक और रन कमांड (वर्ग कोष्ठक के बिना) के रूप में खुला cmd:
    netsh http add urlacl url=http://[ip adress]:[port]/ user=everyone

  2. में documents/iisexpress/config/applicationhost.configऔर (छुपा) फ़ोल्डर में अपने रूट प्रोजेक्ट फ़ोल्डर में: .vs/config/applicationhost.configआप "साइट" टैग करने के लिए पंक्ति जोड़ने की जरूरत:
    <binding protocol="http" bindingInformation="*:8080:192.xxx.xxx.xxx" />

  3. "इंटरनेट सूचना सेवा (आईआईएस) प्रबंधक" खोलें (
    इसे खोजने के लिए: टास्कबार में खोज में "विंडो सुविधाएँ चालू या बंद करें" लिखें और परिणाम खोलें और फिर चेकबॉक्स "इंटरनेट सूचना सेवा" की जाँच करें और इसे स्थापित करें):

    1. बाएं स्क्रीन पर क्लिक करें: कंप्यूटर का नाम -> साइटें -> डिफ़ॉल्ट वेब साइट और
    2. फिर राइट स्क्रीन "बाइंडिंग" में क्लिक करें
    3. Add बटन पर क्लिक करें
    4. आपको जो चाहिए वह लिखें और "ओके" दबाएं।
  4. "उन्नत सुरक्षा के साथ विंडोज फ़ायरवॉल" खोलें,

    1. बाएं स्क्रीन प्रेस में "इनबाउंड नियम" और फिर
    2. दाएं स्क्रीन में दबाएं "नया नियम ..."
    3. चेक पोर्ट और अगला दबाएं,
    4. टीसीपी और अपने पोर्ट की जांच करें और अगला दबाएं,
    5. "कनेक्शन की अनुमति दें" जांचें और अगला दबाएं,
    6. सभी चेकबॉक्स की जांच करें और अगला दबाएं,
    7. नाम लिखें और समाप्त करें दबाएं।
  5. किया हुआ।


3

मुझे यकीन नहीं है कि अगर यह आपकी समस्या थी, लेकिन किसी के लिए भी जो अपने मशीन से अपने वेब एप्लिकेशन को एक्सेस करने की कोशिश कर रहा है और यह समस्या है:

सुनिश्चित करें कि आप 127.0.0.1(aka localhost) से जुड़ रहे हैं और अपने बाहरी आईपी पते से नहीं।

आपका URL कुछ इस तरह होना चाहिए http://localhost:8181/या http://127.0.0.1:8181और नहीं http://YourExternalIPaddress:8181/


अतिरिक्त जानकारी:
इसका कारण यह है कि आपका फ़ायरवॉल आपके अनुरोध को अवरुद्ध कर सकता है। यह आपके ओएस पर एक फ़ायरवॉल हो सकता है और यह (सामान्य) आपका राउटर हो सकता है।

जब आप अपने बाहरी आईपी पते से जुड़ते हैं, तो आप इंटरनेट से कनेक्ट होते हैं, जैसे कि आप एक अजनबी (या हैकर) थे।
हालाँकि, जब आप अपने लोकलहोस्ट से कनेक्ट होते हैं, तो आप स्थानीय रूप से खुद से कनेक्ट होते हैं और ब्लॉक की स्पष्ट रूप से आवश्यकता नहीं होती (और पूरी तरह से बचा जाता है)।


मेरे पास यह मुद्दा है कि लोकलहोस्ट काम करते समय कहाँ है लेकिन मशीनों का उपयोग करते समय स्थानीय आईपी पता (नहीं करता है)। आपने विशेष रूप से अपने वाइपड्रेस का उपयोग न करने के लिए क्यों कहा - यह काम क्यों नहीं करता - मैं समझना चाहूंगा?
कोड अनपेक्षित रूप से

1
वेबसाइट से कनेक्ट करने के लिए उपयोग किए जाने वाले होस्टनाम को बदलने के लिए "हैकर" के लिए यह बेतुका तुच्छ है।
अराफंगियन

@ प्रारूप इसे परिवर्तित करें और कहाँ प्राप्त करें?
MasterMastic

@MasterMastic: जैसे, linux पर, /etc/hosts.conf फ़ाइल संपादित करें। विंडोज के बराबर है। या इससे भी अधिक तुच्छ, बस कर्ल या wget बताओ जो hostname रिपोर्ट करने के लिए। यहाँ, आप जाहिरा तौर पर "होस्टनाम" पर भरोसा कर रहे हैं इंटरनेट से अनुरोधों को अवरुद्ध करने के लिए, इसलिए हैकर को स्पष्ट रूप से जो कुछ भी हासिल करना है, वह आपके स्पष्ट "संरक्षण" तंत्र को दरकिनार करके हासिल करना है। IIS अभी भी पोर्ट से बंधा हुआ है। पहली जगह में बाहरी सुगम बंदरगाह के लिए सही निर्धारण नहीं है।
अराफांजियन

@Arafangion हाँ, लेकिन यह एक स्थानीय पुनर्निर्देशन है। यहाँ मुद्दा यह नहीं है localhost, यह वह है जो ( 127.0.0.1) का जिक्र कर रहा है । मैं जो कुछ कह रहा हूं, वह उससे जुड़ा है न कि आपके बाहरी रूप से दिखाई देने वाले आईपी से। लोकलहोस्ट पर कोई निर्भरता नहीं है, यह सिर्फ एक पर्याय के रूप में उपयोग किया जाता है। मैं इसे स्पष्ट करने के लिए अपने उत्तर को संपादित करूँगा।
MasterMastic

2

आप Visual Studio 2005/2008/2010 CMD टूल का उपयोग कर सकते हैं। इसे व्यवस्थापक के रूप में चलाएं, और लिखें

aspnet_regiis -i

अंत में मैं अपना ऐप सफलतापूर्वक चला सकता हूं।


2

यदि स्थानीय सर्वर पर काम कर रहे हैं या आपको डोमेन नाम नहीं मिला है, तो "होस्ट नाम:" फ़ील्ड हटाएं। यहाँ छवि विवरण दर्ज करें


1

अपनी स्थानीय होस्ट फ़ाइल की जाँच करें (C: \ Windows \ System32 \ driver \ etc \ मेजबान उदाहरण के लिए)। मेरे मामले में मैंने पहले एक देव बॉक्स में एक URL को इंगित करने के लिए इसका इस्तेमाल किया था और फिर इसके बारे में भूल गया। जब मैंने उसी URL का पुन: उपयोग किया तो मुझे बैड रिक्वेस्ट (अमान्य होस्टनाम) मिलती रही क्योंकि ट्रैफ़िक गलत सर्वर पर जा रहा था।


1

मुझे यह त्रुटि तब मिली, जब मैंने "लोकलहोस्ट" का उपयोग करके एक वेबबेस को कॉल करने का प्रयास किया। मैंने इसके बजाय वास्तविक IP का उपयोग करके इसे ठीक किया (192.168 ...)


विजेता। यह विंडोज़ सर्वर 2003 पर मेरी समस्या थी।
ड्रीमटेक

0

मैंने एक नए सर्वर पर एप्लिकेशन को कॉपी करने के लिए msdeploy का उपयोग करने के बाद एक ही त्रुटि देखी। यह पता चला कि बाइंडिंग अभी भी पिछले सर्वर से आईपी पते का उपयोग कर रहे थे। तो, IIS बाइंडिंग में आईपी पते को दोबारा जांचें। (तथ्य के बाद स्पष्ट लगता है, लेकिन तुरंत मुझे इसकी जांच करने के लिए नहीं हुआ)।


0

आपके द्वारा प्रदान किए जा रहे सटीक URL की दोबारा जाँच करें। मुझे यह त्रुटि तब दिखाई दी जब मैं ASP.NET में परिभाषित मार्ग उपसर्ग से चूक गया, इसलिए यह नहीं पता था कि अनुरोध को कहां रूट किया जाए।


0

सुनिश्चित करें कि IIS आपके पोर्ट को सुन रहा है।

मेरे मामले में यह मुद्दा था। इसलिए मुझे अपने पोर्ट को 8083 की तरह कुछ और में बदलना पड़ा और इसने इस मुद्दे को हल कर दिया।

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