2010-03-20 75 views

回答

62

嘗試把這個在您的應用程序/ web.config文件:

<system.net> 
    <settings> 
     <httpWebRequest useUnsafeHeaderParsing="true" /> 
    </settings> 
</system.net> 

如果這不工作,你也可以嘗試KeepAlive屬性設置爲false。

+3

我有6個網站拋出這個錯誤。設置useUnsafeHeaderParsing修復了一個鏈接,但將KeepAlive = false設置爲全部6. – 2012-09-17 18:15:04

+2

只設置KeepAlive = false爲我創造了奇蹟。 – 2013-03-22 17:16:08

+2

對於非web應用程序,可以在App.copnfig的根標記內放置相同的內容(例如,我修復了WPF應用程序 - 謝謝!)。 – 2013-08-20 15:39:53

6

調試此方法(並確保導致問題的協議違規)的一種方法是使用Fiddler(Http Web Proxy)並查看是否發生相同的錯誤。如果沒有(即Fiddler爲你處理這個問題),那麼你應該可以使用UseUnsafeHeaderParsing標誌來修復它。

如果你正在尋找一種方法來設置這個值編程看到這裏的例子:http://o2platform.wordpress.com/2010/10/20/dealing-with-the-server-committed-a-protocol-violation-sectionresponsestatusline/

+0

Fiddler確實解決了我有GET HTTP請求的問題。我們能看到小提琴手做了什麼嗎? – 2016-11-04 16:38:44

9

另一種可能:做一個POST時,服務器以100響應繼續以不正確的方式。

這解決了這個問題對我來說:

request.ServicePoint.Expect100Continue = false; 
+0

這在訪問MediaFire API時適用於我。 – AlexPi 2016-02-21 00:03:44

+0

我知道我遲到了,但是,您是指「以不正確的方式」是什麼意思? – kuskmen 2017-07-13 13:57:25

6

設定預期100繼續爲false,並減少插座空閒時間兩秒鐘解決了我的問題

ServicePointManager.Expect100Continue = false; 
ServicePointManager. MaxServicePointIdleTime = 2000; 
48

有時會出現此錯誤時UserAgent請求參數爲空(在我的情況下,在github.com api中)。

設置此參數爲自定義非空字符串解決了我的問題。

+5

啊,這是我需要的。謝謝。這裏是一個用戶代理的例子:http://stackoverflow.com/a/15144495/891976 – 2014-12-17 16:28:24

+0

爲我工作:) – dbones 2015-05-09 00:33:01

+0

一個快速線與'WebClient'在這裏使用http://stackoverflow.com/a/11841680/ 4795214 – 2016-07-19 09:42:31

20

在我的情況下,罪魁禍首返回一個No Content響應,但同時定義響應正文。可能這個答案提醒我,也許其他人不要再返回一個NoContent響應與身體再次。

此行爲與10.2.5 204無內容的HTTP specification它說的一致:

The 204 response MUST NOT include a message-body, and thus is always terminated by the first empty line after the header fields.

+0

在我得到'服務器違反協議之後,請閱讀本文。 Section = ResponseStatusLine'錯誤,當使用WebApi返回響應中發送'No Content'的自定義'NoContent()'響應時,出現一些奇怪的原因!一旦我拿出來,問題就消失了:) – Intrepid 2015-02-27 15:15:33

+0

同樣在這裏!感謝分享! – 2015-07-09 19:51:35

+1

這也是我的問題,雖然它很棘手,因爲它是在沒有內容響應失敗後的調用。 – mdickin 2016-12-07 01:46:16

2

的解決方案中沒有爲我工作,所以我不得不使用Web客戶端,而不是HttpWebRequest和問題不再。

我需要使用的CookieContainer,所以我使用帕維爾·薩瓦拉在這個線程發佈的解決方案 - Using CookieContainer with WebClient class

只是刪除這條線「保護」:

私人只讀的CookieContainer集裝箱=新的CookieContainer( );

8

許多解決方案都提到解決方法,但不涉及錯誤的實際原因。

此錯誤的一個可能原因是,如果網絡服務器使用ASCIIISO-8859-1以外的編碼輸出標頭響應部分。如果Response-Phrase包含擴展的拉丁字符,則使用ISO-8859-1的原因是。

此錯誤的另一個可能原因是,如果網絡服務器使用輸出字節順序標記(BOM)的UTF-8。例如,缺省常數Encoding.UTF8輸出物料清單,很容易忘記這一點。該網頁將在Firefox和Chrome中正常工作,但HttpWebRequest會炸彈:)。一個快速解決方案是將網絡服務器更改爲使用不輸出BOM的UTF-8編碼,例如(只要Response-Phrase只包含ASCII字符,但確實應該使用ASCIIISO-8859-1作爲標題,然後使用UTF-8或其他編碼作爲響應)。

+0

這是最好的迴應。它解釋了爲什麼Web服務器行爲不當。謝謝! (由於HttpListener的部署問題,我必須使用套接字模擬Web服務器。) – 2015-10-16 15:11:37

9

當我在本地機器上運行Skype時,發生這種情況。一旦我結束,異常就消失了。

Idea courtesy of this page

+0

有同樣的問題。原來是Skype。它非常不幸,無法提供正確的信息。 – 2015-06-24 17:31:20

+0

您實際上並不需要關閉Skype,我在下面添加了一個答案,以說明如何在不關閉Skype的情況下解決此問題。 – 2016-06-02 15:44:46

0

在我的情況下,IIS沒有必要的權限來訪問相關的ASPX路徑。

我給IIS用戶權限的相關目錄,一切都很好。

0

查看你的代碼,找到你是否設置NULL或空值的頭。

1

我們嘗試過的第一件事是禁用IIS的動態內容壓縮,解決了錯誤,但錯誤並未引起服務器端,只有一個客戶端受此影響。

在客戶端,我們卸載了VPN客戶端,重置了Internet設置,然後重新安裝了VPN客戶端。這個錯誤也可能是以前的防病毒軟件引起的。然後我們啓用動態內容壓縮,現在它可以像以前一樣正常工作。

錯誤出現在連接到Web服務和TFS的自定義應用程序中。

3

我試圖從代理後面訪問Last.fm Rest API,並得到這個着名的錯誤。

The server committed a protocol violation. Section=ResponseStatusLine

嘗試一些解決方法之後,只有這兩個工作對我來說

HttpWebRequest HttpRequestObj = WebRequest.Create(BaseUrl) as HttpWebRequest; 
HttpRequestObj.ProtocolVersion = HttpVersion.Version10; 

HttpWebRequest HttpRequestObj = WebRequest.Create(BaseUrl) as HttpWebRequest; 
HttpRequestObj.ServicePoint.Expect100Continue = false; 
6

的Skype是我的問題的主要原因:

此錯誤通常發生在您將Visual Studio設置爲調試存在時ng web應用程序在IIS中運行而不是內置在ASP.NET調試Web服務器。 IIS默認偵聽端口80上的Web請求。在這種情況下,另一個應用程序已經偵聽端口80上的請求。通常情況下,有問題的應用程序是Skype,默認情況下,Skype會在安裝時監聽端口80和443。 Skype已佔用端口80.所以IIS無法啓動。

要解決此問題請按照下列步驟:

的Skype - >工具 - >選項 - >高級 - >連接:

取消選中 「使用端口80和443的傳入連接的替代品」。

而且正如下面指出的執行一次IIS重設

+2

並記得在完成後重新啓動IIS – 2016-06-14 13:15:12

0

我開始從我的PHP JSON/REST服務收到此錯誤

我開始relativley罕見POST上傳得到的錯誤我加ob_start("ob_gzhandler")最經常訪問的讓PHP腳本後

我能夠使用只是ob_start(),一切都很好。

相關問題