Saya telah membuat program, mencoba memposting string di situs dan saya mendapatkan kesalahan ini:
"Server melakukan pelanggaran protokol. Bagian = ResponseStatusLine"
setelah baris kode ini:
gResponse = (HttpWebResponse)gRequest.GetResponse();
Bagaimana cara memperbaiki pengecualian ini?
c#
httpwebrequest
manish patel
sumber
sumber
Terkadang kesalahan ini terjadi ketika
UserAgent
parameter permintaan kosong (dalam api github.com dalam kasus saya).Menyetel parameter ini ke string khusus yang tidak kosong memecahkan masalah saya.
sumber
WebClient
di sini stackoverflow.com/a/11841680/4795214HttpClient
add:client.DefaultRequestHeaders.Add("User-Agent", "Anything");
line for fix.Pelaku dalam kasus saya adalah mengembalikan
No Content
tanggapan tetapi menentukan badan tanggapan pada saat yang sama. Semoga jawaban ini mengingatkan saya dan mungkin orang lain untuk tidak membalasNoContent
dengan tubuh lagi.Perilaku ini konsisten dengan 10.2.5 204 No Content dari spesifikasi HTTP yang mengatakan:
sumber
The server committed a protocol violation. Section=ResponseStatusLine
kesalahan saat menggunakan WebApi untuk mengembalikanNoContent()
respons khusus yang mengirimkanNo Content
respons karena beberapa alasan aneh! Setelah saya mengeluarkannya, masalahnya hilang :)someContent
darireturn Request.CreateResponse(HttpStatusCode.NoContent, someContent);
+1Kemungkinan lain: saat melakukan POST, server merespons dengan 100 melanjutkan dengan cara yang salah.
Ini memecahkan masalah saya:
sumber
var http = new HttpClient(); http.DefaultRequestHeaders.ExpectContinue = false;
Ini terjadi pada saya ketika Skype berjalan di mesin lokal saya. Begitu saya menutupnya, pengecualian itu hilang.
Ide milik halaman ini
sumber
Salah satu cara untuk men-debug ini (dan untuk memastikan itu adalah pelanggaran protokol yang menyebabkan masalah), adalah dengan menggunakan Fiddler (Http Web Proxy) dan lihat apakah kesalahan yang sama terjadi. Jika tidak (misalnya Fiddler menangani masalah tersebut untuk Anda) maka Anda harus dapat memperbaikinya menggunakan flag UseUnsafeHeaderParsing.
Jika Anda mencari cara untuk menetapkan nilai ini secara terprogram, lihat contoh di sini: http://o2platform.wordpress.com/2010/10/20/dealing-with-the-server-committed-a-protocol-violation-sectionresponsestatusline /
sumber
Banyak solusi berbicara tentang solusi, tetapi tidak tentang penyebab kesalahan yang sebenarnya.
Salah satu kemungkinan penyebab kesalahan ini adalah jika server web menggunakan pengkodean selain
ASCII
atauISO-8859-1
untuk mengeluarkan bagian respons header. Alasan untuk menggunakanISO-8859-1
adalah jikaResponse-Phrase
berisi karakter Latin yang diperluas.Kemungkinan penyebab lain dari kesalahan ini adalah jika server web menggunakan
UTF-8
keluaran byte-order-marker (BOM). Misalnya, konstanta defaultEncoding.UTF8
mengeluarkan BOM, dan mudah untuk melupakannya. Halaman web akan bekerja dengan benar di Firefox dan Chrome, tetapiHttpWebRequest
akan gagal :). Perbaikan cepat adalah dengan mengubah server web untuk menggunakan pengkodean UTF-8 yang tidak mengeluarkan BOM, misalnyanew UTF8Encoding(false)
(yang OK selamaResponse-Phrase
hanya berisi karakter ASCII, tetapi sebenarnya itu harus menggunakanASCII
atauISO-8859-1
untuk header, dan kemudianUTF-8
atau beberapa pengkodean lain untuk respons).sumber
Pengaturan mengharapkan 100 terus salah dan mengurangi waktu idle soket menjadi dua detik menyelesaikan masalah bagi saya
sumber
Skype adalah penyebab utama masalah saya:
Galat ini biasanya terjadi ketika Anda telah menyiapkan Visual Studio untuk men-debug aplikasi web yang sudah ada yang berjalan di IIS daripada yang dibangun di ASP.NET server web debug bawaan . IIS secara default mendengarkan permintaan web pada port 80. Dalam hal ini, aplikasi lain sudah mendengarkan permintaan pada port 80. Biasanya, aplikasi yang melanggar adalah Skype, yang secara default mengambil alih mendengarkan pada port 80 dan 443 saat diinstal. Skype sudah menempati port 80. Jadi IIS tidak dapat memulai.
Untuk mengatasi masalah tersebut ikuti langkah-langkah:
Skype -> Alat -> Opsi -> Lanjutan -> Koneksi:
Hapus centang "Gunakan port 80 dan 443 sebagai alternatif untuk koneksi masuk".
Dan seperti yang ditunjukkan di bawah ini, lakukan reset IIS setelah selesai.
sumber
Saya mencoba mengakses Last.fm Rest API dari belakang proxy dan mendapatkan kesalahan terkenal ini.
Setelah mencoba beberapa solusi, hanya keduanya yang berhasil untuk saya
dan
sumber
Tidak ada solusi yang berhasil untuk saya, jadi saya harus menggunakan WebClient daripada HttpWebRequest dan masalahnya tidak ada lagi.
Saya perlu menggunakan CookieContainer, jadi saya menggunakan solusi yang diposting oleh Pavel Savara di utas ini - Menggunakan CookieContainer dengan kelas WebClient
hapus saja "dilindungi" dari baris ini:
private readonly CookieContainer container = new CookieContainer ();
sumber
Kemungkinan penyebab masalah ini adalah konfigurasi Web Proxy Auto Discovery Protocol (WPAD) di jaringan. Permintaan HTTP akan dikirim secara transparan ke proxy yang dapat mengirim kembali tanggapan yang tidak akan diterima atau tidak dikonfigurasi untuk diterima oleh klien. Sebelum meretas kode Anda menjadi bit, periksa apakah WPAD tidak berfungsi, terutama jika ini baru saja "mulai terjadi" secara tiba-tiba.
sumber
Masalah saya adalah saya menelepon
https
titik akhir denganhttp
.sumber
Hal pertama yang kami coba adalah menonaktifkan kompresi konten dinamis untuk IIS, yang memecahkan kesalahan tetapi kesalahan tidak disebabkan sisi server dan hanya satu klien yang terpengaruh oleh ini.
Di sisi klien kami menghapus instalan klien VPN, mengatur ulang pengaturan internet, dan kemudian menginstal ulang klien VPN. Kesalahan juga bisa disebabkan oleh antivirus sebelumnya yang memiliki firewall. Kemudian kami mengaktifkan kembali kompresi konten dinamis dan sekarang berfungsi dengan baik seperti sebelumnya.
Kesalahan muncul di aplikasi kustom yang menghubungkan ke layanan web dan juga di TFS.
sumber
Dalam kasus saya, IIS tidak memiliki izin yang diperlukan untuk mengakses jalur ASPX yang relevan.
Saya memberikan izin pengguna IIS ke direktori yang relevan dan semuanya baik-baik saja.
sumber
Lihat kode Anda dan temukan apakah Anda menyetel beberapa header dengan NULL atau nilai kosong.
sumber
Saya mulai mendapatkan kesalahan ini dari layanan JSON / REST php saya
Saya mulai mendapatkan kesalahan dari unggahan POST relativley langka setelah saya menambahkan
ob_start("ob_gzhandler")
ke skrip GET php yang paling sering diaksesSaya bisa menggunakan adil
ob_start()
, dan semuanya baik-baik saja.sumber