Узнайте всё о различных ошибках в браузере и о том, как на них правильно реагировать.

Народная мудрость гласит, что не ошибается лишь тот, кто только сидит на печи... Различного рода ошибки сопровождают нас практически везде. Не является исключением и любимый всеми Интернет. То при попытке зайти на нужный сайт браузер нам выдаст ошибку сервера, то скажет, что такой страницы не существует, а то вообще заявит, что у нас нет соединения!

Ошибок, которые может выдавать браузер, существует довольно много, поэтому нам, как пользователям, важно различать их и адекватно на них реагировать. Собственно, этому вопросу и будет посвящена сегодняшняя статья.

Основные причины и типы ошибок

Все ошибки, которые выдаёт нам браузер, можно разделить на несколько групп:

  1. Ошибки Интернет-соединения . Наиболее распространённой ошибкой данного типа является "Попытка подключения не удалась" или "Не удаётся получить доступ к сайту" (текст зависит от Вашего браузера). Такая ошибка появляется в двух случаях: либо сервер запрашиваемого Вами сайта вообще не работает, либо у Вас не работает подключение к Интернету. В первом случае другие сайты у Вас будут открываться и можно будет попытаться открыть нужный веб-ресурс спустя какое-то время (когда восстановится работа сервера). Во втором же случае Вы не сможете открыть ни единой странички вообще и это будет означать, что проблемы либо у Вас, либо у Вашего провайдера. Такой вариант ошибки часто сопровождается уведомлением в трее: "Сетевой кабель не подключён".
  1. Ошибки запроса . Эта группа ошибок включает в себя целый ряд всевозможных ответов сервера на неверно сформированный запрос. Чаще всего такой ошибочный запрос формируем мы сами, пытаясь ввести адрес несуществующей страницы. Стандартным ответом сервера на такой запрос будет ошибка 404 "Страница не найдена". Данный вид ошибок случается настолько часто, что в сфере разработки сайтов уже стало традицией оригинально оформлять специальную страницу, которая выдаётся при возникновении 404 ошибки, чтобы помочь пользователю найти искомую или похожую информацию, либо просто развлечь. Однако, кроме ошибки 404 существует ещё целый ряд возможных ошибок, начинающихся с кода 400. О них мы поговорим чуть позже.

  1. Ошибки сервера . Если Ваш запрос не доходит до запрошенного веб-узла, либо успешно достигает сервера, но не может быть им обработан, возникают ошибки с кодом, начинающимся на 500. Наиболее распространёнными вариантами таких ошибок сервера являются: 502 Bad Gateway, 503 Service Unavailable или 504 Gateway Timeout. Чаще всего такие ошибки означают то, что запрошенный Вами веб-ресурс временно или постоянно недоступен и не требуют никаких действий с Вашей стороны.

Кроме вышеупомянутых ошибок, сервер может выдавать ещё ряд кодов состояния, начинающихся с чисел 100 (информационные сообщения), 200 (коды успешной обработки запроса) и 300 (коды перенаправлений). Эти коды состояния, как правило, не визуализируются в браузере, однако могут быть просмотрены в заголовках ответов при использовании инструментария разработчиков браузера. Кстати, нормой считается ответ 200 OK или 301 Moved Permanently с корректным перенаправлением на новый адрес страницы:

Предлагаю рассмотреть наиболее популярные ошибки и ответы сервера немного подробнее.

Ошибка 404 Not Found и другие

Как уже было сказано выше, наиболее частой ошибкой, которую видит пользователь в браузере, является 404 Not Found . Это корректный ответ сервера в случае, если Вы запросили несуществующую страницу. Это может случится как по Вашему недосмотру (например, при ручном вводе адреса), так и по вине администрации посещаемого Вами сайта (например, страница была перемещена, но для неё не было прописано никаких правил перенаправления).

В любом случае, если Вы видите страницу 404 или 400 Bad Request, первым делом внимательно проверьте правильность адреса в адресной строке. Часто бывает, что даже в ссылках, по которым Вы переходите, закрадываются ошибки, которые видны с первого взгляда и могут быть сразу же исправлены:

  • отсутствующий или неправильно указанный протокол перед адресом сайта (должно быть "http://");
  • отсутствующий или неверно заданный формат веб-страницы (обычно, ".php", ".html" или ".htm", хотя, формат может быть и не указан, если заданы соответствующие настройки сервера и адрес завершается символом "/");
  • дублирующийся фрагмент адреса (например, два раза под ряд указана категория или имя страницы);
  • пропущенные или неверные символы (самая коварная ошибка, которую бывает трудно распознать, особенно, если в качестве ошибок фигурируют цифра "0" и буква "o" или английская и русская "c").

Если ни один из вариантов выявления ошибок Вам не помог, Вы вполне можете воспользоваться подсказками, которые владельцы сайта дают на этой же самой странице 404: поиск по сайту, похожие статьи и т.п. Например, на нашем сайте выгладит так:

Однако, не только 404 ошибка часто попадается на глаза. Среди второй по популярности можно назвать ошибку 403 Forbidden и её вариант 401 Unauthorized . Возникают данные ошибки, как нетрудно догадаться, вследствие попытки пользователя получить доступ к определённой закрытой информации, которая требует для отображения авторизации на веб-ресурсе.

Страница 403 на многих сайтах тоже оформляется в виде различных креативных решений и может содержать ссылки на главную страницу, форму авторизации или регистрации. В любом случае обойти ошибку 403 без регистрации на сайте не удастся.

Некоторые серверы могут возвращать ошибку 414 Request-URL Too Long . Возникает она тогда, когда длина адреса запрашиваемого ресурса (со всеми GET-параметрами) превышает определённый лимит количества символов (обычно 128 или 256).

Попробовать избежать подобной ошибки можно, убрав в адресной строке все символы, идущие после знака вопроса (включая сам знак). Например, из адреса типа: "https://www.site.name/page.php?name=Vasya&lastname=Pupkin " нужно сделать URL вида: "https://www.site.name/page.php ". Правда, если авторизация на таком сайте происходит через передачу GET-параметров, то мы можем получить вышеупомянутые ошибки 401 или 403:).

Ошибка 500 Internal Server Error и другие

Различных ошибок на клиентской стороне существует гораздо больше, нежели описано выше, но на практике они почти не встречаются. Зато сплошь и рядом случаются серверные ошибки... Все они имеют коды, начинающиеся числом "500", а сама ошибка 500 Internal Server Error может означать любой сбой сервера и встречается наиболее часто.

Некоторые веб-разработчики также креативно оформляют данную страницу ошибки, но делается это на чистом HTML, не требующем никакой предварительной обработки сервером, который в данный момент не работает. К сбою сервера могут привести различные ситуации, однако, почти все они никак не связаны с действиями клиента, соответственно, не могут быть решены на стороне пользователя.

Всё, что мы можем попытаться сделать для устранения ошибки - обновить страницу с очисткой кеша (в большинстве браузеров нужно нажать на кнопку обновления страницы с зажатым SHIFT или нажать клавишу F5). Если это не помогает, можно попробовать удалить куки и прочие временные файлы (проще всего программой CCleaner). Гарантии восстановления работоспособности сайта это не даст, но зато Вы будете точно знать, что проблема не у Вас.

Кроме ошибки 500 сервер может выдать и более информативные коды. Наиболее часто в данной группе встречаются ошибки 502 Bad Gateway, 503 Service Unavailable и 504 Gateway Timeout. 503 ошибка, увы, особо ситуацию не проясняет, зато ошибки 502 и 504 уже являются более конкретными.

При возникновении ошибки 502 Bad Gateway мы можем констатировать, что в цепочке серверов, отвечающих на наш запрос, где-то наблюдается сбой. Соответственно мы можем попытаться зайти на нужный нам сайт по другой цепочке, воспользовавшись анонимайзером или VPN -подключением.

Ошибка 504 Gateway Timeout возникает при превышении лимита времени ожидания сервера. Чаще всего это сугубо серверная ошибка, на которую мы повлиять не можем. Однако, если Вы умышленно передаёте серверу какой-либо сложный запрос и получаете такой код ответа, то Вам следует упростить URL и попытаться снова.

Ответ 301 и другие

Ошибки клиента и сервера, которые имеют номера 4хх и 5хх практически всегда визуализируются браузером. Однако, это далеко не все возможные ответы сервера. Сотые, двухсотые и трёхсотые коды, как правило, не отображаются, но на их основе браузер может определять своё дальнейшее поведение.

Наиболее показательным в данном контексте является ответ 301 Moved Permanently . Он относится к ответам перенаправления (трёхсотые) и сообщает браузеру, что запрашиваемая им страница была навсегда перемещена по новому адресу. Если адрес задан верно, то веб-обозреватель автоматически перейдёт по выданной сервером ссылке. Если же нет, то выдаст такую ошибку:

Не зная нового адреса, попасть на нужную страницу мы можем, разве что, воспользовавшись поиском по сайту (если он есть).

Вообще 301 редирект (как ещё принято называть данный ответ сервера) играет очень важную роль в вебе. Например, он учитывается поисковыми системами при ранжировании и позволяет перенести весь "вес" страницы на любой новый адрес. Эту возможность использует большинство современных сайтовых движков для правильного оформления ЧПУ .

Наряду с ответом 200 OK , который сообщает об успешной загрузке страницы, 301 Moved Permanently является одним из допустимых успешных ответов сервера. Кроме того, об успехе выполнения запроса свидетельствуют практически все двухсотые ответы (за исключением 204 No Content, который считается успешным, но не возвращает никакого содержимого), а также ряд трёхсотых:

  • 302 Moved Temporarily (или 302 Found) (временное перемещение);
  • 303 See Other (ссылка на другую страницу);
  • 307 Temporary Redirect (временный редирект).

Кроме того, существует небольшая группа сотых ответов, которая называется информационной . Информационные ответы 100 Continue, 101 Switching Protocols и 102 Processing просто дают браузеру команду продолжать работу в текущем режиме, переключить протокол или подождать завершения обработки запроса, соответственно. Эти коды никак не визуализируются, но знать о них всё же не помешает:)

Выводы

Ошибок страниц и ответов сервера существует довольно большое количество, но знать их все необязательно (достаточно просто понимать их природу). Гораздо важнее запомнить, что можно сделать, чтобы получить доступ к нужным страницам. И здесь вариантов не так уж много:

  • убедиться, что у Вас есть доступ в Интернет (попробовать открыть другие сайты);
  • проверить правильность нужного адреса;
  • авторизироваться (или зарегистрироваться) на сайте (если выдаётся ошибка доступа);
  • обновить страницу (возможно с зажатым SHIFT"ом для сброса кеша);
  • удалить куки и временные файлы (средствами браузера или сторонних утилит);
  • воспользоваться поиском по сайту (если сам сайт доступен).

Вот и все премудрости:) Успешного и безошибочного Вам Интернет-сёрфинга!

P.S. Разрешается свободно копировать и цитировать данную статью при условии указания открытой активной ссылки на источник и сохранения авторства Руслана Тертышного.

Коды ответов сервера (коды ошибок).

Относительно часто на форуме появляются топики с вопросами типа "Вижу в статистике мудятину 206, что это?" или "Что значит Partial Content в webalizer"e?". Ввиду повышенного интереса к этой теме, предлагается небольшой FAQ о кодах ошибок сервера.

Успешные запросы клиента.

Ответ сервера в диапазоне 200-299 означают, что запрос клиента обработан успешно.

200 OK - все отлично, запрос клиента обработан успешно, ответ сервера содержит затребованные данные.

201 Created (объект создан) - запрос был выполнен и в результате был создан новый ресурс. Новый созданный ресурс может быть вызван по URI (одному или нескольким), возвращенным в объекте ответа; наиболее специфический URL для ресурса отдается в поле заголовка Location. Первоначальный сервер ДОЛЖЕН создать ресурс перед возвратом кода состояния 201. Если действие не может быть выполнено немедленно, сервер должен возвратить ответ с кодом состояния 202 Accepted вместо 201.

202 Accepted (информация принята) - запрос был принят для обработки, но обработка не была завершена. В конечном счете запрос МОЖЕТ быть, а МОЖЕТ и не быть выполнен, поскольку он МОЖЕТ быть отвергнут при фактической обработке. Не имеется никакой возможности вторичной посылки кода состояния от асинхронной операции типа этой. Ответ с кодом состояния 202 преднамеренно уклончив. Цель его состоит в том, чтобы позволить серверу принять запрос для некоторого другого процесса (возможно пакетно-ориентированного процесса, который выполняется только один раз в день) и не требовать при этом, чтобы соединение агента пользователя с сервером сохранялось до завершения процесса. Объекту, возвращенному с этим ответом СЛЕДУЕТ содержать индикатор текущего состояния запроса и либо ссылку на монитор состояния, либо некоторую оценку времени, когда пользователь может ожидать завершения выполнения запроса.

203 Non-Authoritative Information (не авторская информация) - возвращенная в заголовке объекта (entity-header) метаинформация - это не оригинал, доступный на первоначальном сервере, а документ, собранный из локальных копий или копий третьей стороны. Представленный документ может быть как подмножеством оригинальной версии, так и содержать сведения, которые в ней не были представлены. Например, включение локальной аннотирующей информацию о ресурсе может расширить метаинформацию, известную первоначальному серверу. Использование этого кода состояния в ответе не является необходимым, но может применяться тогда, когда код состояния ответа отличен от 200 (OK).

204 No Content (нет содержания) - ответ содержит код состояния и заголовок, но тело содержимого отсутствует. При получении этого ответа броузер не должен обновлять свой документ. Обработчик чувствительных областей изображений может возвращать этот код, когда пользователь от не хуй делать щелкает на бесполезных или пустых участках изображения.

205 Reset Content (очистка ответа) - сервер выполнил запрос, и агенту пользователя следует отменить просмотр документа, который инициировал запрос. Этот ответ предназначен прежде всего для того, чтобы позволить ввод данных, осуществляемый пользователем, с последующей очисткой формы, в которой сделан ввод, так, чтобы пользователь мог легко инициировать следующее действие ввода. Ответ не должен содержать объект.

206 Partial Content (частичное содержимое) - сервер возвращает лишь часть данных затребованного объема. Используется в ответе на запрос с указанием заголовка Range. Сервер должен указать диапазон, включенный в ответ, в заголовке Content-Range. Вообщем выкачивают ваши порники всякими там флешгетами и прочими менеджерами закачки.

Переадресация

Код ответа сервера в диапазоне 300-399 означает, что запрос не выполнен и клиенту нужно предпринять некоторые действия для удовлетворения запроса.

300 Multiple Choices (несколько вариантов на выбор) - затребованный URL обозначает более одного ресурса. Например, URL может обозначать документ, переведенный на несколько языков. В теле содержимого, возвращенном сервером, может находиться перечень более конкретных данных о том, как выбрать ресурс правильно.

301 Moved Permanently (ресурс перемещен на постоянной основе) - затребованный URL уже не используется сервером, и указанная в запросе операция не выполнена. Новое местонахождение затребованного документа указывается в заголовке Location. Во всех последующих запросах данного документа следует указывать новый URL.

302 Moved Temporarily (ресурс временно перемещен) - затребованный URL перемешен, но лишь временно. Заголовок Location указывает на новое местонахождение. Сразу же после получения этого кода состояния клиент должен разрешить запрос при помощи нового URL, но во всех последующих запросах необходимо пользоваться старым URL.

303 See Other (смотрите другой ресурс) - затребованный URL можно найти по другому URL (указанному в заголовке Location). Его следует выбрать методом GET по данному ресурсу. Этот метод существует прежде всего для того, чтобы производить вывод данных активизированного методом POST сценария, используя перенаправление агента пользователя на указанный ресурс. Новый URI - это не ссылка, заменяющая первоначально запрошенный ресурс. Ответ с кодом состояния 303 не кэшируем, но ответ на второй (переназначенный) запрос может быть кэширован. Если новый URI - это расположение, то ответу следует содержать URL в поле Location. Если метод запроса был не HEAD, то объекту ответа следует содержать короткое гипертекстовое примечание с гиперссылкой на новый (или новые) URI.

304 Not Modified (не изменился) - это код ответа на заголовок lf-Modified-Since, если URL не изменялся с указанной даты. Тело содержимого не посылается, и клиент должен использовать свою локальную копию.

305 Use Proxy (используйте прокси-сервер) - oбращение к запрошенному ресурсу должно производиться через прокси-сервер, указанный в поле Location. В поле Location указан URL прокси-сервера. Ожидается, что получатель повторит запрос через прокси-сервер.

Неполные запросы клиента

Коды ответов в диапазоне 400-499 означают, что запрос клиента неполный. Эти коды могут также означать, что от клиента требуется дополнительная информация.

400 - Bad Request (некорректный запрос) - запрос не может быть понят сервером из-за malformed синтаксиса. Клиенту не следует повторять запрос без модификаций.

401 Unauthorized (нет разрешения) - запрос требует установления подлинности пользователя. Ответ должен включать поле заголовка WWW-Authenticate, содержащее вызов (challenge), применимый к запрошенному ресурсу. Клиент может повторить запрос с подходящим полем заголовка Authorization. Если запрос уже включает рекомендации установления подлинности (Authorization credentials) в поле Authorization, то ответ с кодом состояния 401 указывает, что в установлении подлинности этим рекомендациям отказано. Если ответ с кодом состояния 401 содержит тот же самый вызов, что и предшествующий ответ, а агент пользователя уже делал попытку установления подлинности по крайней мере один раз, то следует показать пользователю объект, который был дан в ответе, так как этот объект может включать relevant диагностическую информацию.

402 Payment Required (требуется оплата) - Этот код зарезервирован для будущего использования. В данный момент в HTTP еще не реализован.

403 Forbidden (доступ запрещен) - запрос отклонен по той причине, что сервер не хочет (или не имеет возможности) ответить клиенту.

404 Not Found (ресурс не найден) - документ по указанному URL не существует, сервер не нашел ничего, соответствующего данному запрашиваемому URI (Request-URI). Никак не сообщается является ли такое положение временным или постоянным. Если сервер не желает делать данную информацию доступной клиенту, то вместо этого кода состояния может использоваться код состояния 403 (Запрещено, Forbidden). Код состояния 410 (Удален, Gone) следует использовать, если сервер знает через некоторый внутренне конфигурируемый механизм, что старый ресурс более недоступен, но не знает нового адреса для пересылки.

405 Method Not Allowed (недопустимый метод) - этот код выдается с заголовком Allow и показывает, что метод, используемый клиентом, для данного URL не поддерживается.

406 Not Acceptable (неприемлемый запрос) - ресурс, идентифицируемый запросом, имеет возможности генерации только таких объектов ответа, которые имеют характеристики содержимого (content characteristics), не согласующиеся с заголовками приема (accept headers), представленными в запросе.

407 Proxy Authentication Required (необходима регистрация на сервере-представителе) - этот код подобен коду 401 (Несанкционированно, Unauthorized), но указывает, что клиент должен сначала установить свою подлинность (authenticate) прокси-серверу. Прокси-сервер должен возвратить поле заголовка Proxy-Authenticate, содержащее вызов (challenge), применяемый прокси-сервером для запрошенного ресурса. Клиент может повторить запрос с подходящим полем заголовка Proxy-Authorization.

408 Request Timeout (время обработки запроса истекло) - клиент не произвел запрос в течение времени, которое сервер готов ждать. Клиент может повторить запрос без модификаций позже.

409 Conflict (конфликт) - запрос не был выполнен из-за конфликта с текущим состоянием ресурса. Этот код позволяется только в ситуациях, когда ожидается, что пользователь может решить конфликт и повторно передать запрос. Телу ответа следует содержать достаточное количество информации для пользователя, чтобы он мог распознать источник конфликта. В идеале, объект ответа должен включать достаточно информации для пользователя или агента пользователя для решения проблемы; однако это может не быть возможно, да и не требуется. Конфликты, наиболее вероятно, будут возникать в ответ на запрос PUT. Если используется версификация, и объект, который должен быть помещен, включает изменения ресурса, которые находятся в противоречии со сделанными раньше каким-либо запросом (третьей стороны), сервер может использовать ответ с кодом состояния 409, чтобы показать, что он не может выполнить запрос. В этом случае, объекту ответа следует содержать список отличий двух версий в формате, определенном полем заголовка ответа Content-Type.

410 Gone (ресурса больше нет) - данный код показывает, что затребованный URL больше не существует и навсегда удален с сервера.

411 Length Required (необходимо указать длину) - сервер отказывается принимать запрос с неопределенным Content-Length. Клиент может повторить запрос, если добавит допустимое поле заголовка Content-Length, содержащее длину тела сообщения (message-body) в сообщении запроса.

412 Precondition Failed (не выполнено предварительное условие) - сервер отказывается обрабатывать запрос, потому что объект запроса больше, чем сервер желает или способен обработать. Сервер может закрыть соединение, чтобы не дать клиенту возможность продолжить запрос. Если это временное состояние, то серверу СЛЕДУЕТ включить поле заголовка Retry-After для указания времени, через которое клиент может снова повторить запрос.

413 Request Entity Too Large (запрашиваемый элемент слишком велик) - сервер не будет обрабатывать запрос, потому что его тело слишком велико.

414 Request-URI Too Long (идентификатор ресурса в запросе слишком длинный) - сервер не будет обрабатывать запрос, потому что его URL слишком длинный.

415 Unsupported Media Type (неподдерживаемый тип устройства) - сервер отказывается обслуживать запрос, потому что объект запроса находится в формате, не поддерживаемом запрошенным ресурсом для запрошенного метода.

Ошибки сервера

Коды ответов в диапазоне 500-599 показывают, что сервер столкнулся с ошибкой и, вероятно, не сможет выполнить запрос клиента.

500 Internal Server Error (внутренняя ошибка сервера) - при обработке запроса на сервере один из его компонентов (например, CGI-программа) выдал аварийный отказ или столкнулся с ошибкой конфигурации.

501 Not Implemented (функция не реализована) - клиент запросил выполнение действия, которое сервер выполнить не может, сервер не поддерживает функциональные возможности, требуемые для выполнения запроса. Этот ответ соответствует состоянию, когда сервер не распознает метод запроса и не способен обеспечитиь его для любого ресурса.

502 Bad Gateway (дефект шлюза) - сервер, действуя в качестве шлюза или прокси-сервера, получил недопустимый ответ от следующего сервера в цепочке запросов, к которому обратился при попытке выполнить запрос.

503 Service Unavailable (служба недоступна) - данный код означает, что данная служба временно недоступна, но в будущем доступ к ней будет восстановлен. Если сервер знает, когда это произойдет, может быть также выдан заголовок Retry-After.

504 Gateway Timeout (время прохождения через шлюз истекло) - этот ответ похож на 408 (Request Time-out) , за исключением того, что шлюз или уполномоченный сервер превысил лимит времени.

505 HTTP Version Not Supported (неподдерживаемая версия HTTP) - сервер не поддерживает версию протокола HTTP, использованную в запросе.

Для составления использовались материалы со все-различных сайтов (rtfm.vn.ua, w3.org и пр.)

Коды ошибок посылаются WEB-сервером агенту пользователя для определения его дальнейшего поведения.

Ошибки ВЕБ-сервера делятся на диапазоны:

100-199 Информационный . Сообщает агенту что, запрос агента принят и обрабатывается
200-299 Запрос агента обработан успешно , сервер отправил клиенту запрашиваемый документ
300-399 Запрос агента изменен и агенту нужно предпринять некоторые действия для удовлетворения измененного запроса.
400-499 Проблемы при попытке выполнить запрос .
500-599 Ошибки сервера

В диапазоне определены лишь несколько кодов, хотя для сервера при необходимости могут определяться собственные коды. При получении кода, который не может распознать, агент интерпретирует его в соответствии с диапазоном, к которому этот код принадлежит. Коды в диапазонах 100-199, 200-299 и 300-399 большинство Web-броузеров обрабатывают без извещения пользователя, а некоторые коды ошибок из диапазонов 400-499, 500-599 отображаются для пользователя.

Код ошибки http сервера Краткое описание
ошибка 100 Continue Начальная часть запроса принята, и клиент может продолжать передачу запроса
ошибка 101 Switching Protocols Сервер выполняет требование клиента и переключает протоколы в соответствии с указанием, данным в поле заголовка Upgrade.
ошибка 200 OK Запрос клиента обработан успешно и ответ сервера содержит затребованные данные
ошибка 201 Created Этот код состояния используется в случае создания нового URI. Вместе с этим кодом результата сервер выдает заголовок Location, который содержит информацию о том, куда были помещены новые данные.
ошибка 202 Accepted Запрос принят, но обрабатывается не сразу. В теле содержимого ответа сервера может быть дана дополнительная информация о данной транзакции. Гарантии того, что сервер в конечном итоге удовлетворит запрос, нет, даже несмотря на то, что на момент приема запрос выглядел допустимым.
ошибка 203 Non-Authoritative Information Информация в заголовке содержимого взята из локальной копии или у третьей стороны, а не с исходного сервера.
ошибка 204 No Content Ответ содержит код состояния и заголовок, но тело содержимого отсутствует. При получении этого ответа броузер не должен обновлять свой документ. Обработчик чувствительных областей изображений может возвращать этот код, когда пользователь щелкает на бесполезных или пустых участках изображения.
ошибка 205 Reset Content Броузер должен очистить форму, используемую в данной транзакции, для дополнительных входных данных. Полезен для CGI-приложений, требующих ввода данных.
ошибка 206 Partial Content Сервер возвращает лишь часть данных затребованного объема. Используется в ответе на запрос с указанием заголовка Range. Сервер должен указать диапазон, включенный в ответ, в заголовке Content-Range.
ошибка 300 Multiple Choices Затребованный URI обозначает более одного ресурса. Например, URI может обозначать документ, переведенный на несколько языков. В теле содержимого, возвращенном сервером, может находиться перечень более конкретных данных о том, как выбрать ресурс правильно
ошибка 301 Moved Permanently Затребованный URI уже не используется сервером, и указанная в запросе операция не выполнена. Новое местонахождение затребованного документа указывается в заголовке Location. Во всех последующих запросах данного документа следует указывать новый URI.
ошибка 302 Moved Temporarily Затребованный URI перемешен, но лишь временно. Заголовок Location указывает на новое местонахождение. Сразу же после получения этого кода состояния клиент должен разрешить запрос при помощи нового URI, но во всех последующих запросах необходимо пользоваться старым URI.
ошибка 303 See Other Затребованный URI можно найти по другому URI, указанному в заголовке Location. Его следует выбрать методом GET по данному ресурсу.
ошибка 304 Not Modified Это код ответа на заголовок lf-Modified-Since, если URI не изменялся с указанной даты. Тело содержимого не посылается, и клиент должен использовать свою локальную копию.
ошибка 305 Use Proxy Доступ к затребованному URI должен осуществляться через proxy-сервер, указанный в заголовке Location.
ошибка 400 Bad Request Означает, что сервер обнаружил в запросе клиента синтаксическую ошибку.
ошибка 401 Unauthorized Этот код результата, передаваемый с заголовком WWW-Authenticate, показывает, что пославший запрос пользователь не имеет необходимых полномочий и что при повторении запроса с указанием данного URI пользователь должен такие полномочия предоставить.
ошибка 402 Payment Required Этот код в HTTP еще не реализован.
ошибка 403 Forbidden Запрос отклонен по той причине, что сервер не хочет (или не имеет возможности) ответить клиенту. Возможные причины ошибки:
  • Вы пытаетесь запустить CGI-скрипт, расположенный вне CGI-директории (например, в директории документов сервера www). Можно запускать скрипты из www-директории только если в ней есть файл.htaccess (с точкой в начале) следующего содержания: Options +ExecCGI
  • Возможно, вы пытаетесь открыть картинку или статический HTML-файл, расположенный в CGI-директории. Этого делать нельзя. Все рисунки (а также другие файлы, за исключениям скриптов) должны находиться в www-директории.
  • Если вы ожидаете получить листинг каталога, но выводится эта ошибка, вероятно, для данной директории выдача листинга запрещена (например, это CGI-папка). Для разрешения листинга в нужной директории должен находиться файл.htaccess следующего содержания: Options +Indexes
ошибка 404 Not Found Документ по указанному URL не существует. Возможно, такой файл удален, а возможно, вы ошиблись при наборе URL в браузере или пошли по неверной ссылке.
ошибка 405 Method Not Allowed Этот код выдается с заголовком Allow и показывает, что метод, используемый клиентом, для данного URL не поддерживается. Возможно, вы пытаетесь отправить данные POST-форму на страницу, которая не является скриптом (например, на SHTML-страницу). Проверьте путь в атрибуте action тэга, инициировавшего данный запрос. Проверьте также, не пуст ли этот атрибут (и задан ли).
ошибка 406 Not Acceptable Ресурс, указанный клиентом по данному URL, существует, но не в том формате, который нужен клиенту. Вместе с этим кодом сервер выдает заголовки Content-Language, Content-Encoding и Content-Type.
ошибка 407 Proxy Authentication Required Proxy-сервер должен санкционировать запрос перед тем, как пересылать его. Используется с заголовком Proxy-Authenticate.
ошибка 408 Request Time-out Этот код ответа означает, что клиент не передал полный запрос в течение некоторого установленного промежутка времени (который обычно задается в конфигурации сервера) и сервер разрывает сетевое соединение.
ошибка 409 Conflict Данный запрос конфликтует с другим запросом или с конфигурацией сервера. Информацию о конфликте следует возвратить в информационной части ответа.
ошибка 410 Gone Данный код показывает, что затребованный URL больше не существует и навсегда удален с сервера.
ошибка 411 Length Required Сервер отказывается принимать запрос без определенного Content-Length.
ошибка 412 Precondition Failed Результат вычисления условия, заданного в запросе одним или несколькими заголовками if... , представляет собой "ложь".
ошибка 413 Request Entity Too Large Сервер не будет обрабатывать запрос, потому что его содержание слишком велико.
ошибка 414 Request URL Too Long Сервер не будет обрабатывать запрос, потому что его URL слишком длинный.
ошибка 415 Unsupported Media Type Сервер не будет обрабатывать запрос, потому что его тело имеет неподдерживаемый формат
ошибка 416 Requested Range Not Satisfiable Сервер сообщает - форма запроса (требуемый диапазон) не выполнима
ошибка 417 Expectation Failed Сервер сообщает - время ожидания истекло.
ошибка 500 Internal Server Error При обработке запроса на сервере один из его компонентов (например, CGI-программа) выдал аварийный отказ или столкнулся с ошибкой конфигурации. Причиной этого могут быть неправильные инструкции в файле.htaccess, неправильные атрибуты на CGI-скрипте (должны быть 755). Так же, это может быть ошибка в скрипте. Точную причину можно установить, просматривая error.log.
ошибка 501 Not Implemented Клиент запросил выполнение действия, которое сервер выполнить не может.
ошибка 502 Bad Gateway Сервер (или proxy-сервер) получил недопустимые ответы другого сервера (или proxy-сервера)
ошибка 503 Service Unavailable Данный код означает, что данная служба временно недоступна, но в будущем доступ к ней будет восстановлен. Если сервер знает, когда это произойдет, может быть также выдан заголовок Retry-After.
ошибка 504 Gateway Time-out Этот ответ похож на 408 (Request Time-out), за исключением того, что шлюз или уполномоченный сервер превысил лимит времени.
ошибка 505 HTTP Version not supported Версия HTTP не поддерживается данным сервером

33

Это, как я называю обслуживание с.NET:

Var requestedURL = "https://accounts.google.com/o/oauth2/token?code=" + code + "&client_id=" + client_id + "&client_secret=" + client_secret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code"; HttpWebRequest authRequest = (HttpWebRequest)WebRequest.Create(requestedURL); authRequest.ContentType = "application/x-www-form-urlencoded"; authRequest.Method = "POST"; WebResponse authResponseTwitter = authRequest.GetResponse();

Но когда этот метод вызывается, я получаю:

Exception Details: System.Net.WebException: The remote server returned an error: (411) Length Required.

что я должен делать?

  • 6 ответов
  • Сортировка:

    Активность

54

Когда вы используете метод HttpWebRequest и POST, вам необходимо установить контент (или тело, если хотите) через RequestStream. Но, согласно вашему коду, использования authRequest.Method = "GET" должно быть достаточно.

В случае, если вам интересно о формате POST, вот что вы должны сделать:

ASCIIEncoding encoder = new ASCIIEncoding(); byte data = encoder.GetBytes(serializedObject); // a json object, or xml, whatever... HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.Method = "POST"; request.ContentType = "application/json"; request.ContentLength = data.Length; request.Expect = "application/json"; request.GetRequestStream().Write(data, 0, data.Length); HttpWebResponse response = request.GetResponse() as HttpWebResponse;

8

Когда вы делаете POST HttpWebRequest, необходимо указать длину данных, которые вы отправляете, что-то вроде:

String data = "something you need to send" byte postBytes = Encoding.ASCII.GetBytes(data); request.ContentLength = postBytes.Length;

если вы не отправлять какие-либо данные, просто установите его в 0, что означает, что вы просто нужно добавить в код строку:

Request.ContentLength = 0;

Обычно, если вы не отправлять какие-либо данные, они выбрали метод GET вместо мудрее, как вы можете видеть в HTTP RFC

1

Хотя обычно можно было бы ожидать, посылаемые данные с POST, было бы неправильно и плохая практика, чтобы использовать GET, когда вы * изменение * данных на сервере. Запрос POST должен избегать прокси-кэшей между клиентом и сервером. GET в порядке, если данные извлекаются с сервера без каких-либо изменений на сервере в результате запроса. - Michael 04 апр. 16 2016-04-04 04:57:58

1

System.Net.WebException: The remote server returned an error: (411) Length Required.

This is a pretty common issue that comes up when trying to make call a REST based API method through POST. Luckily, there is a simple fix for this one.

This is the code I was using to call the Windows Azure Management API. This particular API call requires the request method to be set as POST, however there is no information that needs to be sent to the server.

var request = (HttpWebRequest) HttpWebRequest.Create(requestUri); request.Headers.Add("x-ms-version", "2012-08-01"); request.Method = "POST"; request.ContentType = "application/xml";

To fix this error, add an explicit content length to your request before making the API call.

request.ContentLength = 0;

2

var requestedURL = "https://accounts.google.com/o/oauth2/token?code=" + code + "&client_id=" + client_id + "&client_secret=" + client_secret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code"; HttpWebRequest authRequest = (HttpWebRequest)WebRequest.Create(requestedURL); authRequest.ContentType = "application/x-www-form-urlencoded"; authRequest.Method = "POST"; //Set content length to 0 authRequest.ContentLength = 0; WebResponse authResponseTwitter = authRequest.GetResponse();

Свойство ContentLength содержит значение для отправки в качестве Content-length HTTP заголовка с запросом.

Любое значение, отличное от -1 в ContentLength собственности указывает на то, что данные запроса загрузки и что только методы, которые загружать данные могут быть установлены в свойстве метода.

После того, как свойство ContentLength устанавливается в значение, то число байтов должны быть записаны в поток запроса, который возвращается посредством вызова метода GetRequestStream или как BeginGetRequestStream и EndGetRequestStream методы.

для более подробной информации нажмите



Мы можем оповещать вас о новых статьях,
чтобы вы всегда были в курсе самого интересного.