При работе с веб-ресурсами возникают ситуации, когда происходит удаление, перенос или изменение url-адреса отдельных страниц или сайта целиком. При этом требуется сохранить индексацию в поисковых системах и перенаправить пользовательский трафик на новый адрес. Для решения этой задачи используется функция под названием 301 Redirect. Это один из инструментов SEO, который позволяет не только избежать ошибок при открытии отдельных страниц, но и добиться корректной работы ресурса. Правильные настройки редиректа дают дополнительную возможность получить синергетический эффект в поисковой оптимизации и увеличить количество органического трафика на релевантные страницы. Рассмотрим более подробно, как происходит настройка редиректа 301.
- Что такое переадресация 301
- Альтернативные методы переадресации
- В каких случаях используется постоянный редирект 301
- Создание постоянной переадресации 301 через настройки и плагины CMS
- Настройка 301 редирект в. htaccess
- Склейка зеркал сайта (www / без www)
- Редирект с http на https для всего сайта
- Постранично
- Для одной страницы
- Редирект сайта с https на http
- Изменение домена
- Редирект на страницу с другим url (без параметров)
- Редирект для url (с параметрами)
- Редирект с index.php на главную страницу
- Редирект со страниц со слешем на без слеша (для всего сайта)
- Редирект со страниц без слеша на слеш (для всего сайта)
- 301 редирект с 404 Not Found
- Финальный вид файла .htaccess
- Синтаксис для регулярных выражений в .htaccess
- Другие способы создания переадресации 301
- Через PHP
- ASP-редирект
- ASP.NET редирект
- ColdFusion редирект
- JSP (Java) редирект
- CGI-скрипт на PERL
- Ruby on Rails
- Редирект в Nginx
- HTML-редирект
- Редирект 301 в панелях управления сервера
- Cpanel
- ISPmanager
- Автоматическое создание переадресации
- Проверка корректности настроек 301 редиректа
- Заключение
- ExamplesEdit
- Using an .htaccess file
- Using programming languages
- See alsoEdit
- ReferencesEdit
- 1xx informational response
- 2xx success
- 3xx redirection
- 4xx client errors
- 5xx server errors
Что такое переадресация 301
Permanent Redirect 301 применяется с целью организации постоянной переадресации с неактуального доменного адреса или url отдельной страницы на рабочую версию. Редирект может понадобиться в связи с глобальным переносом сайта на другой домен, техническими изменениями в написании адреса, удалением страниц, необходимостью внутренней и внешней перелинковки. Один из вариантов использования перманентной переадресации – редирект с нескольких доменных имен, созданных в разных зонах, на один актуальный адрес. Грамотное использование редиректа позволяет перемещать контент без потерь в поисковой индексации, сохранить и даже увеличить прежний вес и позицию в выдаче.
Настроить код состояния HTTP 301 можно разными способами:
с помощью HTML и PHP;
через панель управления или плагины соответствующей CMS;
при помощи специальных скриптов (программ);
на уровне хостинг-провайдера;
внесением соответствующих записей в файлы .htaccess для сервера Apache или web.config для IIS.
Последний способ является наиболее простым и надежным. О нем чуть позже поговорим подробнее.
Альтернативные методы переадресации
- Редирект 302. Применяется в случае временной переадресации с одного url на другой. При его использовании поисковая система индексирует все доступные версии сайта или страницы. Объединения ссылочного веса и внутренних метрик на приоритетном ресурсе не происходит.
- 307 Temporary Redirect рекомендуется применять в исключительных случаях. Например, при техническом обслуживании сайта, когда он недоступен некоторое время.
- Обновления Meta Refresh выполняют переадресацию не на уровне сервера, а непосредственно на сайте. Пользователь сталкивается с временной задержкой (обычно около пяти секунд), после чего для перехода на нужную страницу должен принудительно запустить определенную команду. Этот метод часто приводит к падению посетительского интереса и проседанию поисковых индексов.
- Редирект rel=«canonical». Позволяет сохранить доступ посетителям ресурса к контенту дублирующихся страниц. При этом для поисковиков наличие команды canonical на одной из страниц говорит о том, что только она подлежит индексации в поиске.
В большинстве случаев постоянная переадресация является более правильным решением, чем временная. На практике это объясняется просто. Предположим, сайт сменил доменную зону, а затем еще и обзавелся защищенным протоколом https. При настройке временной переадресации в индексе Яндекса и Google по одним и тем же запросам появились три версии сайта с пропорциональным проседанием позиций в выдаче. После настройки редиректа 301 на приоритетный url произошло склеивание дублей, робот вернул сайт в топ выдачи.
Не рекомендуется использовать постоянный редирект при временном переносе сайта или наличии серьезных проблем со старым доменным именем. Если адрес забанен или попал под поисковую фильтрацию, смена дислокации с применением переадресации не поможет избавиться от этих ограничений.

В каких случаях используется постоянный редирект 301
Смена доменного имени, перенос сайта. Необходимо произвести тотальную настройку переадресации со старого адреса на новый, чтобы все без исключения запросы к old_site.ru перенаправлялись на new_site.ru.
Изменение написания url определенных страниц в целях SEO-продвижения, смены CMS или по иным причинам. Требуется настроить редирект с site.ru/1hdkr5 на site.ru/page_adress.
Перенос разделов на субдомены. Необходимо сменить адрес www.site.ru/example на example.site.ru.
Для аккумуляции трафика с адресов, купленных в разных доменных зонах, на один приоритетный ресурс.
Исключение дублирующихся страниц из индекса.
Склейка зеркал сайта – вариантов сайта с идентичным контентом, но разным написанием адресов: site.ru, www.site.ru, https://site1.ru и т.д. В этом случае выбирается один приоритетный домен и на него настраивается редирект со всех остальных зеркал.
Удаление ранее существовавшей страницы. В этом случае пользователи обычно видят ошибку 404. Большое количество таких сообщений негативно воспринимается как пользователями, так и поисковиками.
Для быстрого перехода пользователя на мобильную версию ресурса со смартфонов и планшетных устройств.
Создание постоянной переадресации 301 через настройки и плагины CMS
В большинстве популярных конструкторов сайтов и CMS (OpenCart, Joomla!, Битрикс, Wix, Тильда) предусмотрена настройка редиректов с помощью встроенных инструментов. Если сайт создан с помощью WordPress, для настройки переадресации можно воспользоваться следующими плагинами:
Настроить Permanent Redirect 301 в Вордпресс можно и через редактирование файла .htaccess в разделе управления хостингом. Чтобы подключиться к нему, потребуется использовать FTP-клиент. Сама кодировка производится по общим правилам настройки переадресации в .htaccess.
Чтобы настроить 301 редирект в CMS OpenCart в файле .htaccess необходимо прописать:
RewriteCond %{QUERY_STRING} ^_route_=адрес_старой_страницы.html$
RewriteRule ^(.*)$ http://ваш_домен.ru/новой_страницы/? [R=301,L]Для Битрикс кодировка будет выглядеть следующим образом:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.sng-it.ru$ [NC]
RewriteRule ^(.*)$ http://sng-it.ru/$1 [R=301,L]В Joomla настройки переадресации производятся через панель администратора в разделе «Компоненты» => «Перенаправление». Здесь можно не только установить правила редиректа, но и отслеживать страницы с битыми ссылками и перенаправлять их на корректные адреса.
С конструкторами сайтов все не так однозначно. Например, один из наиболее популярных CMS-конструкторов WIX не предоставляет возможности создания файла .htaccess.
Но настроить редирект 301 довольно просто в базовом редакторе.
Настройка 301 редирект в. htaccess
Файл с расширением .htaccess – это дополнительный конфигурационный файл web-сервера Apache. Его используют для настройки веб-сервера, а также для обработки различных URL-адресов.
Для настройки 301 редиректа в файле .htaccess чаще всего применяют одну из трех директив: Redirect, RedirectMatch или RewriteRule. Директивы относятся только к папке, где размещен .htaccess, а оттуда распространяются на дочерние папки.
Найти файл можно через панель управления хостинга либо использовать FTP-клиент. При любом варианте нужно включить отображение скрытых файлов.
Для создания 301 редиректа перейдите в панель управления вашего сайта.
Проверьте наличие .htaccess файла в корневом каталоге сайта (public_html, если используете WordPress). Если файл отсутствует, создайте его.
Рекомендуем все условия редирект записывать в блоке IfModule, дабы избежать ошибок при выполнении файла htaccess.
<IfModule mod_rewrite.c> </IfModule>
Перед тем как начать прописывать правила перенаправления, необходимо включить механизм преобразований (RewriteEngine) при помощи команды RewriteEngine On.
Разберем наиболее распространенные варианты создания 301 редиректа через .htaccess.
Склейка зеркал сайта (www / без www)
Сайты http://name.site и http://www.name.site для поисковых систем являются разными. А по факту это разные адреса одного сайта.
В поисковой системе сайт по одному адресу будет проиндексирован, а по второму адресу зафиксирован как дубль, что может повлиять на продвижение ресурса. Для избегания дублей необходимо сделать так называемую «склейку» сайта, то есть прописать 301 редирект в .htaccess.
Если изначально в индекс поисковой системы попала версия «с www», в файл .htaccess добавляется редирект на «без www»:
RewriteCond %{HTTP_HOST} ^www.name\.site$ [NC]
RewriteRule ^(.*)$ http://name.site/$1 [R=301,L]Если произошла обратная ситуация и необходима переадресация с без «www» на «www», то в файл прописывается:
RewriteCond %{HTTP_HOST} ^v name\.site$ [NC]
RewriteRule ^(.*)$ http://www.name.site/$1 [R=301,L]Редирект с http на https для всего сайта
В случае перехода на защищенный протокол https для всего сайта, необходимо настроить перенаправление с http на https. Для этого в файл .htaccess добавьте:
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]Если данная конструкция не сработает, попробуйте другой вариант:
RewriteCond %{HTTPS} =on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]Если редирект не работает и в этом случае, попробуйте такой вариант:
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} =/page.php
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]В результате пройдет перенаправление на https всех пользователей и поисковых систем.
Постранично
Бывают случаи, когда необходимо создать редирект на https всех страниц, кроме одной. В этом случае используют постраничный редирект:
RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} !^/page.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]Для одной страницы
Для редиректа с http на https одной страницы (например page.php), в файл добавьте следующую конструкцию:
RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} =/page.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]Редирект сайта с https на http
Если необходимо сделать 301 редирект всего сайта с https на http, в файл прописывается следующее:
RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://name.site/$1 [R=301,L]Изменение домена
В том случае. если необходимо перейти на другой домен, при этом сохранив SEO-позиции, в файл .htaccess прописывают следующее:
RewriteCond %{HTTP_HOST} ^www\.old_name\.ru$ [NC]
RewriteRule ^(.*)$ http://new_name.ru/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^old_name\.ru$ [NC]
RewriteRule ^(.*)$ http://new_name.ru/$1 [L,R=301]Редирект на страницу с другим url (без параметров)
Иногда возникает ситуация, когда необходимо изменить url страницы, то есть перенести данные с одной страницы на другую страницу, при этом не потеряв вес страниц. В этом случае в файл .htaccess прописывают следующее:
RewriteRule ^(.*)old_page.html$ http://vash-sait.ru/new_page.html [R=301,L]
Редирект для url (с параметрами)
Если адрес содержит параметр (например, http://name.site/articles.php?section=1, где параметром является «section=1» ), то прописывают следующую конструкцию:
RewriteCond %{QUERY_STRING} section=1
RewriteRule ^index.php http://name.site/articles.php? [R=301,L]Редирект с index.php на главную страницу
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://name.site/ [R=301,L]Редирект со страниц со слешем на без слеша (для всего сайта)
Для избегания дублей в файле .htaccess используют следующую конструкцию:
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteRule ^(.*)\/$ /$1 [R=301,L]Или более короткий вариант:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]Редирект со страниц без слеша на слеш (для всего сайта)
Обратный вариант применяется, когда нужно использовать адреса со слешем.
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]301 редирект с 404 Not Found
Код 404 Not Found (страница не найдена) присваивается удаленной или несуществующей странице на сайте. Создание постоянного перенаправления с таких страниц актуально для контентных сайтов и крупных интернет-магазинов, где страницы часто удаляются по естественным причинам. Тогда возникает потребность перенаправить посетителей на одну из главных страниц сайта, чтобы они не уходили с ресурса при виде ошибки.
301 редирект для страниц 404 Not Found сделать совсем не сложно. Например, этот код перенаправит со всех 404-страниц на главную:
ErrorDocument 404 http://www.site.com/301.html
Однако делать такие редиректы в массовом порядке не рекомендуется, так как это может испортить SEO-статистику всего ресурса.
Финальный вид файла .htaccess
Пример файла htaccess, после добавления в него редиректов:
Options -Indexes
ErrorDocument 404 /404.php
php_flag register_globals off
php_value pcre.recursion_limit 1000
#Условия 301 редиректа
<IfModule mod_rewrite.c>
RewriteEngine On
# склейка зеркал
RewriteCond %{HTTP_HOST} ^my_site\.ru
RewriteRule ^(.*)$ https://my_site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^my_site\.ru
RewriteRule ^(.*)$ https://my_site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.my_site\.ru
RewriteRule ^(.*)$ https://my_site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.my_site.ru$ [NC]
RewriteRule ^(.*)$ https://my_site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.my_site\.ru
RewriteRule ^(.*)$ https://my_site.ru/$1 [R=301,L]
# без слеша
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]
</IfModule>
php_value default_charset utf-8
AddType 'text/html; charset=utf-8' .html .htm .shtmlСинтаксис для регулярных выражений в .htaccess
Важно учитывать, что настройка редиректа путем редактирования файла .htaccess доступна исключительно для веб-серверов Apache.
Другие способы создания переадресации 301
Через PHP
Данный вариант подойдет тем, кто хорошо разбирается в web-программировании и PHP. Необходимо открыть файл index.php в корне CMS-движка и прописать там:
if($_SERVER['REQUEST_URI'] == "/index.php") { header("Location: /",TRUE,301); exit();
}(в первой строке укажите старый url, а во второй — новый)
Второй способ — перенаправление при помощи отправки заголовков (скрипта):
<?php header("HTTP/1.1 301 Moved Permanently"); header("Location: http://www.newdomain.ru/newdir/newpage.htm"); exit();
?>ASP-редирект
<%@ Language=VBScript %> <% Response.Status="301 Moved Permanently" Response.AddHeader "Location", "http://www.new-url.com" response.end %>
ASP.NET редирект
Найдите в корне своего сайта файл web.config и вставьте в секцию синтаксис:
<script runat="server"> private void Page_Load(object sender, System.EventArgs e) { Response.Status = "301 Moved Permanently"; Response.AddHeader("Location","http://www.new-url.com"); }
</script>ColdFusion редирект
<.cfheader statuscode="301″ statustext="Moved permanently"> <.cfheader name="Location" value="http://www.new-url.com">
JSP (Java) редирект
Данный способ подойдет для небольшой корректировки простых сайтов. Код можно прописать лишь в одном файле, а сам файл добавить на все нужные страницы, указав:
<script type="text/javascript" src="redirect.js"></script> <script type="text/javascript"> location="https://yandex.ru"; </script>
CGI-скрипт на PERL
$q = new CGI;
print $q->redirect("http://www.new-url.com/");Ruby on Rails
def old_action headers["Status"] = "301 Moved Permanently" redirect_to "http://www.new-url.com/" end
Редирект в Nginx
if ($host = 'www.domain.com' ) { rewrite ^(.*)$ http://domain.com$1 permanent;
}HTML-редирект
Этот способ подойдет для небольших статических сайтов, когда требуется настроить переадресацию для одной страницы. Для этого необходимо добавить специальный мета-тег внутри кода HTML. Пример записи редиректа на другой ресурс после 5-секундной задержки:
<meta http-equiv="refresh" content="5;https://livepage.pro">
Если поставить значение 0 вместо 5, то переадресация на https://livepage.pro произойдет моментально.
Однако для больших сайтов HTML-перенаправление делать сложно и затратно по времени, поэтому лучше отдать предпочтение другому варианту.
Редирект 301 в панелях управления сервера
Большинство панелей управления сервера предоставляют возможность настройки переадресации с кодом 301. Рассмотрим варианты решения этой задачи на примере двух популярных ПУ для VDS.
Cpanel
Нужно перейти в блок «Домены» => «Перенаправления». В появившемся окне выполнить следующее:
В строке «Тип» выбрать «Постоянный 301».
В строке «https://www» из выпадающего списка выбрать домен сайта (например, example.ru).
В строке «Перенаправляет на» указать для домена адрес http://example.ru.
В блоке «Перенаправление www» поставить галочку напротив «Перенаправлять только с www».
Сохранить изменения кликом на «Добавить».
ISPmanager
В этой панели можно вручную править файлы nginx.config или .htaccess, но есть и встроенный механизм переадресации. Например, для настройки редиректа на https/http нужно снять галочку с соответствующего пункта в разделе «WWW-домены».
Автоматическое создание переадресации
При отсутствии знаний и опыта самостоятельной настройки редиректа можно воспользоваться сервисами автоматической генерации:
Проверка корректности настроек 301 редиректа
Самый простой способ проверки переадресации – ручное тестирование. Для этого необходимо вставить в адресную строку браузера url сайта или страницы, с которой настроено перенаправление. Если при открытии будет доступен ресурс, на который настроен редирект, то переадресация выполняется правильно.
Для автоматической проверки можно воспользоваться специальными сервисами:
Существует ряд ошибок, которые следует избегать при настройке редирект 301:
использование перенаправлений между страницами сайта без изменения их url в ссылках;
установка временной переадресации вместо постоянной;
неправильный выбор типа редиректа;
перенаправление файла robots.txt;
непонимание разницы между rel=canonical и кодом 301;
редирект на нерелевантный контент;
переадресация, которая не приводит к 200-й странице.
Стоит отметить проблему создания цепочки ссылок, которая может привести к появлению циклического редиректа — ошибки с кодом «ERR_TOO_MANY_REDIRECTS». Наиболее распространенные причины возникновения такого бага – неправильная настройка в процессе создания переадресации, вирусная атака, слишком длинная цепочка редиректов. Не рекомендуется настраивать редирект, содержащий более пяти адресов. Оптимальной является прямая переадресация со старого на новый url.
Заключение
Использование редиректа 301– очень важный способ поисковой и пользовательской оптимизации веб-ресурса. Использовать его следует с осторожностью. Неправильная настройка может привести к сбоям в работе сайта и потере поисковых позиций.
Инструментов для настройки корректной работы Permanent Redirect 301 существует достаточно много. Наиболее удобный и правильный – внесение записей в файл .htaccess. Недостаток этого метода в том, что он доступен только для веб-серверов Apache. При использовании IIS придется настраивать web.config. Для создания сложных правил переадресации более всего подходит PHP, но в этом случае без помощи программиста не обойтись. Еще одним вариантом настройки 301 редиректа может быть обращение к хостинг-провайдеру с целью подключения услуги web-форвардинга.
Пробовал GET. Получаю 301. Думаю, постом большего не узнаю. А как все-таки получить HTTPЗапрос’ом или иным способом страницу «hotline.ua/foto/fotoapparaty». Дайте, пожалуйста, пример!!!
301 это редирект
(1) я так понимаю, след оборван? Может неправильны заголовки для запроса?
(2) в ответе 301 должен быть указан новый адрес страницы
вот что выдает ответ
Значение элемента Тип элемента Ключ Значение
КлючИЗначение КлючИЗначение «Date» «Wed, 15 Jul 2015 08:17:10 GMT»
КлючИЗначение КлючИЗначение «Content-Type» «text/html»
КлючИЗначение КлючИЗначение «Connection» «keep-alive»
КлючИЗначение КлючИЗначение «Content-Length» «178»
КлючИЗначение КлючИЗначение «Location» «http://hotline.ua/foto/fotoapparaty»;
КлючИЗначение КлючИЗначение «Server» «nginx»
где тут адрес редиректа?
надо через отладчик смотреть, этот сайт действительно первым ответом 301 выдаёт
веб-отладчик, не 1С
так адрес писать надо
со слешем в конце
Заголовки = Новый Соответствие();
Заголовки.Вставить(«host», «http://hotline.ua»;);
HTTPЗапрос = Новый HTTPЗапрос(«/foto/fotoapparaty/», Заголовки);
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
вернее в первом случае «http://www.hotline.ua»;
301 Moved Permanently — запрошенный документ был окончательно перенесен на новый URI, указанный в поле Location заголовка. Некоторые клиенты некорректно ведут себя при обработке данного кода. Появился в HTTP/1.0.
Решено!
Правильное решения для данного сайта
Заголовки = Новый Соответствие();
Заголовки.Вставить(«host», «hotline.ua»);
HTTPЗапрос = Новый HTTPЗапрос(«foto/fotoapparaty/», Заголовки);
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
Всем спасибо за помощь!
Инструменты разработчика в Хроме, закладка Network, галка Preserve log, и вбивай нужный адрес. Оно тебе всю подноготную выдаст.
(14) Странно, вот эту строчку
1С должен сам делать, по крайней мере все нормальные клиенты ее сами к запросу добавляют.
(14) А почему не по старинке
HTTPСоединение = Новый HTTPСоединение(«hotline.ua»);
HTTPЗапрос = Новый HTTPЗапрос(«foto/fotoapparaty/»);
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
Сообщить(HTTPОтвет.ПолучитьТелоКакСтроку());
(18) Ох, как конкретно!
Спасибо. Пригодится однозначно!
Доброго времени суток. имеем на борту УПП 1.3. Руководство решило делать интеграцию с сайтом откуда получать данные по апи
Постман на такую конструкцию дает json ответ http://www.domain.com/api/v2/fam/?categories=253&language=ru
При попытке реализовать это в коде вылетает 301 код как это решить не пойму. Пробовал разными способами все равно 301 код.
Спасибо на подсказку
301 это редирект. Тебе нужно прочитать ответ, взять оттуда урл и пойти по нему.
(2) не обязательно
обычно достаточно сделать httpS вместо просто http
(3) Так в урле ответа и будет хтппс.
(3) HTTPСоединение = Новый HTTPСоединение(«domain.com/api»,443, , , , , Новый ЗащищенноеСоединениеOpenSSL);
так соединение даю
(5) «domain.com/api» — ошибка
https://github.com/vbondarevsky/Connector
В том числе — автоматическое разрешение редиректов.
(7) сначала загляни и посмотри все ли оно коды/статусы http обрабатывает
(8) у тебя ошибка
HTTPСоединение = Новый HTTPСоединение(«domain.com»,, , , , , Новый ЗащищенноеСоединениеOpenSSL);
а вот запрос уже «/api»
(10) Спасибо поправлю отпишусь
(10) HTTPЗапрос = Новый HTTPЗапрос(«/api/v2/families»); типа такого?
(9) Если есть что сказать — не держи в себе.
(11) поправил но все равно 301 код location в ответе https://www.domain.com/api/v2/families
(13) в свое время пришлось эту недолибу допиливать
так что я все сказал
(14) ну так посмотри что в ответе
и код уже покажи весь
(17)+ имхо ошибся где то
(15) Хотя бы в комментариях на инфостарте тогда отписался о найденных тобой проблемах, раз уж пул реквест было лень делать. Вот таким бы мы тебя любили, вот таким бы мы тебя хвалили.
(20) нахер
слишком много недолиб разных, в каждой отписываться бесплатно не готов
ну так www добавь
(22) и такой прикол может быть да
криво записи настроили
(10) Коллега а по моему вопросу что лучше сделать? спасибо
(24) польше кода
(25) да хоть листинг нишиша не выходит
(27) нам отсюда не видно, что ты там творишь
Больше кода.
Если в редиректе передан url отличный от запрашиваемого,то идем по нему,отдельно,желательно,все пройденные класть в массив,чтобы при циклических редиректах не было проблем или ограничивать их применение каким-то количеством,как делает браузер.
Что сложного ?
Если нет понимания,то знакомство с библиотекой еще более деструктивно пройдет.
(26) ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ПроверятьСтруктуру = Ложь;
ЗаписьJSON.УстановитьСтроку();
СтруктураЗапроса = Новый Структура;
СтруктураЗапроса.Вставить(«categories__id»,»253″);
СтруктураЗапроса.Вставить(«language»,»ru»);
ЗаписатьJSON(ЗаписьJSON,СтруктураЗапроса);
СтрокаJSON = ЗаписьJSON.Закрыть();
HTTPСоединение = Новый HTTPСоединение(URL,443, , , , , Новый ЗащищенноеСоединениеOpenSSL);
HTTPЗапрос = Новый HTTPЗапрос(«/api/v2/families»);
HTTPЗапрос.Заголовки.Вставить(«Content-type», «application/json»);
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Сообщить(«»+HTTPОтвет.КодСостояния+» «+HTTPОтвет.ПолучитьТелоКакСтроку());
Если HTTPОтвет.КодСостояния = 301 тогда
НовыйАдрес = HTTPОтвет.Заголовки.Получить(«Location»);
ПолучитьДанныеСветовыНаСервере(Лев(НовыйАдрес,25));
КонецЕсли;
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(HTTPОтвет.ПолучитьТелоКакСтроку());
Структура = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
URL в начале приходит «domain.com»
(33) «domain.com» это не реальное имя сайта..свой ресурс
(32) >HTTPСоединение = Новый HTTPСоединение(URL,443, , , , , Новый ЗащищенноеСоединениеOpenSSL);
убери порт 443
писал же тебе
(35) просто
HTTPСоединение = Новый HTTPСоединение(URL, , , , , , Новый ЗащищенноеСоединениеOpenSSL);
SSL/TLS которое HTTPS (обычно по умолчанию 443 порт) может быть на любом порту даже на обычном 80 где обычно просто HTTP
(33) и да
>при этом постман http://www.domain.com/api/v2/families/?categories__id=253&language=ru отрабатывает как надо
это у тебя GET или POST?
«?categories__id=253&language=ru» — это json в теле или параметры в url?
Короче или попроси рабочий пример под 1С
Или разберись уже сам со всеми технологиями чтобы в них не путаться
Или найми спеца за денежку
(33) В подобных случаях (постман отрабатывает как надо) ставишь fiddler и играешь в «найди 20 отличий».
Хотя если там в самом деле редирект, то вероятно постман его разруливает. Можно попробовать посмотреть в инструментах отладки браузера.
(33) ну и где ты ?categories__id=253&language=ru задал ?
Правильно, нигде
после получения редиректа, ты должен вот сюда запихать:
HTTPЗапрос = Новый HTTPЗапрос(«/api/v2/families?categories__id=253&language=ru»);
ну там, синтаксис со слешами поправь тока..
(45) Очевидно, вызываются всякие «ВопросСветовомуМужуНаСервере()»
(38) «»?categories__id=253&language=ru» — это json в теле или параметры в url?» — параметры в url
(48) Я так и делаю
(49) постман через http
(51) где это в коде у тебя ?
(54) в теле
СтруктураЗапроса = Новый Структура;
СтруктураЗапроса.Вставить(«categories__id»,»253″);
СтруктураЗапроса.Вставить(«language»,»ru»);
(55) попробуйте вытащить это дело из тела и впихнуть в урл. У вас ГЕТ или ПОСТ запрос? Скорее всего ГЕТ, попробуйте явно вызвать без тела, просто строчку урл явно через Ответ=Соединение.ВызватьМетод(«GET»,Запрос);
(50) а вот
HTTPСоединение.ОтправитьДляОбработки
это POST
HTTPСоединение = Новый HTTPСоединение(www.domain.com);
HTTPЗапрос = Новый HTTPЗапрос(«/api/v2/families/?categories__id=253&language=ru»);
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
Проверяй, потом сам раскидаешь как надо.
(59)+ URL в кавычках, разумеется
(59) и ssl в соединении, если это https
(61) он вроде писал что в постмане он по HTTP стучался и там всё ок
(60) еще может надо без www писать, просто «domain.com»
(58) любой запрос в т.ч. GET имеет тело
и туда можно засунуть параметры (хотя логичней в заголовки)\
другой вопрос что не любой софт может засунуть и не любой понять-вытащить засунутые
1С может кстати
(59) кодСостояния 301
(65) так а в заголовках что? Location что пишет?
(65) покажи уже тело ответа при этом 301
и все заголовки
(64) в большинстве своем для гет запросов тело не нужно. Все передается в заголовках
(68) это просто так общепринято
не значит что нельзя
(65) пробовали без www?
http по сути сделан по аналогии с html
ну и добавили сверху методы, причем только «В версии HTTP 0.9 использовался только метод GET»
Метод HTTP (англ. HTTP Method) — последовательность из любых символов, кроме управляющих и разделителей, указывающая на основную операцию над ресурсом. Обычно метод представляет собой короткое английское слово, записанное заглавными буквами. Обратите внимание, что название метода чувствительно к регистру.
Сервер может использовать любые методы, не существует обязательных методов для сервера или клиента. Если сервер не распознал указанный клиентом метод, то он должен вернуть статус 501 (Not Implemented). Если серверу метод известен, но он неприменим к конкретному ресурсу, то возвращается сообщение с кодом 405 (Method Not Allowed). В обоих случаях серверу следует включить в сообщение ответа заголовок Allow со списком поддерживаемых методов.
Кроме методов GET и HEAD, часто применяется метод POST.
(67) <!DOCTYPE HTML PUBLIC «-//IETF//DTD HTML 2.0//EN»>¶<html><head>¶<title>301 Moved Permanently</title>¶</head><body>¶<h1>Moved Permanently</h1>¶<p>The document has moved <a data-hren=»https://www.domain.com/api/v2/families/?categories__id=253&language=ru»>here</a>.</p>¶</body></html>¶
(73) сделай уже
URL = "www.domain.com";
HTTPСоединение = Новый HTTPСоединение(URL, , , , , , Новый ЗащищенноеСоединениеOpenSSL);
HTTPЗапрос = Новый HTTPЗапрос("/api/v2/families/?categories__id=253&language=ru");
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
Сообщить(""+HTTPОтвет.КодСостояния+" "+HTTPОтвет.ПолучитьТелоКакСтроку());
(76) еще можно попробовать принудительно https на 80 порту
HTTPСоединение = Новый HTTPСоединение(URL, 80, , , , , Новый ЗащищенноеСоединениеOpenSSL);
(75) теперь меняй первую строчку на защищённое соединение как написано в (76) 🙂
(74) HTTPСоединение = Новый HTTPСоединение(«ltcompany.com»);
HTTPЗапрос = Новый HTTPЗапрос(«/api/v2/families/?categories__id=253&language=ru»);
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
Если HTTPОтвет.КодСостояния = 301 Тогда
НовыйАдрес = HTTPОтвет.Заголовки.Получить(«Location»);
НовыйАдрес1 = (Лев(НовыйАдрес,25));
HTTPСоединение = Новый HTTPСоединение(НовыйАдрес1,,,,,,Новый ЗащищенноеСоединениеOpenSSL());
HTTPЗапрос = Новый HTTPЗапрос(«/api/v2/families/?categories__id=253&language=ru»);
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
а=0;
КонецЕсли;
а=0;
Так сделал и ничего
(76) 500 <html>
<head>
<title>Internal Server Error</title>
</head>
<body>
<h1><p>Internal Server Error</p></h1>
«categories__id» точно с двумя «_»
(79) >НовыйАдрес1 = (Лев(НовыйАдрес,25));
ты понимаешь что это пипец?
потому что «https://www.domain.com/api/v2/families/?categories__id=253&language=ru» это в location
и там будет левое «https://»
(84) в смысле левое?
(77) вообще завис
(86) а через постман все норм
(88) скрин постмана с настройками скиньте
(85) HTTPСоединение = Новый HTTPСоединение(«ltcompany.com»); // правильно
а вот
HTTPСоединение = Новый HTTPСоединение(«https://www.ltcompany.com»); // не правильно для 1С
1С сама добавляет http или https в зависимости есть или нет ,Новый ЗащищенноеСоединениеOpenSSL()
тот кто писал апишку для сайта, уточните у него следующие вопросы:
1) защищенное ли соединение
2) какой порт
3) какой метод получения данных
4) какие заголовки нужны для запроса (тот же content type, в том числе и аунтификация)
5) работает на внешку, или только во внутреннем контуре
6) какие параметры обязательны для конкретного запроса и где их указывать (в урл, или в теле)
(92) у меня с этого сайта не работают скрины. Можете через https://ru.imgbb.com/ закинуть ссылку или через яндекс/гугл диск ссылку
(92) еще не только Params а еще Headers покажи
(95) там 6 чего то
(80) вероятно чего то не хватает
т.е. код (76) правильный но надо дозаполнить Заголовки
(96) пустые поля
- If a client has link-editing capabilities, it should update all references to the Request URL.
- The response is cacheable unless indicated otherwise.
- Unless the request method was HEAD, the entity should contain a small hypertext note with a hyperlink to the new URL(s).
- If the 301 status code is received in response to a request of any type other than GET or HEAD, the client must ask the user before redirecting.
ExamplesEdit
Using an .htaccess file
To fix problems with non-existing files or directories using a distributed .htaccess file:
/
Here is an example using a .htaccess file to redirect a non-secure URL to a secure address without the leading «www»:
%{HTTPS} %{HTTP_HOST} ^www\.(.*)$ [NC] ^(.*)$ http://%1/$1 [R=301,L] %{HTTPS} %{HTTP_HOST} ^www\.(.*)$ [NC] ^(.*)$ https://%1/$1 [R=301,L] %{SERVER_PORT} ^(.*)$ https://example.com/$1 [R,L]
A custom directory redirect, using an index.html file:
Home
Using programming languages
Here is an example using Perl CGI.pm:
Here is an example using a PHP redirect:
Here is one way to redirect using Express.js:
Equivalently simple for an nginx configuration:
See alsoEdit
ReferencesEdit
- Fielding; et al. (June 1999). 10.3.2 301 Moved Permanently. IETF. p. 61. sec. 10.3.2. doi:. RFC 2616.
- «Site Move Tool». Bing Webmaster Help & How-to.
- «301 redirects». Google Webmaster Tools Help.
This is a list of Hypertext Transfer Protocol (HTTP) response status codes. Status codes are issued by a server in response to a client’s request made to the server. It includes codes from IETF Request for Comments (RFCs), other specifications, and some additional codes used in some common applications of the HTTP. The first digit of the status code specifies one of five standard classes of responses. The optional message phrases shown are typical, but any human-readable alternative may be provided, or none at all.
Unless otherwise stated, the status code is part of the HTTP standard (RFC 9110).
All HTTP response status codes are separated into five classes or categories. The first digit of the status code defines the class of response, while the last two digits do not have any classifying or categorization role. There are five classes defined by the standard:
- 1xx informational response – the request was received, continuing process
- 2xx successful – the request was successfully received, understood, and accepted
- 3xx redirection – further action needs to be taken in order to complete the request
- 4xx client error – the request contains bad syntax or cannot be fulfilled
- 5xx server error – the server failed to fulfil an apparently valid request
1xx informational response
- 100 Continue
- The server has received the request headers and the client should proceed to send the request body (in the case of a request for which a body needs to be sent; for example, a POST request). Sending a large request body to a server after a request has been rejected for inappropriate headers would be inefficient. To have a server check the request’s headers, a client must send
Expect: 100-continueas a header in its initial request and receive a100 Continuestatus code in response before sending the body. If the client receives an error code such as 403 (Forbidden) or 405 (Method Not Allowed) then it should not send the request’s body. The response417 Expectation Failedindicates that the request should be repeated without theExpectheader as it indicates that the server does not support expectations (this is the case, for example, of HTTP/1.0 servers).[2] - 101 Switching Protocols
- The requester has asked the server to switch protocols and the server has agreed to do so.
- 102 Processing (WebDAV; RFC 2518)
- A WebDAV request may contain many sub-requests involving file operations, requiring a long time to complete the request. This code indicates that the server has received and is processing the request, but no response is available yet. [3] This prevents the client from timing out and assuming the request was lost. The status code is deprecated.[4]
- 103 Early Hints (RFC 8297)
- Used to return some response headers before final HTTP message.[5]
2xx success
- 200 OK
- Standard response for successful HTTP requests. The actual response will depend on the request method used. In a GET request, the response will contain an entity corresponding to the requested resource. In a POST request, the response will contain an entity describing or containing the result of the action.
- 201 Created
- The request has been fulfilled, resulting in the creation of a new resource.[6]
- 202 Accepted
- The request has been accepted for processing, but the processing has not been completed. The request might or might not be eventually acted upon, and may be disallowed when processing occurs.
- 203 Non-Authoritative Information (since HTTP/1.1)
- The server is a transforming proxy (e.g. a Web accelerator) that received a 200 OK from its origin, but is returning a modified version of the origin’s response.[7][8]
- 204 No Content
- The server successfully processed the request, and is not returning any content.
- 205 Reset Content
- The server successfully processed the request, asks that the requester reset its document view, and is not returning any content.
- 206 Partial Content
- The server is delivering only part of the resource (byte serving) due to a range header sent by the client. The range header is used by HTTP clients to enable resuming of interrupted downloads, or split a download into multiple simultaneous streams.
- 207 Multi-Status (WebDAV; RFC 4918)
- The message body that follows is by default an XML message and can contain a number of separate response codes, depending on how many sub-requests were made.[9]
- 208 Already Reported (WebDAV; RFC 5842)
- The members of a DAV binding have already been enumerated in a preceding part of the (multistatus) response, and are not being included again.
- 226 IM Used (RFC 3229)
- The server has fulfilled a request for the resource, and the response is a representation of the result of one or more instance-manipulations applied to the current instance.[10]
3xx redirection
- 300 Multiple Choices
- Indicates multiple options for the resource from which the client may choose (via agent-driven content negotiation). For example, this code could be used to present multiple video format options, to list files with different filename extensions, or to suggest word-sense disambiguation.
- 301 Moved Permanently
- This and all future requests should be directed to the given URI.
- 302 Found (Previously «Moved temporarily»)
- Tells the client to look at (browse to) another URL. The HTTP/1.0 specification (RFC 1945) required the client to perform a temporary redirect with the same method (the original describing phrase was «Moved Temporarily»),[12] but popular browsers implemented 302 redirects by changing the method to GET. Therefore, HTTP/1.1 added status codes 303 and 307 to distinguish between the two behaviours.[11]
- 303 See Other (since HTTP/1.1)
- The response to the request can be found under another URI using the GET method. When received in response to a POST (or PUT/DELETE), the client should presume that the server has received the data and should issue a new GET request to the given URI.
- 304 Not Modified
- Indicates that the resource has not been modified since the version specified by the request headers If-Modified-Since or If-None-Match. In such case, there is no need to retransmit the resource since the client still has a previously-downloaded copy.
- 305 Use Proxy (since HTTP/1.1)
- The requested resource is available only through a proxy, the address for which is provided in the response. For security reasons, many HTTP clients (such as Mozilla Firefox and Internet Explorer) do not obey this status code.
- 306 Switch Proxy
- No longer used. Originally meant «Subsequent requests should use the specified proxy.»
- 307 Temporary Redirect (since HTTP/1.1)
- In this case, the request should be repeated with another URI; however, future requests should still use the original URI. In contrast to how 302 was historically implemented, the request method is not allowed to be changed when reissuing the original request. For example, a POST request should be repeated using another POST request.
- 308 Permanent Redirect
- This and all future requests should be directed to the given URI. 308 parallel the behaviour of 301, but does not allow the HTTP method to change. So, for example, submitting a form to a permanently redirected resource may continue smoothly.
4xx client errors
- 400 Bad Request
- The server cannot or will not process the request due to an apparent client error (e.g., malformed request syntax, size too large, invalid request message framing, or deceptive request routing).
- 401 Unauthorized
- Similar to 403 Forbidden, but specifically for use when authentication is required and has failed or has not yet been provided. The response must include a WWW-Authenticate header field containing a challenge applicable to the requested resource. See Basic access authentication and Digest access authentication. 401 semantically means «unauthorised», the user does not have valid authentication credentials for the target resource.
- Some sites incorrectly issue HTTP 401 when an IP address is banned from the website (usually the website domain) and that specific address is refused permission to access a website.[]
- 402 Payment Required
- Reserved for future use. The original intention was that this code might be used as part of some form of digital cash or micropayment scheme, as proposed, for example, by GNU Taler,[14] but that has not yet happened, and this code is not widely used. Google Developers API uses this status if a particular developer has exceeded the daily limit on requests.[15] Sipgate uses this code if an account does not have sufficient funds to start a call.[16] Shopify uses this code when the store has not paid their fees and is temporarily disabled.[17] Stripe uses this code for failed payments where parameters were correct, for example blocked fraudulent payments.[18]
- 403 Forbidden
- The request contained valid data and was understood by the server, but the server is refusing action. This may be due to the user not having the necessary permissions for a resource or needing an account of some sort, or attempting a prohibited action (e.g. creating a duplicate record where only one is allowed). This code is also typically used if the request provided authentication by answering the WWW-Authenticate header field challenge, but the server did not accept that authentication. The request should not be repeated.
- 404 Not Found
- The requested resource could not be found but may be available in the future. Subsequent requests by the client are permissible.
- 405 Method Not Allowed
- A request method is not supported for the requested resource; for example, a GET request on a form that requires data to be presented via POST, or a PUT request on a read-only resource.
- 406 Not Acceptable
- The requested resource is capable of generating only content not acceptable according to the Accept headers sent in the request. See Content negotiation.
- 407 Proxy Authentication Required
- The client must first authenticate itself with the proxy.
- 408 Request Timeout
- The server timed out waiting for the request. According to HTTP specifications: «The client did not produce a request within the time that the server was prepared to wait. The client MAY repeat the request without modifications at any later time.»
- 409 Conflict
- Indicates that the request could not be processed because of conflict in the current state of the resource, such as an edit conflict between multiple simultaneous updates.
- 410 Gone
- Indicates that the resource requested was previously in use but is no longer available and will not be available again. This should be used when a resource has been intentionally removed and the resource should be purged. Upon receiving a 410 status code, the client should not request the resource in the future. Clients such as search engines should remove the resource from their indices. Most use cases do not require clients and search engines to purge the resource, and a «404 Not Found» may be used instead.
- 411 Length Required
- The request did not specify the length of its content, which is required by the requested resource.
- 412 Precondition Failed
- The server does not meet one of the preconditions that the requester put on the request header fields.
- 413 Payload Too Large
- The request is larger than the server is willing or able to process. Previously called «Request Entity Too Large» in RFC 2616.[19]
- 414 URI Too Long
- The URI provided was too long for the server to process. Often the result of too much data being encoded as a query-string of a GET request, in which case it should be converted to a POST request. Called «Request-URI Too Long» previously in RFC 2616.[20]
- 415 Unsupported Media Type
- The request entity has a media type which the server or resource does not support. For example, the client uploads an image as image/svg+xml, but the server requires that images use a different format.
- 416 Range Not Satisfiable
- The client has asked for a portion of the file (byte serving), but the server cannot supply that portion. For example, if the client asked for a part of the file that lies beyond the end of the file. Called «Requested Range Not Satisfiable» previously RFC 2616.[21]
- 417 Expectation Failed
- The server cannot meet the requirements of the Expect request-header field.[22]
- 418 I’m a teapot (RFC 2324, RFC 7168)
- This code was defined in 1998 as one of the traditional IETF April Fools’ jokes, in RFC 2324, Hyper Text Coffee Pot Control Protocol, and is not expected to be implemented by actual HTTP servers. The RFC specifies this code should be returned by teapots requested to brew coffee.[23] This HTTP status is used as an Easter egg in some websites, such as Google.com’s «I’m a teapot» easter egg.[24][25][26] Sometimes, this status code is also used as a response to a blocked request, instead of the more appropriate 403 Forbidden.[27][28]
- 421 Misdirected Request
- The request was directed at a server that is not able to produce a response (for example because of connection reuse).
- 422 Unprocessable Entity
- The request was well-formed but was unable to be followed due to semantic errors.[9]
- 423 Locked (WebDAV; RFC 4918)
- The resource that is being accessed is locked.[9]
- 424 Failed Dependency (WebDAV; RFC 4918)
- The request failed because it depended on another request and that request failed (e.g., a PROPPATCH).[9]
- 425 Too Early (RFC 8470)
- Indicates that the server is unwilling to risk processing a request that might be replayed.
- 426 Upgrade Required
- The client should switch to a different protocol such as TLS/1.3, given in the Upgrade header field.
- 428 Precondition Required (RFC 6585)
- The origin server requires the request to be conditional. Intended to prevent the ‘lost update’ problem, where a client GETs a resource’s state, modifies it, and PUTs it back to the server, when meanwhile a third party has modified the state on the server, leading to a conflict.[29]
- 429 Too Many Requests (RFC 6585)
- The user has sent too many requests in a given amount of time. Intended for use with rate-limiting schemes.[29]
- 431 Request Header Fields Too Large (RFC 6585)
- The server is unwilling to process the request because either an individual header field, or all the header fields collectively, are too large.[29]
- 451 Unavailable For Legal Reasons (RFC 7725)
- A server operator has received a legal demand to deny access to a resource or to a set of resources that includes the requested resource.[30] The code 451 was chosen as a reference to the novel Fahrenheit 451 (see the Acknowledgements in the RFC).
5xx server errors
The server failed to fulfil a request.
- 500 Internal Server Error
- A generic error message, given when an unexpected condition was encountered and no more specific message is suitable.
- 501 Not Implemented
- The server either does not recognize the request method, or it lacks the ability to fulfil the request. Usually this implies future availability (e.g., a new feature of a web-service API).
- 502 Bad Gateway
- The server was acting as a gateway or proxy and received an invalid response from the upstream server.
- 503 Service Unavailable
- The server cannot handle the request (because it is overloaded or down for maintenance). Generally, this is a temporary state.[31]
- 504 Gateway Timeout
- The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.
- 505 HTTP Version Not Supported
- The server does not support the HTTP version used in the request.
- 506 Variant Also Negotiates (RFC 2295)
- Transparent content negotiation for the request results in a circular reference.[32]
- 507 Insufficient Storage (WebDAV; RFC 4918)
- The server is unable to store the representation needed to complete the request.[9]
- 508 Loop Detected (WebDAV; RFC 5842)
- The server detected an infinite loop while processing the request (sent instead of 208 Already Reported).
- 510 Not Extended (RFC 2774)
- Further extensions to the request are required for the server to fulfil it.[33]
- 511 Network Authentication Required (RFC 6585)
- The client needs to authenticate to gain network access. Intended for use by intercepting proxies used to control access to the network (e.g., «captive portals» used to require agreement to Terms of Service before granting full Internet access via a Wi-Fi hotspot).[29]

