Permintaan Buruk - Hostname IIS7 tidak valid


87

Ketika saya mencoba membuka aplikasi web saya di port 8080, saya mendapatkan kesalahan berikut

Permintaan Buruk - Hostname
HTTP Error 400. Nama host permintaan tidak valid.

Saya bahkan tidak tahu harus mulai dari mana untuk mendiagnosis masalah ini

Jawaban:


75

Apakah Anda memeriksa pengikatannya adalah IIS? (inetmgr.exe) Mungkin tidak terdaftar untuk menerima semua nama host di 8080.

Misalnya, jika Anda mengaturnya untuk mysite.com:8080 dan menekannya di localhost: 8080, IIS akan mendapatkan permintaan tersebut tetapi tidak memiliki nama host yang mengikat untuk dicocokkan sehingga ditolak.

Di luar itu, Anda harus memeriksa log IIS (C: \ inetpub \ logs \ wmsvc #) di server dan melihat apakah Anda melihat permintaan Anda. Kemudian Anda akan tahu apakah itu masalah pada klien Anda atau pada server itu sendiri.


2
Dalam kasus saya, saya harus menambahkan baris berikut di C: \ Windows \ System32 \ drivers \ etc \ hosts: "127.0.0.1 localhost"
chris

4
Di mana Anda mengkonfigurasi pengikatan di IIS Manager?
Steve Smith

30

FWIW, jika Anda hanya ingin mengizinkan permintaan diarahkan ke nama host / ip apa pun, Anda dapat mengatur pengikatan seperti ini:

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

Saya menggunakan pengikatan ini sehingga saya dapat memuat VM dengan IE6 dan kemudian men-debug aplikasi saya.


EDIT: Saat menggunakan IIS Express untuk men-debug, lokasi default untuk file konfigurasi opsi ini adalah

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

2
Anda juga bisa mendapatkan IIS Express untuk bekerja dengan requet jarak jauh menggunakan VS Extension gratis kami yang disebut Conveyor (tidak melibatkan perubahan konfigurasi). Gunakan Alat-> Ekstensi ... untuk mendapatkannya, atau di marketplace.visualstudio.com/…
Jim W mengatakan kembalikan Monica

26

Halaman ini oleh Microsoft menjelaskan cara mengatur akses ke IIS Server Express dari komputer lain di jaringan lokal.

Pendeknya:

1) dari prompt perintah dengan hak istimewa admin:

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

2) Di Windows Firewall dengan Keamanan Lanjutan, buat aturan masuk baru untuk port 8181 untuk mengizinkan koneksi eksternal

3) Di applicationhost.config, di node untuk proyek Anda, tambahkan:

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

JANGAN menambahkan (seperti yang disarankan dalam jawaban lain):

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

Pengikatan wildcard di atas memutuskan akses saya http://192.168.1.6:8181/


4
Selain itu, Anda harus menjalankan Visual Studio dengan Administrator Privilege jika tidak, Anda tidak akan dapat mengikat ke IIS Express. Setelah selesai menguji sebagai Administrator, Anda perlu membalik langkah sebelumnya dengan menghapus entri tambahan dari file applicationhost.config dan menghapus entri HTTP.sys menggunakan: netsh http delete urlacl url=http://[your ip address]:8181/
SteveC

1
Jika komputer Anda disetel ke bahasa yang berbeda, maka "user = everyone" harusnya bahasa lain. Dalam bahasa Prancis, ini adalah pengguna = "Tout le monde". Lihat jawaban ini: stackoverflow.com/a/18856394/1317559
Yster

24

Jadi, saya menyelesaikan ini dengan membuka situs web saya di IIS Manager dan mengubah nama host di pengikatan situs dari localhost menjadi *. Mulai bekerja segera.

Binding Situs di IIS


sempurna! Bekerja untuk instans AWS yang digunakan untuk menjalankan situs Laravel
Vishnoo Rath

Ini memperbaiki masalah saya dengan inti asp.net yang berfungsi di localhost tetapi bukan ip jarak jauh, terima kasih!
Philip

Ini berhasil dalam kasus saya. Padahal saya telah meng-host 100+ situs. keliru pertama kali dan tidak dapat ditemukan di aturan firewall atau solusi lainnya.
Ketan Kotak

9

Untuk Visual Studio 2017dan Visual Studio 2015, IIS Expresspengaturan disimpan di .vsdirektori tersembunyi dan jalurnya seperti ini .vs\config\applicationhost.config, tambahkan pengikatan seperti di bawah ini akan berfungsi

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

Sintaks: https://docs.microsoft.com/en-us/dotnet/api/microsoft.web.administration.binding.bindinginformation?view=iis-dotnet


2
Bagi siapa pun yang menggunakan metode ini, saya tidak perlu mencatat bahwa template Informasi binding yang benar adalah: alamat ip: port: header host. Jadi implementasi yang benar adalah: <bindings> <binding protocol="http" bindingInformation="localhost:8802:*" /> <binding protocol="http" bindingInformation="127.0.0.1:8802:*"/> </bindings>
Lionnel Afangbedjee

1
Folder .vs adalah folder di folder root proyek Anda. Di applicationhost.config itu, cari tag <site name = "[YourService / ProjectName]> dan temukan tag <bindings> di sana.
NexX

4

Jangan lupa untuk mengikat ke alamat IPv6 juga! Saya mencoba menambahkan situs di 127.0.0.1 menggunakan localhost dan mendapat permintaan buruk / kesalahan nama host tidak valid. Ketika saya melakukan ping ke localhost, itu diselesaikan ke :: 1 karena IPv6 diaktifkan jadi saya hanya perlu menambahkan pengikatan tambahan untuk memperbaiki masalah.

Pengikatan Situs IIS


4

Ini memecahkan masalah saya (maaf untuk bahasa Inggris saya yang buruk):

  1. buka cmd sebagai administrator dan jalankan perintah (Tanpa tanda kurung siku):
    netsh http add urlacl url=http://[ip adress]:[port]/ user=everyone

  2. di dalam documents/iisexpress/config/applicationhost.configdan di folder proyek root Anda di folder (tersembunyi): .vs/config/applicationhost.configAnda perlu menambahkan baris ke tag "situs":
    <binding protocol="http" bindingInformation="*:8080:192.xxx.xxx.xxx" />

  3. buka "internet information services (iis) manager"
    (untuk menemukannya: dalam pencarian di taskbar tulis "Turn Window features on or off" dan buka hasilnya lalu centang kotak "internet information service" dan instal itu):

    1. di layar kiri klik: nama-komputer -> Situs -> Situs Web Default dan
    2. lalu klik di layar kanan "Binding"
    3. klik tombol Add
    4. tulis apa yang Anda butuhkan dan tekan "OK".
  4. buka "Windows Firewall With Advanced Security",

    1. di layar kiri tekan "Inbound Rules" dan kemudian
    2. tekan di layar kanan "Aturan Baru ..."
    3. periksa port dan tekan Next,
    4. periksa TCP dan port Anda dan tekan Berikutnya,
    5. centang "Izinkan koneksi" dan tekan Berikutnya,
    6. centang semua kotak centang dan tekan Berikutnya,
    7. tulis nama dan tekan Selesai.
  5. selesai.


3

Saya tidak yakin apakah ini masalah Anda, tetapi untuk siapa saja yang mencoba mengakses aplikasi webnya dari komputernya dan mengalami masalah ini:

Pastikan Anda terhubung ke 127.0.0.1(alias localhost) dan bukan ke alamat IP eksternal Anda.

URL Anda harus seperti http://localhost:8181/atau http://127.0.0.1:8181dan tidak http://YourExternalIPaddress:8181/ .


Informasi tambahan:
Alasan ini berhasil adalah karena firewall Anda mungkin memblokir permintaan Anda sendiri. Ini bisa berupa firewall di OS Anda dan bisa menjadi (biasa) router Anda.

Saat Anda terhubung ke alamat IP eksternal, Anda terhubung dari internet, seolah-olah Anda adalah orang asing (atau peretas).
Namun ketika Anda terhubung ke localhost Anda, Anda terhubung secara lokal sebagai diri Anda sendiri dan blok tersebut jelas tidak diperlukan (& dihindari sama sekali).


Saya memiliki masalah ini di mana ketika menggunakan localhost berfungsi tetapi ketika menggunakan mesin Alamat IP lokal (tidak). Mengapa Anda secara khusus mengatakan untuk tidak menggunakan alamat IPAnda - mengapa ini tidak berhasil - saya ingin mengerti?
Kode Unik

1
Sangat sepele bagi "peretas" untuk mengubah nama host yang digunakan untuk menyambung ke situs web.
Arafangion

@Arafangion Ubah di mana dan dapatkan apa?
MasterMastic

@MasterMastic: Misalnya, di linux, edit file /etc/hosts.conf. Windows memiliki kesamaan. Atau bahkan lebih mudahnya, cukup beri tahu curl atau wget nama host mana yang akan dilaporkan. Di sini, Anda tampaknya mengandalkan "nama host" untuk memblokir permintaan dari internet, jadi apa yang diperoleh peretas jelas adalah apa pun yang mereka butuhkan dengan melewati mekanisme "perlindungan" Anda. IIS sepertinya masih terikat ke port. Perbaikan yang benar adalah tidak mengikat ke port yang dapat diakses secara eksternal sejak awal.
Arafangion

@Arafangion Ya tapi itu pengalihan lokal. Intinya di sini bukanlah localhost, ini yang dimaksud dengan ( 127.0.0.1). Yang saya katakan adalah terhubung ke itu dan bukan ke IP Anda yang terlihat secara eksternal. Tidak ada ketergantungan pada localhost, itu hanya digunakan sebagai sinonim. Saya akan mengedit jawaban saya untuk membuatnya lebih jelas.
MasterMastic

2

Anda dapat menggunakan alat CMD Visual Studio 2005/2008/2010. Jalankan sebagai admin, dan tulis

aspnet_regiis -i

Akhirnya saya dapat menjalankan aplikasi saya dengan sukses.


2

Jika bekerja di server lokal atau Anda belum memiliki nama domain, hapus kolom "Host Name:". masukkan deskripsi gambar di sini


1

Periksa file host lokal Anda (misalnya C: \ Windows \ System32 \ drivers \ etc \ hosts). Dalam kasus saya, saya sebelumnya menggunakan ini untuk mengarahkan URL ke kotak dev dan kemudian melupakannya. Ketika saya kemudian menggunakan kembali URL yang sama, saya terus mendapatkan Permintaan Buruk (Nama Host Tidak Valid) karena lalu lintas menuju ke server yang salah.


1

Saya mendapatkan kesalahan ini ketika mencoba memanggil layanan web menggunakan "localhost". Saya memperbaikinya dengan menggunakan IP sebenarnya (192.168 ...)


Pemenang. Ini adalah masalah saya di windows server 2003.
DreamTeK

0

Saya melihat kesalahan yang sama setelah menggunakan msdeploy untuk menyalin aplikasi ke server baru. Ternyata bindings tersebut masih menggunakan alamat IP dari server sebelumnya. Jadi, periksa kembali alamat IP di binding IIS. (Tampak jelas setelah fakta, tetapi tidak segera terpikir oleh saya untuk memeriksanya).


0

Periksa kembali URL yang Anda berikan. Saya melihat kesalahan ini ketika saya melewatkan awalan rute yang ditentukan di ASP.NET sehingga tidak tahu ke mana harus mengarahkan permintaan.


0

Pastikan IIS mendengarkan port Anda.

Dalam kasus saya, inilah masalahnya. Jadi saya harus mengubah port saya ke yang lain seperti 8083 dan itu menyelesaikan masalah ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.