คำขอไม่ถูกต้อง - ชื่อโฮสต์ IIS7 ไม่ถูกต้อง


87

เมื่อฉันพยายามกดเว็บแอปบนพอร์ต 8080 ฉันได้รับข้อผิดพลาดต่อไปนี้

คำขอไม่ถูกต้อง -
ข้อผิดพลาด HTTP ชื่อโฮสต์400 ไม่ถูกต้องชื่อโฮสต์ของคำขอไม่ถูกต้อง

ฉันไม่รู้ด้วยซ้ำว่าจะเริ่มวินิจฉัยปัญหานี้ได้ที่ไหน

คำตอบ:


75

คุณตรวจสอบการผูกเป็น IIS หรือไม่? (inetmgr.exe) อาจไม่ได้รับการลงทะเบียนเพื่อยอมรับชื่อโฮสต์ทั้งหมดใน 8080

ตัวอย่างเช่นหากคุณตั้งค่าสำหรับ mysite.com:8080 และกดที่ localhost: 8080 IIS จะได้รับคำขอ แต่ไม่มีการผูกชื่อโฮสต์ให้ตรงกันดังนั้นจึงปฏิเสธ

นอกจากนั้นคุณควรตรวจสอบบันทึก IIS (C: \ inetpub \ logs \ wmsvc #) บนเซิร์ฟเวอร์และดูว่าคุณเห็นคำขอของคุณหรือไม่ จากนั้นคุณจะทราบว่าปัญหาเกิดขึ้นกับไคลเอนต์ของคุณหรือบนเซิร์ฟเวอร์เอง


2
ในกรณีของฉันฉันต้องเพิ่มบรรทัดต่อไปนี้ใน C: \ Windows \ System32 \ drivers \ etc \ hosts: "127.0.0.1 localhost"
chris

4
คุณกำหนดค่าการผูกในตัวจัดการ IIS ที่ไหน
Steve Smith

30

FWIW หากคุณต้องการเพียงแค่อนุญาตคำขอที่ส่งไปยังชื่อโฮสต์ / ip ใด ๆ คุณสามารถตั้งค่าการผูกของคุณได้ดังนี้:

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

ฉันใช้การผูกนี้เพื่อให้ฉันสามารถโหลด VM ด้วย IE6 จากนั้นดีบักแอปพลิเคชันของฉัน


แก้ไข: ในขณะที่ใช้ IIS Express เพื่อดีบักตำแหน่งเริ่มต้นสำหรับไฟล์กำหนดค่าของตัวเลือกนี้คือ

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

2
คุณยังสามารถรับ IIS Express เพื่อทำงานกับรีโมตรีเควตโดยใช้ VS ส่วนขยายฟรีของเราที่เรียกว่า Conveyor (ไม่เกี่ยวข้องกับการเปลี่ยนแปลงการกำหนดค่า) ใช้ Tools-> Extensions ... เพื่อรับหรือที่marketplace.visualstudio.com/…
Jim W กล่าวว่าคืนสถานะ Monica ใน

26

หน้านี้โดย Microsoft อธิบายวิธีตั้งค่าการเข้าถึง IIS Server Express จากคอมพิวเตอร์เครื่องอื่นบนเครือข่ายท้องถิ่น

โดยสังเขป:

1) จากพรอมต์คำสั่งพร้อมสิทธิ์ผู้ดูแลระบบ:

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

2) ใน Windows Firewall ที่มี Advanced Security ให้สร้างกฎขาเข้าใหม่สำหรับพอร์ต 8181 เพื่ออนุญาตการเชื่อมต่อภายนอก

3) ใน applicationhost.config ในโหนดสำหรับโครงการของคุณให้เพิ่ม:

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

อย่าเพิ่ม (ตามที่แนะนำในคำตอบอื่น):

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

การผูกสัญลักษณ์แทนข้างต้นทำให้ฉันไม่สามารถเข้าถึงได้จาก http://192.168.1.6:8181/


4
นอกจากนี้คุณต้องเรียกใช้ Visual Studio ด้วยสิทธิ์ของผู้ดูแลระบบมิฉะนั้นคุณจะไม่สามารถผูกกับ IIS Express ได้ เมื่อเสร็จสิ้นการทดสอบในฐานะผู้ดูแลระบบคุณจะต้องย้อนกลับขั้นตอนก่อนหน้าโดยลบรายการพิเศษออกจากไฟล์ applicationhost.config และลบรายการ HTTP.sys โดยใช้: netsh http delete urlacl url=http://[your ip address]:8181/
SteveC

1
หากคอมพิวเตอร์ของคุณตั้งค่าเป็นภาษาอื่น "ผู้ใช้ = ทุกคน" ควรเป็นภาษาอื่น ในภาษาฝรั่งเศสคือผู้ใช้ = "Tout le monde" ดูคำตอบนี้: stackoverflow.com/a/18856394/1317559
Yster

24

ดังนั้นฉันจึงแก้ไขสิ่งนี้โดยไปที่เว็บไซต์ของฉันใน IIS Manager และเปลี่ยนชื่อโฮสต์ในการผูกไซต์จาก localhost เป็น * เริ่มทำงานทันที

การเชื่อมโยงไซต์ใน IIS


สมบูรณ์แบบ! ทำงานสำหรับอินสแตนซ์ AWS ที่ใช้ในการเรียกใช้ไซต์ Laravel
Vishnoo Rath

สิ่งนี้แก้ไขปัญหาของฉันกับแกน asp.net ที่ทำงานบน localhost แต่ไม่ใช่ ip ระยะไกลขอบคุณ!
Philip

มันใช้ได้ในกรณีของฉัน แม้ว่าฉันจะโฮสต์ไซต์มากกว่า 100 แห่ง ครั้งแรกผิดพลาดและไม่พบในกฎไฟร์วอลล์หรือวิธีแก้ไขปัญหาอื่น ๆ
Ketan Kotak

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
สำหรับใครก็ตามที่ใช้วิธีนี้ฉันไม่สำคัญที่จะต้องทราบว่าแม่แบบข้อมูลการผูกที่ถูกต้องคือ: ที่อยู่ ip: พอร์ต: ส่วนหัวของโฮสต์ ดังนั้นการใช้งานที่ถูกต้องคือ: <bindings> <binding protocol="http" bindingInformation="localhost:8802:*" /> <binding protocol="http" bindingInformation="127.0.0.1:8802:*"/> </bindings>
Lionnel Afangbedjee

1
โฟลเดอร์. vs คือโฟลเดอร์ในโฟลเดอร์รูทโปรเจ็กต์ของคุณ ใน applicationhost.config นั้นให้มองหาแท็ก <site name = "[YourService / ProjectName]> และหาแท็ก <bindings> ที่นั่น
NexX

4

อย่าลืมผูกกับที่อยู่ IPv6 ด้วย! ฉันพยายามเพิ่มไซต์บน 127.0.0.1 โดยใช้ localhost และได้รับคำขอที่ไม่ถูกต้อง / ข้อผิดพลาดชื่อโฮสต์ไม่ถูกต้อง เมื่อฉัน pinged localhost มันแก้ไขเป็น :: 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. เปิด "internet information services (iis) manager"
    (เพื่อค้นหา: ในการค้นหาในทาสก์บาร์ให้เขียน "Turn Window features on or off" และเปิดผลลัพธ์จากนั้นเลือกช่องทำเครื่องหมาย "internet information service" และติดตั้ง):

    1. ในหน้าจอซ้ายคลิก: ชื่อคอมพิวเตอร์ -> ไซต์ -> เว็บไซต์เริ่มต้นและ
    2. จากนั้นคลิกในหน้าจอด้านขวา "Binding"
    3. คลิกปุ่มเพิ่ม
    4. เขียนสิ่งที่คุณต้องการแล้วกด "ตกลง"
  4. เปิด "Windows Firewall With Advanced Security"

    1. ในหน้าจอด้านซ้ายกด "กฎขาเข้า" จากนั้น
    2. กดในหน้าจอด้านขวา "กฎใหม่ ... "
    3. ตรวจสอบพอร์ตและกด Next
    4. ตรวจสอบ TCP และพอร์ตของคุณแล้วกด Next
    5. เลือก "อนุญาตการเชื่อมต่อ" แล้วกดถัดไป
    6. เลือกช่องทำเครื่องหมายทั้งหมดแล้วกด Next
    7. เขียนชื่อและกด Finish
  5. เสร็จแล้ว


3

ฉันไม่แน่ใจว่านี่เป็นปัญหาของคุณหรือไม่ แต่สำหรับใครก็ตามที่พยายามเข้าถึงเว็บแอปพลิเคชันจากเครื่องของเขาและประสบปัญหานี้:

ตรวจสอบให้แน่ใจว่าคุณกำลังเชื่อมต่อกับ127.0.0.1(akalocalhost ) ไม่ใช่กับที่อยู่ IP ภายนอกของคุณ

URL ของคุณควรจะเป็นสิ่งที่ชอบhttp://localhost:8181/หรือhttp://127.0.0.1:8181และไม่ได้ http://YourExternalIPaddress:8181/


ข้อมูลเพิ่มเติม:
สาเหตุที่ใช้งานได้เนื่องจากไฟร์วอลล์ของคุณอาจบล็อกคำขอของคุณเอง อาจเป็นไฟร์วอลล์บนระบบปฏิบัติการของคุณและอาจเป็นเราเตอร์ของคุณ (ปกติ)

เมื่อคุณเชื่อมต่อกับที่อยู่ IP ภายนอกคุณจะเชื่อมต่อกับคุณจากอินเทอร์เน็ตราวกับว่าคุณเป็นคนแปลกหน้า (หรือแฮ็กเกอร์)
อย่างไรก็ตามเมื่อคุณเชื่อมต่อกับโฮสต์ในพื้นที่ของคุณคุณจะเชื่อมต่อภายในเป็นตัวคุณเองและเห็นได้ชัดว่าบล็อกนั้นไม่จำเป็นต้องใช้ (& หลีกเลี่ยงโดยสิ้นเชิง)


ฉันมีปัญหานี้เมื่อใช้ localhost แต่เมื่อใช้ที่อยู่ IP ในเครื่องของเครื่อง (ไม่มี) ทำไมคุณถึงบอกว่าไม่ใช้ที่อยู่IP ของคุณโดยเฉพาะ- ทำไมถึงใช้ไม่ได้ - ฉันอยากเข้าใจ
รหัสเฉพาะ

1
การที่ "แฮ็กเกอร์" เปลี่ยนชื่อโฮสต์ที่ใช้เชื่อมต่อกับเว็บไซต์นั้นเป็นเรื่องที่ไม่สมเหตุสมผล
Arafangion

@Arafangion เปลี่ยนที่ไหนและได้อะไร?
MasterMastic

@MasterMastic: เช่นบน linux แก้ไขไฟล์ /etc/hosts.conf Windows มีคุณสมบัติเทียบเท่า หรือยิ่งไปกว่านั้นเพียงแค่บอก curl หรือ wget ว่าจะรายงานชื่อโฮสต์ใด ที่นี่ดูเหมือนว่าคุณจะใช้ "ชื่อโฮสต์" ในการบล็อกคำขอจากอินเทอร์เน็ตดังนั้นสิ่งที่แฮกเกอร์ได้รับก็คือสิ่งที่พวกเขาต้องการอย่างชัดเจนโดยข้ามกลไก "การป้องกัน" ที่เห็นได้ชัดของคุณ IIS ยังคงผูกกับพอร์ต การแก้ไขที่ถูกต้องไม่ใช่การผูกกับพอร์ตที่เข้าถึงได้ภายนอกตั้งแต่แรก
Arafangion

@Arafangion ใช่ แต่นั่นเป็นการเปลี่ยนเส้นทางในท้องถิ่น ประเด็นที่นี่ไม่ใช่localhostสิ่งที่หมายถึง ( 127.0.0.1) ทั้งหมดที่ฉันพูดคือเชื่อมต่อกับสิ่งนั้นไม่ใช่กับ IP ที่มองเห็นภายนอกของคุณ ไม่มีการพึ่งพา localhost แต่ใช้เป็นคำพ้องความหมาย ฉันจะแก้ไขคำตอบเพื่อให้ชัดเจนขึ้น
MasterMastic

2

คุณสามารถใช้เครื่องมือ Visual Studio 2005/2008/2010 CMD เรียกใช้ในฐานะผู้ดูแลระบบและเขียน

aspnet_regiis -i

ในที่สุดฉันก็สามารถเรียกใช้แอปได้สำเร็จ


2

หากทำงานบนเซิร์ฟเวอร์ภายในหรือคุณไม่มีชื่อโดเมนให้ลบช่อง "Host Name:" ป้อนคำอธิบายภาพที่นี่


1

ตรวจสอบไฟล์โฮสต์ในเครื่องของคุณ (เช่น C: \ Windows \ System32 \ drivers \ etc \ hosts เป็นต้น) ในกรณีของฉันก่อนหน้านี้ฉันเคยใช้สิ่งนี้เพื่อชี้ URL ไปยังกล่อง dev และลืมไปแล้ว เมื่อฉันใช้ URL เดิมซ้ำฉันได้รับคำขอที่ไม่ถูกต้อง (ชื่อโฮสต์ไม่ถูกต้อง) เนื่องจากการรับส่งข้อมูลไปยังเซิร์ฟเวอร์ที่ไม่ถูกต้อง


1

ฉันได้รับข้อผิดพลาดนี้เมื่อพยายามเรียกใช้บริการเว็บโดยใช้ "localhost" ฉันแก้ไขโดยใช้ IP จริงแทน (192.168 ... )


ผู้ชนะ นี่เป็นปัญหาของฉันบน windows server 2003
DreamTeK

0

ฉันเห็นข้อผิดพลาดเดียวกันนี้หลังจากใช้ msdeploy เพื่อคัดลอกแอปพลิเคชันไปยังเซิร์ฟเวอร์ใหม่ ปรากฎว่าการผูกยังคงใช้ที่อยู่ IP จากเซิร์ฟเวอร์ก่อนหน้านี้ ดังนั้นตรวจสอบที่อยู่ IP อีกครั้งในการผูก IIS (ดูเหมือนจะชัดเจนหลังจากความจริง แต่ไม่ได้เกิดขึ้นให้ฉันตรวจสอบในทันที)


0

ตรวจสอบ URL ที่แน่นอนที่คุณระบุอีกครั้ง ฉันเห็นข้อผิดพลาดนี้เมื่อฉันพลาดคำนำหน้าเส้นทางที่กำหนดใน ASP.NET ดังนั้นจึงไม่ทราบว่าจะกำหนดเส้นทางคำขอ


0

ตรวจสอบให้แน่ใจว่า IIS กำลังฟังพอร์ตของคุณ

ในกรณีของฉันนี่คือปัญหา ดังนั้นฉันต้องเปลี่ยนพอร์ตของฉันเป็นอย่างอื่นเช่น 8083 และมันก็แก้ไขปัญหานี้ได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.