Коды ответов сервера (коды ошибок).
Относительно часто на форуме появляются топики с вопросами типа "Вижу в статистике мудятину 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 и пр.)
Узнайте всё о различных ошибках в браузере и о том, как на них правильно реагировать. Народная мудрость гласит, что не ошибается лишь тот, кто только сидит на печи... Различного рода ошибки сопровождают нас практически везде. Не является исключением и любимый всеми Интернет. То при попытке зайти на нужный сайт браузер нам выдаст ошибку сервера, то скажет, что такой страницы не существует, а то вообще заявит, что у нас нет соединения! Ошибок, которые может выдавать браузер, существует довольно много, поэтому нам, как пользователям, важно различать их и адекватно на них реагировать. Собственно, этому вопросу и будет посвящена сегодняшняя статья. Основные причины и типы ошибокВсе ошибки, которые выдаёт нам браузер, можно разделить на несколько групп:
Кроме вышеупомянутых ошибок, сервер может выдавать ещё ряд кодов состояния, начинающихся с чисел 100 (информационные сообщения), 200 (коды успешной обработки запроса) и 300 (коды перенаправлений). Эти коды состояния, как правило, не визуализируются в браузере, однако могут быть просмотрены в заголовках ответов при использовании инструментария разработчиков браузера. Кстати, нормой считается ответ 200 OK или 301 Moved Permanently с корректным перенаправлением на новый адрес страницы: Предлагаю рассмотреть наиболее популярные ошибки и ответы сервера немного подробнее. Ошибка 404 Not Found и другиеКак уже было сказано выше, наиболее частой ошибкой, которую видит пользователь в браузере, является 404 Not Found . Это корректный ответ сервера в случае, если Вы запросили несуществующую страницу. Это может случится как по Вашему недосмотру (например, при ручном вводе адреса), так и по вине администрации посещаемого Вами сайта (например, страница была перемещена, но для неё не было прописано никаких правил перенаправления). В любом случае, если Вы видите страницу 404 или 400 Bad Request, первым делом внимательно проверьте правильность адреса в адресной строке. Часто бывает, что даже в ссылках, по которым Вы переходите, закрадываются ошибки, которые видны с первого взгляда и могут быть сразу же исправлены:
Если ни один из вариантов выявления ошибок Вам не помог, Вы вполне можете воспользоваться подсказками, которые владельцы сайта дают на этой же самой странице 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, который считается успешным, но не возвращает никакого содержимого), а также ряд трёхсотых:
Кроме того, существует небольшая группа сотых ответов, которая называется информационной . Информационные ответы 100 Continue, 101 Switching Protocols и 102 Processing просто дают браузеру команду продолжать работу в текущем режиме, переключить протокол или подождать завершения обработки запроса, соответственно. Эти коды никак не визуализируются, но знать о них всё же не помешает:) ВыводыОшибок страниц и ответов сервера существует довольно большое количество, но знать их все необязательно (достаточно просто понимать их природу). Гораздо важнее запомнить, что можно сделать, чтобы получить доступ к нужным страницам. И здесь вариантов не так уж много:
Вот и все премудрости:) Успешного и безошибочного Вам Интернет-сёрфинга! P.S. Разрешается свободно копировать и цитировать данную статью при условии указания открытой активной ссылки на источник и сохранения авторства Руслана Тертышного. Коды ошибок посылаются WEB-сервером агенту пользователя для определения его дальнейшего поведения. Ошибки ВЕБ-сервера делятся на диапазоны: 100-199 Информационный
. Сообщает агенту что, запрос агента принят и обрабатывается В диапазоне определены лишь несколько кодов, хотя для сервера при необходимости могут определяться собственные коды. При получении кода, который не может распознать, агент интерпретирует его в соответствии с диапазоном, к которому этот код принадлежит. Коды в диапазонах 100-199, 200-299 и 300-399 большинство Web-броузеров обрабатывают без извещения пользователя, а некоторые коды ошибок из диапазонов 400-499, 500-599 отображаются для пользователя.
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(); Но когда этот метод вызывается, я получаю:
что я должен делать?
Сортировка: Активность 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.var request = (HttpWebRequest) HttpWebRequest.Create(requestUri); request.Headers.Add("x-ms-version", "2012-08-01"); request.Method = "POST"; request.ContentType = "application/xml";
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 методы. для более подробной информации нажмите Мы часто говорим, ошибка 404, ошибка 403, 301, ошибка 503 и друг друга отлично понимаем. И примерно понимаем, что нужно делать в данной ситуации. Данная статья направлена на тех, кто только начинает во всё этом разбираться, чтобы мы все могли говорить на одном языке. Что такое код ответа сервераНа каждый запрос пользователя сервер дает определенный ответ. На стороне пользователя браузер анализирует этот ответ и понимает, что делать дальше: прогружать страницу сайта, давать запрет на доступ, или перенаправлять пользователя на . Именно по кодам ответа ищутся на сайте . Это самый простой и надежный способ. Какие бывают коды ответаКоды ответа делятся по числовым значениям
Информационные ответы (1xx):
Успешная обработка запроса (2xx):
Переадресация (3xx):
Ошибки выполнения запроса (4xx):
Ошибки сервера (5xx):
Что делать при возникновении ошибокНекоторые ошибки являются временными (например, 503), а некоторые делают работу сайта невозможной. |