Я создал программу, попытался разместить строку на сайте и получил такую ошибку:
«Сервер совершил нарушение протокола. Раздел = ResponseStatusLine»
после этой строки кода:
gResponse = (HttpWebResponse)gRequest.GetResponse();
Как я могу исправить это исключение?
c#
httpwebrequest
Manish Patel
источник
источник
Иногда эта ошибка возникает, когда
UserAgent
параметр запроса пуст (в моем случае в github.com api).Установка этого параметра в пользовательскую непустую строку решила мою проблему.
источник
WebClient
здесь stackoverflow.com/a/11841680/4795214HttpClient
add:client.DefaultRequestHeaders.Add("User-Agent", "Anything");
для исправления.В моем случае виновник возвращал
No Content
ответ, но в то же время определял тело ответа. Пусть этот ответ напомнит мне и, возможно, другим никогда больше не возвращатьNoContent
ответ с телом .Такое поведение согласуется с 10.2.5 204 Нет содержания в спецификации HTTP , который говорит:
источник
The server committed a protocol violation. Section=ResponseStatusLine
ошибке при использовании WebApi для возврата настраиваемогоNoContent()
ответа, который отправлялсяNo Content
в ответе по какой-то странной причине! Как только я вытащил это, проблема исчезла :)someContent
изreturn Request.CreateResponse(HttpStatusCode.NoContent, someContent);
+1Другая возможность: при выполнении POST сервер неверно отвечает 100 продолжением.
Это решило проблему для меня:
источник
var http = new HttpClient(); http.DefaultRequestHeaders.ExpectContinue = false;
Это происходило со мной, когда на моем локальном компьютере был запущен Skype. Как только я закрыл это исключение, исчезло.
Идея любезно предоставлена этой страницей
источник
Один из способов отладить это (и убедиться, что проблема связана с нарушением протокола) - использовать Fiddler (Http Web Proxy) и посмотреть, возникает ли та же ошибка. Если это не так (т.е. 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). Например, константа по умолчаниюEncoding.UTF8
выводит спецификацию, и об этом легко забыть. Веб-страницы будут корректно работать в Firefox и Chrome, ноHttpWebRequest
будут бомбить :). Быстрое исправление - изменить веб-сервер для использования кодировки UTF-8, которая не выводит спецификацию, напримерnew UTF8Encoding(false)
(что нормально, еслиResponse-Phrase
только содержит символы ASCII, но на самом деле он должен использоватьASCII
илиISO-8859-1
для заголовков, а затемUTF-8
или какая-то другая кодировка ответа).источник
Настройка expect 100 continue на false и сокращение времени простоя сокета до двух секунд решило проблему для меня.
источник
Skype был основной причиной моей проблемы:
Эта ошибка обычно возникает, когда вы настроили Visual Studio для отладки существующего веб-приложения, работающего в IIS, а не на встроенном веб-сервере отладки ASP.NET . IIS по умолчанию прослушивает веб-запросы через порт 80. В этом случае другое приложение уже прослушивает запросы через порт 80. Как правило, приложение-нарушитель - Skype, который по умолчанию прослушивает порты 80 и 443 при установке. Skype уже занимает порт 80. Итак, IIS не запускается.
Чтобы решить проблему, выполните следующие действия:
Skype -> Инструменты -> Параметры -> Дополнительно -> Подключение:
Снимите флажок «Использовать порт 80 и 443 в качестве альтернативы для входящих подключений».
И, как указано ниже, выполните сброс IIS после завершения.
источник
Я попытался получить доступ к Last.fm Rest API из-за прокси-сервера и получил эту знаменитую ошибку.
Попробовав обходные пути, у меня сработали только эти двое.
и
источник
Ни одно из решений у меня не сработало, поэтому мне пришлось использовать WebClient вместо HttpWebRequest, и проблемы больше не было.
Мне нужно было использовать CookieContainer, поэтому я использовал решение, опубликованное Павлом Саварой в этом потоке - Использование CookieContainer с классом WebClient
просто удалите "protected" из этой строки:
закрытый только для чтения CookieContainer container = new CookieContainer ();
источник
Вероятной причиной этой проблемы является конфигурация протокола автоматического обнаружения веб-прокси (WPAD) в сети. HTTP-запрос будет прозрачно отправлен на прокси-сервер, который может отправить ответ, который клиент не примет или не настроен для принятия. Прежде чем взламывать свой код на части, убедитесь, что WPAD не работает, особенно если это «начало происходить» неожиданно.
источник
Моя проблема заключалась в том, что я позвонил в
https
конечную точку с помощьюhttp
.источник
Первым делом мы попытались отключить сжатие динамического содержимого для IIS, что решило ошибки, но ошибка не была вызвана серверной частью, и это затронуло только одного клиента.
На стороне клиента мы удалили VPN-клиенты, сбросили настройки Интернета, а затем переустановили VPN-клиенты. Ошибка также могла быть вызвана предыдущим антивирусом, у которого был брандмауэр. Затем мы включили сжатие динамического контента, и теперь оно работает нормально, как и раньше.
Ошибка появилась в пользовательском приложении, которое подключается к веб-сервису, а также в TFS.
источник
В моем случае у IIS не было необходимых разрешений для доступа к соответствующему пути ASPX.
Я дал пользователю IIS права доступа к соответствующему каталогу, и все было хорошо.
источник
Посмотрите свой код и выясните, устанавливаете ли вы какой-либо заголовок с NULL или пустым значением.
источник
Я начал получать эту ошибку из моих служб php JSON / REST
Я начал получать ошибку от релятивно редких загрузок POST после того, как добавил
ob_start("ob_gzhandler")
к наиболее часто используемому сценарию GET phpУмею пользоваться просто
ob_start()
, и все нормально.источник