[c#] 서버가 프로토콜 위반을 커밋했습니다. 섹션 = ResponseStatusLine 오류

프로그램을 만들고 사이트에 문자열을 게시하려고 시도했는데이 오류가 발생합니다.

“서버가 프로토콜 위반을 커밋했습니다. 섹션 = ResponseStatusLine”

이 코드 줄 뒤에 :

gResponse = (HttpWebResponse)gRequest.GetResponse(); 

이 예외를 어떻게 수정할 수 있습니까?



답변

이것을 app / web.config에 넣으십시오.

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

이것이 작동하지 않으면 KeepAlive속성을 false로 설정할 수도 있습니다 .


답변

때때로이 오류는 UserAgent요청 매개 변수가 비어 있을 때 발생합니다 (제 경우에는 github.com api에서).

이 매개 변수를 빈 문자열이 아닌 사용자 지정으로 설정하면 문제가 해결되었습니다.


답변

제 경우의 범인은 No Content응답 을 반환 하지만 동시에 응답 본문을 정의하는 것이 었 습니다. 이 답변이 저와 다른 사람들 이 다시 는 몸 으로 응답 하지 않도록NoContent 상기 시키길 바랍니다.

이 동작은 다음과 같은 HTTP 사양10.2.5 204 내용 없음 과 일치합니다 .

204 응답은 메시지 본문을 포함하지 않아야하며 따라서 항상 헤더 필드 다음의 첫 번째 빈 줄로 종료됩니다.


답변

또 다른 가능성 : POST를 수행 할 때 서버가 잘못된 방식으로 100 계속으로 응답합니다.

이것은 나를 위해 문제를 해결했습니다.

request.ServicePoint.Expect100Continue = false;


답변

이것은 내 로컬 컴퓨터에서 Skype를 실행했을 때 발생했습니다. 종료하자마자 예외가 사라졌습니다.

이 페이지의 아이디어 제공


답변

이를 디버깅하는 한 가지 방법 (문제를 일으키는 프로토콜 위반인지 확인)은 Fiddler (Http 웹 프록시)를 사용하여 동일한 오류가 발생하는지 확인하는 것입니다. 그렇지 않은 경우 (예 : Fiddler가 문제를 처리 한 경우) UseUnsafeHeaderParsing 플래그를 사용하여 문제를 해결할 수 있습니다.

이 값을 프로그래밍 방식으로 설정하는 방법을 찾고 있다면 여기에서 예제를 참조하십시오. http://o2platform.wordpress.com/2010/10/20/dealing-with-the-server-committed-a-protocol-violation-sectionresponsestatusline /


답변

많은 솔루션이 해결 방법에 대해 이야기하지만 오류의 실제 원인에 대해서는 설명하지 않습니다.

이 오류의 한 가지 가능한 원인은 웹 서버가 헤더 응답 섹션을 출력하기 위해 ASCII또는 이외의 인코딩을 사용하는 경우 ISO-8859-1입니다. 사용하는 이유 는 확장 라틴 문자 ISO-8859-1Response-Phrase포함 된 경우 입니다.

이 오류의 또 다른 가능한 원인은 웹 서버가 UTF-8BOM (byte-order-marker)을 출력하는 것을 사용 하는 경우 입니다. 예를 들어, 기본 상수 Encoding.UTF8는 BOM을 출력하며이를 잊기 쉽습니다. 웹 페이지는 파이어 폭스와 크롬에서 제대로 작동하지만 HttpWebRequest폭탄을 터뜨릴 것입니다 :). 빠른 수정 출력 BOM, 예를 들어하지 않는 UTF-8 인코딩 사용하도록 웹 서버를 변경하는 것입니다 new UTF8Encoding(false)오랫동안 같이으로 OK입니다 ( Response-PhraseASCII 문자 만 포함,하지만 정말 사용해야 ASCII또는 ISO-8859-1헤더에 대한 다음 UTF-8또는 응답을위한 다른 인코딩).