프로그램을 만들고 사이트에 문자열을 게시하려고 시도했는데이 오류가 발생합니다.
“서버가 프로토콜 위반을 커밋했습니다. 섹션 = 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;
답변
답변
이를 디버깅하는 한 가지 방법 (문제를 일으키는 프로토콜 위반인지 확인)은 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-1
가 Response-Phrase
포함 된 경우 입니다.
이 오류의 또 다른 가능한 원인은 웹 서버가 UTF-8
BOM (byte-order-marker)을 출력하는 것을 사용 하는 경우 입니다. 예를 들어, 기본 상수 Encoding.UTF8
는 BOM을 출력하며이를 잊기 쉽습니다. 웹 페이지는 파이어 폭스와 크롬에서 제대로 작동하지만 HttpWebRequest
폭탄을 터뜨릴 것입니다 :). 빠른 수정 출력 BOM, 예를 들어하지 않는 UTF-8 인코딩 사용하도록 웹 서버를 변경하는 것입니다 new UTF8Encoding(false)
오랫동안 같이으로 OK입니다 ( Response-Phrase
ASCII 문자 만 포함,하지만 정말 사용해야 ASCII
또는 ISO-8859-1
헤더에 대한 다음 UTF-8
또는 응답을위한 다른 인코딩).