1c http сервисы ошибка 406

22.04.2016

Повышение производительности веб-сервисов

Реализовано в версии 8.3.9.1818.

В версии 8.3.9 мы выполнили значительное количество задач по оптимизации разных механизмов платформы. Здесь хочется рассказать об одной из них. Это повышение производительности веб-сервисов.

Переиспользование сеансов

Недостаточная производительность веб-сервисов объяснялась тем, что каждый вызов веб-сервиса имел значительные накладные расходы на создание и завершение сеанса. Причём при создании каждый раз выполнялся обработчик УстановкаПараметровСеанса(), который в типовой конфигурации может быть довольно «тяжёлым».

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

В версии 8.3.9 мы доработали механизм веб-сервисов (SOAP-сервисы, HTTP-сервисы, сервисы OData). В результате их производительность увеличилась примерно в 10 раз.

Мы проводили тесты на типовой конфигурации Бухгалтерия предприятия. В неё мы добавили HTTP-сервисы, выполняющие выборку из справочника Контрагенты. Тест заключался в том, что клиент выполнял последовательно 100 обращений к сервису. В старом режиме работы для этого потребовалось 29,9 с. В новых режимах работы в среднем 3 с.

Этих результатов удалось достичь за счёт того, что мы реализовали две различные стратегии, обеспечивающие переиспользование сеансов:

  • Автоматическое переиспользование сеансов из пула;
  • Управление сеансами с помощью HTTP-заголовков.

При автоматическом переиспользовании сеансов клиент не имеет возможности влиять на количество сеансов и время их жизни. Ему просто автоматически выделяется сеанс из существующего пула сеансов. Такая стратегия подходит для высоконагруженных публичных сервисов, к которым обращаются клиенты, выполняющие шаблонные операции, и обладающие унифицированными привилегиями.

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

Другой пример это получение/помещение файлов в конфигурации Документооборот посредством http-сервисов. Для таких операций можно использовать одного и того же специального пользователя.

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

Средства управления

Необходимость использования одной или другой стратегии вы можете определить в дереве объектов конфигурации, и, при необходимости, переопределить в файле публикации default.vrd. В дереве объектов конфигурации мы добавили два новых свойства объектам Web-сервис и HTTP-сервис:

  • ПовторноеИспользованиеСеансов может принимать значения ИспользоватьАвтоматически, Использовать, НеИспользовать. Значение ИспользоватьАвтоматически включает автоматическое переиспользование сеансов из пула, а значение Использовать включает управление сеансами с помощью HTTP-заголовков.
  • В свойстве ВремяЖизниСеанса вы можете указать, сколько секунд будет бездействовать сеанс до того, как платформа завершит его автоматически.

В файле default.vrd для элементов, описывающих SOAP-сервисы, HTTP-сервисы и сервисы OData, мы ввели несколько новых атрибутов:

  • reuseSessions – аналог свойства ПовторноеИспользованиеСеансов, может принимать значения autouse, use и dontuse;
  • sessionMaxAge — аналог свойства ВремяЖизниСеанса;
  • poolTimeout — используется при автоматическом управлении сеансами, содержит время ожидания доступности сеанса;
  • poolSize — используется при автоматическом управлении сеансами, содержит максимальное количество сеансов, которое может быть создано в пуле.

Например, файл default.vrd может выглядеть так:

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://testserver/Demo83"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/demo"
ib="Srvr=&quot;tcp://Server&quot;;Ref=&quot;demo&quot;;"
enable="false"
allowexecutescheduledjobs="force"
enableStandardOData="true">

<standardOdata enable="true" reuseSessions="use" sessionMaxAge ="20" poolTimeout="5" poolSize="10"/>
<ws>
<point name="OperationalData1" alias="OperData" reuseSessions="use" sessionMaxAge="20" poolTimeout="5" poolSize="10"/>
</ws>
<httpServices>
<service name="ПримерРаботы" enable="true" reuseSessions ="autouse" sessionMaxAge="20" poolTimeout="5" poolSize="10"/>
</httpServices>
<pool size="50" maxAge="10" attempts="2"/>
</point>

Файл default.vrd имеет больший приоритет, чем конфигурация. При публикации конфигурации атрибуты reuseSessions и sessionMaxAge заполняются из соответствующих свойств объектов конфигурации Web-сервис и HTTP-сервис. Но при необходимости вы можете изменить эти значения прямо в файле, и тогда платформа будет использовать их, а не значения из конфигурации.

Автоматическое переиспользование сеансов

Сеансы в пуле хранятся в разрезе типа сервиса, наименования сервиса, пользователя/пароля, значений разделителей и безопасного режима. Причём в пуле может быть несколько сеансов с одинаковыми значениями перечисленных реквизитов.

При вызове платформа проверяет, есть ли простаивающий сеанс с подходящим сочетанием этих реквизитов. Если такой сеанс есть, то он выделяется для обработки вызова. Если такого сеанса нет, то создается новый сеанс и выделяется для обработки.

Сеанс автоматически завершается по истечении периода бездействия (ВремяЖизниСеанса).

Если достигнуто максимальное количество сеансов (poolSize), то вызов ждет указное время (poolTimeout). Если за это время подходящий сеанс не освободился, то возвращается ошибка со статусом 406 Not Acceptable.

Настройки автоматического пула сеансов действуют в рамках публикации. Это значит, что если у вас есть несколько публикаций для одной и той же информационной базы, то при вызове действуют те параметры, которые указаны в публикации, к которой обращается текущий вызов. Таким образом, если в одной публикации для сервиса указан лимит в 3 сеанса, а в другой публикации 5, то общее количество сеансов, которое может быть создано для вашей информационной базы равняется сумме этих значений 8.

При выборе размера пула следует учитывать все разрезы, в которых хранятся сеансы в пуле. Мы рекомендуем устанавливать размер пула немного больше, чем количество возможных вариантов. Это позволит вам избежать ситуации, когда пул заполнен сеансами, и вызов с новой комбинацией разделителей/пользователей обработан быть не может.

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

Управление сеансами

Инициатором создания и завершение сеанса является клиент сервиса. Чтобы создать постоянный сеанс клиент должен передать заголовок IBSession в http – запросе. Этот заголовок вы устанавливаете вручную. Значением этого заголовка должна быть директива start.

POST http://testserver/Demo83/ws/ws2.1cws HTTP/1.1
…
Connection: Keep-Alive
Content-Type: text/xml;charset="utf-8"
SOAPAction: http://testserver/Demo83/ws2#Web      1:        1
IBSession: start
Content-Length: 182
…

После получения такого заголовка на сервере стартует сеанс информационной базы, происходит аутентификация, установка разделителей и вызывается обработчик УстановкаПараметровСеанса().

Если клиент затребовал создание сеанса, а сервер не может это сделать, генерируется сообщение об ошибке 406 Not Acceptable.

Если всё хорошо и сеанс создан, платформа помещает в http-ответ директиву установки куки IBSession с идентификатором созданного сеанса.

HTTP/1.1 200 OK
Date: Thu, 02 Apr 2015 06:31:11 GMT
Server: Apache/2.0.65 (Win32)
Content-Length: 357
Keep-Alive: timeout=15, max=100
Set-Cookie: IBSession=43CD8102-F970-4FFB-939A-C47948F49885
Connection: Keep-Alive
Content-Type: text/xml;charset="utf-8"

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<m:Операция1Response xmlns:m="http://testserver/Demo83/ws2">
<m:return xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">true</m:return>
</m:Операция1Response>
</soap:Body>
</soap:Envelope>

Для подключения ранее созданного сеанса, вам необходимо указать куки IBSession с идентификатором сеанса.

HTTP/1.1 200 OK
Date: Thu, 02 Apr 2015 06:31:12 GMT
Server: Apache/2.0.65 (Win32)
Content-Length: 357
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Cookie: IBSession=43CD8102-F970-4FFB-939A-C47948F49885
Content-Type: text/xml;charset="utf-8"

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<m:Операция1Response xmlns:m="http://testserver/Demo83/ws2">
<m:return xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">true</m:return>
</m:Операция1Response>
</soap:Body>
</soap:Envelope>

Для завершения сеанса вам нужно использовать заголовок IBSession http-запроса. Его нужно установить в директиву finish.

POST http://testserver/Demo83/ws/ws2.1cws HTTP/1.1

Connection: Keep-Alive
Content-Type: text/xml;charset="utf-8"
SOAPAction: http://testserver/Demo83/ws2#Web 1: 1
IBSession: finish
Content-Length: 182

Получив сообщение с таким заголовком, сервер отрабатывает вызов, и закрывает сеанс.

Эта стратегия позволяет вам реализовать сценарии, в которых используется состояние сеанса, сохранённое на сервере. Потому что вы имеете уникальный идентификатор сеанса. Единственное, о чём нужно помнить, что завершение сеанса может происходить не только по вашей «команде», но и автоматически. В том случае, когда превышен период бездействия сеанса (ВремяЖизниСеанса). Поэтому вы, как клиент сервиса, должны быть готовы к тому, что сеансовые данные могут быть сброшены, если сеанс завершен.

Веб-сервисы в расширениях

Если объекты конфигурации Web-сервис или HTTP-сервис располагается в расширении конфигурации, то возможность редактировать свойства ПовторноеИспользованиеСеансов и ВремяЖизниСеанса у вас отсутствует. Поэтому, если вы хотите включить автоматическое или ручное переиспользование сеансов, вам нужно использовать для этого файл default.vrd.

В дальнейшем мы будем рассматривать возможность поддержки этих свойств в расширениях.

Теги:
веб-сервисы 
производительность 
расширения 
8.3.9 

Здравствуйте.

Ситуация следующая. Собрал конфигурацию из базовых подсистем БСП, дописал свои объекты, создал Web-сервис, при первой публикации Web-сервис работал без ошибок, потребовалось внести незначительные изменения, стал выдавать ошибку:

Ошибка работы с Интернет:  запрос не допустим для заданного ресурса (406). <?xml version=»1.0″ encoding=»UTF-8″?><?xml-stylesheet type=»text/xsl» href=»http://nipi-1c-00/1c83_WorkHours/e1csys/vrscore/exception.xslt?sysver=8.3.10.2650″?><exception xmlns=»http://v8.1c.ru/8.2/virtual-resource-system»; xmlns:xs=»http://www.w3.org/2001/XMLSchema»; xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»; xsi:type=»Exception» clsid=»580392e6-ba49-4280-ac67-fcd6f2180121″ reason=»406″><descr xmlns=»http://v8.1c.ru/8.1/data/core»>Истекло время ожидания сеанса</descr></exception>

по причине:

Ошибка работы с Интернет:  запрос не допустим для заданного ресурса (406)

Перезагрузил сервер, все нормализовалось, теперь снова потребовалось внести изменения в конфигураторе, теперь уже не в самом Web-сервис, сохранил конфигурацию, опять ошибка, все смотрел не могу понять, самое интересное, что при этом типовой Web-сервис от БСП работает, а мой — нет.

Прошу помощи есть предположения, куда смотреть?

Часть 2. Тестирование и отладка HTTP-сервиса с помощью SoapUI

Разработаем HTTP-сервис, который по уникальному идентификатору номенклатуры будет возвращать остаток этой номенклатуры на складе. HTTP-сервис должен отвечать следующим требованиям:

  1. Формат запроса и ответа — JSON;
  2. Запрос принимается методом POST;
  3. В заголовках запроса должна присутствовать информация о клиенте (клиент — другая информационная система);
  4. Сервис должен быть версионируемым (что бы клиенты не страдали от изменений в сервисе, а по возможности переходили на следующую версию).

Первым делом, создаем HTTP-сервис HTTPСервисОстатки, в корневом URL указываем значение balance.

Рисунок 1. Основные свойства http-сервиса

В шаблонах URL добавляем шаблон /nomenclature/{version} под именем Номенклатура. В шаблоне имеется параметр version, который заключен в фигурные скобки, он нам нужен, что бы выполнить требование №4 (см. рисунок 2).

Рисунок 2. Шаблон URL

Для шаблона добавляем HTTP-метод POST и создаем обработчик для этого метода, это требование №2 (см. рисунок 3).

Рисунок 3. HTTP-метод POST

В разрабатываемый HTTP-сервис закладываем две версии — первая будет доступна по url: /nomenclature/v1 и вторая по url: /nomenclature/v2. Первая версия будет работать только с одним уникальным идентификатором номенклатуры, а вторая версия с массивом уникальных идентификаторов. Структура JSON-строки запроса и ответа для каждой версии приведены в таблице ниже.

/nomenclature/v1 /nomenclature/v2
Запрос
{
  "Период": "",
  "UUID": ""
}
      
{
  "Период": "",
  "UUID": []
}
      
Ответ
{
  "Версия": 0,
  "НаДату": "",
  "Остаток": 0
}
      
{
   "Версия": 0,
   "НаДату": "",
   "Остатки": [
     {
      "UUID": "",
      "Остаток": 0
     }
   ],
   "Резерв": null
}
      

Приступим к программной реализации обработчика HTTP-метода POST.

Если клиент обращается к неизвестной версии HTTP-сервиса, то необходимо об этом как-то ему сообщить, да что бы было понятно в чем дело, поэтому для выполнения требования №4, не достаточно ввести параметр version в шаблон URL, его значение нужно дополнительно анализировать в обработчике HTTP-метода. В случае неизвестного значения  возвращаем в ответ ошибку 404 с описанием причины, что такой URL серверу неизвестен или версия сервиса неизвестна.

	
// Определение запрашиваемой версии сервиса.
// Если версия не известна, то отклоняем запрос с описанием причины.
ДопустимыеВерсииСервиса	= "v1,v2";
ВерсияСервиса = Запрос.ПараметрыURL["version"];
Если СтрРазделить(ДопустимыеВерсииСервиса, ",").Найти(ВерсияСервиса) = Неопределено Тогда 
    Ответ = Новый HTTPСервисОтвет(404);
    Ответ.УстановитьТелоИзСтроки(НСтр("ru = 'Версия не существует'"));
    Возврат Ответ;
КонецЕсли;
  

Что бы выполнить требование №1, проверяем в заголовках HTTP-запроса наличие заголовка Content-Type, его значение должно равняться application/json. Это стандартный заголовок и один из самых известных, используется для определения типа передаваемых данных. Если данный заголовок будет отсутствовать, то по умолчанию считаем что пришли данные типа текст в формате JSON, иначе анализируем значение заголовка и принимаем решение, если это не текстовые данные в формате JSON, выкидываем в ответ ошибку с кодом 415.

	
// Чтение значения заголовка Content-Type.
// Если значение заголовка не соответствует допустимому,
// то отклоняем запрос с описанием причины.
ТипДопустимогоКонтента = "application/json";
ContentType = Запрос.Заголовки.Получить("Content-Type");
Если ContentType <> Неопределено Тогда
    Если СтрНайти(ContentType, ТипДопустимогоКонтента) = 0 Тогда 
        Ответ = Новый HTTPСервисОтвет(415);
        Ответ.УстановитьТелоИзСтроки(НСтр("ru = 'Ожидаемый формат - JSON'"));
        Возврат Ответ;
    КонецЕсли;
КонецЕсли;
  

Что бы выполнить требование №3, проверяем в заголовках HTTP-запроса наличие заголовка Client-Name-1C, это собственный заголовок, мы его придумали сами и используем для своих целей, допустим, фиксируем в журнале регистрации значение заголовка. Наличие данного заголовка обязательно, если он отсутствует, то выкидываем в ответ ошибку с кодом 406.

	
// Чтение обязательного заголовка Client-Name-1C.
ClientName1C = Запрос.Заголовки.Получить("Client-Name-1C");
Если ClientName1C = Неопределено Тогда
    Ответ = Новый HTTPСервисОтвет(406);
    Ответ.УстановитьТелоИзСтроки(НСтр("ru = 'Отсутствует обязательный заголовок'"));
    Возврат Ответ;
Иначе 
    // Запись в журнал регистрации о клиенте.
    // ...
КонецЕсли;
  

Теперь самое основное, реализуем логику работы HTTP-сервиса. Получаем тело HTTP-запроса как строку, в нашем случает это JSON-строка (см. требование №1). Что бы было удобно работать с данными, которые содержит в себе JSON-строка, читаем JSON-строку в коллекцию значений. Спасибо разработчикам платформы 1С за процедуры и функции по работе с JSON, которые появились в версии 8.3.

	
// Читаем тело запроса как JSON-строку.
СтроковоеТело = Запрос.ПолучитьТелоКакСтроку();
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтроковоеТело);
// Когда задана функция восстановления, то третий параметр игнорируется, хотя в СП написано наоборот.
ДанныеЗапроса = ПрочитатьJSON(ЧтениеJSON, , , , "ФункцияВосстановленияЗначений", РаботаJSON);
ЧтениеJSON.Закрыть();
  

Для каждой версии HTTP-сервиса (см. требование №4) пишем код в соответствии с логикой работы каждой версии. В первой версии работаем с одним уникальным идентификатором, во второй с массивом. Данные для ответа формируем в виде коллекции значений.

ДанныеОтвета = Новый Структура;
Если ВерсияСервиса = "v1" Тогда 

    // Обрабатываем запрос.
    Период = ДанныеЗапроса.Период;
    Номенклатура = Справочники.Номенклатура.ПолучитьСсылку(ДанныеЗапроса.UUID);

    // Выполняем расчет остатков.
    // ...
		
    // Формируем ответ.
    ДанныеОтвета.Вставить("Версия", 1.04);
    ДанныеОтвета.Вставить("НаДату", Период);
    ДанныеОтвета.Вставить("Остаток", 10);

ИначеЕсли ВерсияСервиса = "v2" Тогда

    // Обрабатываем запрос.
    Период = ДанныеЗапроса.Период;
    СписокНоменклатур = Новый Массив;
    Для Каждого ТекЭлемент Из ДанныеЗапроса.UUID Цикл 
        СписокНоменклатур.Добавить(Справочники.Номенклатура.ПолучитьСсылку(ТекЭлемент));
    КонецЦикла;

    // Выполняем расчет остатков.
    // ...

    ОстаткиПоНоменклатурам = Новый Массив;
    Для Каждого ТекЭлемент Из СписокНоменклатур Цикл 
        Остаток = Новый Структура("UUID,Остаток", ТекЭлемент.УникальныйИдентификатор(), 10);
        ОстаткиПоНоменклатурам.Добавить(Остаток);
    КонецЦикла;

    // Формируем ответ.
    ДанныеОтвета.Вставить("Версия", 2.15);
    ДанныеОтвета.Вставить("НаДату", Период);
    ДанныеОтвета.Вставить("Остатки", ОстаткиПоНоменклатурам);

КонецЕсли;
  

Сформированные данные для ответа записываем в JSON-строку, на основании которой создаем HTTP-ответ с кодом 200. В заголовках HTTP-ответа обязательно указываем заголовок Content-Type, что бы клиент точно знал тип данных и их формат в ответе.

	
// Сохраняем ответ в формате JSON-строки.
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеОтвета, , "ФункцияПреобразованияЗначений", РаботаJSON);	
СтроковоеТело = ЗаписьJSON.Закрыть();

// Отвечаем.
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type", ТипДопустимогоКонтента + "; charset=utf-8");
Ответ.УстановитьТелоИзСтроки(СтроковоеТело);
  

В запросе и ответе участвуют уникальные идентификаторы. Проблема в том, что 1Сные процедуры и функции по работе с JSON не умеют преобразовывать уникальный идентификатор из строки в тип УникальныйИдентификатор и обратно, но их этому можно научить. Делается это с помощью параметра ИмяФункцииПреобразования для процедуры ЗаписатьJSON и с помощью параметра ИмяФункцииВосстановления для процедуры ПрочитатьJSON. Реализацию функций для перечисленных параметров рассматривать не будем, так как это выходит за рамки создания HTTP-сервиса.

Полный код обработчика для метода POST:

	
Функция ШаблонURLМетодPOST(Запрос)
    
    // Определение запрашиваемой версии сервиса.
    // Если версия неизвестна, то отклоняем запрос с описанием причины.
    ДопустимыеВерсииСервиса = "v1,v2";
    ВерсияСервиса = Запрос.ПараметрыURL["version"];
    Если СтрРазделить(ДопустимыеВерсииСервиса, ",").Найти(ВерсияСервиса) = Неопределено Тогда 
        Ответ = Новый HTTPСервисОтвет(404);
        Ответ.УстановитьТелоИзСтроки(НСтр("ru = 'Версия не существует'"));
        Возврат Ответ;
    КонецЕсли;
    
    // Чтение значения заголовка Content-Type.
    // Если значение заголовка не соответствует допустимому,
    // то отклоняем запрос с описанием причины.
    ТипДопустимогоКонтента = "application/json";
    ContentType = Запрос.Заголовки.Получить("Content-Type");
    Если ContentType <> Неопределено Тогда
        Если СтрНайти(ContentType, ТипДопустимогоКонтента) = 0 Тогда 
            Ответ = Новый HTTPСервисОтвет(415);
            Ответ.УстановитьТелоИзСтроки(НСтр("ru = 'Ожидаемый формат - JSON'"));
            Возврат Ответ;
        КонецЕсли;
    КонецЕсли;
    
    // Чтение обязательного заголовка Client-Name-1C.
    ClientName1C = Запрос.Заголовки.Получить("Client-Name-1C");
    Если ClientName1C = Неопределено Тогда
        Ответ = Новый HTTPСервисОтвет(406);
        Ответ.УстановитьТелоИзСтроки(НСтр("ru = 'Отсутствует обязательный заголовок'"));
        Возврат Ответ;
    Иначе 
        // Запись в журнал регистрации о клиенте.
        // ...
    КонецЕсли;
    
    // Читаем тело запроса как JSON-строку.
    СтроковоеТело = Запрос.ПолучитьТелоКакСтроку();
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(СтроковоеТело);
    // Когда задана функция восстановления, то третий параметр игнорируется, хотя в СП написано наоборот.
    ДанныеЗапроса = ПрочитатьJSON(ЧтениеJSON, , , , "ФункцияВосстановленияЗначений", РаботаJSON);
    ЧтениеJSON.Закрыть();
    
    ДанныеОтвета = Новый Структура;
    Если ВерсияСервиса = "v1" Тогда 
        
        // Обрабатываем запрос.
        Период = ДанныеЗапроса.Период;
        Номенклатура = Справочники.Номенклатура.ПолучитьСсылку(ДанныеЗапроса.UUID);
        
        // Выполняем расчет остатков.
        // ...
        
        // Формируем ответ.
        ДанныеОтвета.Вставить("Версия", 1.04);
        ДанныеОтвета.Вставить("НаДату", Период);
        ДанныеОтвета.Вставить("Остаток", 10);
        
    ИначеЕсли ВерсияСервиса = "v2" Тогда
        
        // Обрабатываем запрос.
        Период = ДанныеЗапроса.Период;
        СписокНоменклатур = Новый Массив;
        Для Каждого ТекЭлемент Из ДанныеЗапроса.UUID Цикл 
            СписокНоменклатур.Добавить(Справочники.Номенклатура.ПолучитьСсылку(ТекЭлемент));
        КонецЦикла;
        
        // Выполняем расчет остатков.
        // ...
        
        ОстаткиПоНоменклатурам = Новый Массив;
        Для Каждого ТекЭлемент Из СписокНоменклатур Цикл 
            Остаток = Новый Структура("UUID,Остаток", ТекЭлемент.УникальныйИдентификатор(), 10);
            ОстаткиПоНоменклатурам.Добавить(Остаток);
        КонецЦикла;
        
        // Формируем ответ.
        ДанныеОтвета.Вставить("Версия", 2.15);
        ДанныеОтвета.Вставить("НаДату", Период);
        ДанныеОтвета.Вставить("Остатки", ОстаткиПоНоменклатурам);
        
    КонецЕсли;
    
    // Задаем настройки для записи коллекции значений в JSON-строку.
    НастройкиСериализацииJSON = Новый НастройкиСериализацииJSON;
    НастройкиСериализацииJSON.ВариантЗаписиДаты                 = ВариантЗаписиДатыJSON.ЛокальнаяДатаСоСмещением;
    НастройкиСериализацииJSON.СериализовыватьМассивыКакОбъекты  = Ложь;
    НастройкиСериализацииJSON.ФорматСериализацииДаты            = ФорматДатыJSON.ISO;
    
    // Сохраняем ответ в формате JSON-строки.
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, ДанныеОтвета, НастройкиСериализацииJSON, "ФункцияПреобразованияЗначений", РаботаJSON); 
    СтроковоеТело = ЗаписьJSON.Закрыть();
    
    // Отвечаем.
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type", ТипДопустимогоКонтента + "; charset=utf-8");
    Ответ.УстановитьТелоИзСтроки(СтроковоеТело);    
    
    Возврат Ответ;
    
КонецФункции
  

Код состояния HTTP — это часть строки заголовка, ответа веб сервера на запрос клиента, информирующая о результате запроса и о том, что клиент должен предпринять далее

Код состояния HTTP — это часть строки заголовка, ответа веб сервера на запрос клиента, информирующая о результате запроса и о том, что клиент должен предпринять далее. Думаю не все знают как выглядит заголовок ответа сервера, зато уверен, каждый, пользующийся интернетом, не раз сталкивались, со страницей 404 Not Found или 403 Forbadden. Это и есть, видимый пользователю результат, выдачи сервером, того или иного кода статуса в строке заголовке.

Коды состояния HTTP, разделены на 5 категорий. Клиент может быть не знаком с тем или иным кодом ответа HTTP, однако он должен отреагировать согласно категории кода. Итак протокол HTTP поддерживает следующие коды статуса, разделенные по категориям:

1xx: Information — информационные

100 Continue — Продолжать.
Сервер доволен данными в запросе клиента, можно продолжать передачу заголовков. Появился в протоколе версии HTTP/1.1.
101 Switching Protocols — Переключение протоколов.
Сервер предлагает выбрать другой протокол, более соответствующий данному ресурсу. Протоколы предлагаемый сервером, указываются в строке заголовка Update, если предложенный сервером протокол, устраивает клиента, он высылает новый запрос с указанием нового протокола. Появился в протоколе версии HTTP/1.1.
102 Processing — Обрабатывается.
Используется в протоколе WebDAV, работающем поверх HTTP протокола. Данный код статуса информирует клиента о том, что запрос принят, но на его обработку может понадобится определенное время, что-бы он ( клиент ), не сбрасывал соединение. Клиент в этом случае должен обнулить таймер и ожидать следующей команды.

2xx: Success — Успешное завершение

200 OK — Хорошо.
Запрос к ресурсу выполнен успешно. Данные, запрошенные клиентом, находятся в заголовке и/или в теле ответа. Появился в протоколе версии HTTP/1.0.
201 Created — Создано.
Запрос выполнен успешно, новый ресурс создан. В ответе сервера, в заголовке Location, указывается местоположение созданного ресурса. Кроме того, серверу рекомендуется указывать характеристики созданного ресурса, в заголовке ответа. Появился в протоколе версии HTTP/1.0.
202 Accepted — Принято.
Запрос принят, но еще в обработке. Появился в протоколе версии HTTP/1.0.
203 Non-Authoritative Information — Информация из неавторитетного источника.
Аналогично коду 200, но в данном случае информация может быть неактуальной, так как взята не из первоисточника. Появился в протоколе версии HTTP/1.1.
204 No Content — Отсутствует содержимое.
Сервер успешно обработал запрос, но не вернул содержимого. Появился в протоколе версии HTTP/1.0.
205 Reset Content — Сбросить содержимое.
Сервер успешно обработал запрос, но не вернул содержимого. В отличии от кода 204, данный код, требует от клиента, сбросить представление документа. Появился в протоколе версии HTTP/1.1.
206 Partial Content — Часть содержимого.
Сервер вернул результат запроса клиентом, части содержимого, с помощью заголовка range. Используется для докачки файлов или для многопоточной закачки. Появился в протоколе версии HTTP/1.1.
207 Multi-Status — Многостатусный.
Возвращаемое сервером тело сообщения, представляет из себя XML документ со статусами выполнения нескольких подзапросов. Используется в протоколе WebDAV.
226 IM Used — Использовано IM
Расширение HTTP для поддержки «дельта кодирования» ( delta encoding ). Заголовок A-IM принят, данные возвращаются согласно установленным параметрам.

3xx: Redirection — Редирект ( перенаправление )

Коды данной категории, сообщают клиенту, что для завершения запроса, ему необходимо выполнить дополнительный запрос, как правило по другому URI, соответствующий адрес указывается в строке Location, ответа сервера. Программа — клиент может совершать дополнительные запросы без участия пользователя, при условии что дополнительный запрос делается методами GET или HEAD.

Некоторые клиенты некорректно работают с редиректами 301 и 302, применяя в запросе ко второму ресурсу метод GET, несмотря на то, что первый запрос был сделан с использованием другого метода. В протоколеHTTP версии 1.1, вместо ответа статуса 302, были введены дополнительные коды ответов, 303 и 307. Изменять метод, необходимо только в случает ответа сервера со статусом 303, в остальных случаях использовать исходный метод.

300 Multiple Choices — Несколько вариантов выбора.
По запрошенному URI, существует несколько вариантов ресурса, различных по MIME типу. языку или другим признакам. В ответе сервера, передается список альтернатив, выбираемый клиентским приложением автоматически или самим пользователем. Появился в протоколе версии HTTP/1.0.
301 Moved Permanently — Перемещёно окончательно.
Запрошенный ресурс был окончательно перемещен на URI, указанный в строке заголовка Location, ответа сервера. Некоторые клиенты, при обработке данного кода, ведут себя некорректно, см. выше. Появился в протоколе версии HTTP/1.0.
302 Found — Найдено ( Moved Temporarily )
Данный код статуса сообщает клиенту, что ресурс временно доступен по другому URI, указанному в строке заголовка Location, заголовка ответа сервера. Данный код используется например, при согласовании содержимого ( Content Negotiation ), выполняемого сервером. Появился в протоколе версии HTTP/1.0.
303 See Other — Смотреть другое.
Документ из запрошенного URI, нужно запросить по адресу, указанному в строке заголовка Location, заголовка ответа сервера, используя метод GET, невзирая на то, каким методом был сделан первый запрос. Появился в протоколе версии HTTP/1.1.
304 Not Modified — Не изменялось.
Данный код выдается в случае запроса документа, методом GET, с использованием заголовков If-Modified-Since или If-None-Match, и документ не был изменен с указанного момента времени. Появился в протоколе версии HTTP/1.0.
305 Use Proxy — Использовать прокси сервер.
Запрос к ресурсу, должен выполняться через прокси-сервер., адрес которого, указан в строке заголовка Location, заголовка ответа сервера. Появился в протоколе версии HTTP/1.1.
307 Temporary Redirect — Временное перенаправление
Запрошенный ресурс временно доступен по URI, указанному в строке заголовка Location, заголовка ответа сервера. Появился в протоколе версии HTTP/1.1.

4xx: Client Error — Ошибка клиента

Коды данной категории служат для указание на ошибку со стороны клиента. При использовании любых методов запроса, кроме HEAD, сервера возвращает пользователю гипертекстовое пояснение по данной ошибке.

400 Bad Request — Плохой запрос.
Из-за синтаксической ошибки, запрос не был понят сервером. Появился в протоколе версии HTTP/1.0.
401 Unauthorized — Не авторизован.
Ресурс требует идентификации пользователя. Клиентское приложение запрашивает у пользователя данные для аутентификации ( имя, пароль ) и передает их на сервер в заголовке WWW-Authenticate. Если данные указаны не правильно, будет снова выдан этот-же код статуса. Появился в протоколе версии HTTP/1.0.
402 Payment Required — Необходима оплата.
Пока не используется. Появился в протоколе версии HTTP/1.1.
403 Forbidden — Запрещено.
Сервер отказал в доступе к запрошенному ресурсу ввиду ограничений. Ограничения могут быть любыми, установленными администратором сервера, или определенным веб приложением. Например, в целях безопасности, закрыт доступ к файлу, .htacces или .htpasswd или к закрытой директории сайта, или в случае, когда аутентификация должна производится через веб приложение ( например сайтовый движок ), ну или блокировка по IP адресу, в случае слишком частых обращений. Появился в протоколе версии HTTP/1.0.
404 Not Found — Не найдено.
Сервер не нашел запрошенный ресурс по указанному адресу. Кроме того данный код ответа можно использовать вместо 403, с целью, скрыть расположение документа, доступ к которому запрещен. Появился в протоколе версии HTTP/1.0.
405 Method Not Allowed — Метод не поддерживается.
Клиент попытался использовать метод, недопустимый для данного ресурса. Сервер передает в заголовке, строку Allow, содержащую список допустимых методов. Появился в протоколе версии HTTP/1.1.
406 Not Acceptable — Не приемлемо.
Запрошенный ресурс, не удовлетворяет, запрошенные характеристики. В случае, если запрос был сделан не методом HEAD, сервер вернет список допустимых характеристик запрошенного ресурса. Появился в протоколе версии HTTP/1.1.
407 Proxy Authentication Required — Необходима прокси авторизация.
Данный код статуса, аналогичен коду 401 за исключением того, что аутентификация производится для прокси-сервера. Появился в протоколе версии HTTP/1.1.
408 Request Timeout — Время ожидания истекло.
Истек таймаут ожидания передачи данных, между сервером и клиентом. Появился в протоколе версии HTTP/1.1.
409 Conflict — Конфликт.
Конфликтная ситуация при обращении к ресурсу. Такое может произойти, например, при попытке одновременного изменения файла, методом PUT, несколькими клиентами. Появился в протоколе версииHTTP/1.1.
410 Gone — Удалён.
Данный ответ выдается в случае, если документ был по указанному URI, но в данный момент удален. Появился в протоколе версии HTTP/1.1.
411 Length Required — Необходима длина.
Этот код статуса говорит о том, что для данного URI, в заголовке запроса, должно быть указано значение в поле Content-Length. Появился в протоколе версии HTTP/1.1.
412 Precondition Failed — Условие «ложно.
Данный код выдается в случае, если ни одно из условных полей заголовка не было удовлетворено. Появился в протоколе версии HTTP/1.1.
413 Request Entity Too Large — Запрошены слишком большие данные.
Данный код выдается, если сервер по каким-либо причинам, не может передать, требуемый объем данных. Если это временная проблема, сервер может указать время, по истечении которого можно будет попробовать повторно запросить ресурс, в строке заголовка, Retry-After. Появился в протоколе версии HTTP/1.1.
414 Request-URI Too Long — Запрашиваемый URI слишком длинный.
Слишком длинная строка запроса. Такая ситуация может произойти, например в случае попытки, передать данные методом GET, вместо использования POST. Появился в протоколе версии HTTP/1.1.
415 Unsupported Media Type — Неподдерживаемый тип данных.
Сервер, по какой-то причине, отказался обрабатывать запрошенные данные, используемым методом. Появился в протоколе версии HTTP/1.1.
416 Requested Range Not Satisfiable — Запрашиваемый диапазон не достижим.
В строке заголовка запроса Range, установлен диапазон, выходящий за рамки запрошенного ресурса и отсутствует строка If-Range. Появился в протоколе версии HTTP/1.1.
417 Expectation Failed — Ожидаемое не приемлемо.
Сервер не может обработать строку заголовка запроса Expect. Появился в протоколе версии HTTP/1.1.
422 Unprocessable Entity — Необрабатываемый экземпляр.
Запрос принят, тип данных может быть обработан, синтаксис XML данных в теле запроса верен, но имеет место логическая ошибка, не позволяющая обработать запрос к ресурсу. Используется в протоколеWebDAV.
423 Locked — Заблокировано.
Запрошенный ресурс заблокирован от данного метода. Используется в протоколе WebDAV.
424 Failed Dependency — Невыполненная зависимость.
Выполнение запроса, может зависеть от результата выполнения, какой-либо другой операции, при невыполнении данного условия, будет выдан этот код статуса. Используется в протоколе WebDAV.
425 Unordered Collection — Беспорядочный набор.
Этот код статуса будет выдан в случае, если клиент отправил запрос обозначив положение в неотсортированной коллекции или используя порядок следования элементов отличный от серверного. Введено в черновике по WebDAV Advanced Collections Protocol.
426 Upgrade Required — Требуется обновление.
Указание сервера, клиенту, обновить протокол. Заголовок ответа, должен содержать правильно составленные поля Upgrade и Connection. Введено в RFC 2817 для возможности перехода к TLS посредствомHTTP.
449 Retry With — Повторить с…
Выдается в случае поступления не достаточного количества информации для обработки запроса. В заголовок ответа сервера, помещается строка Ms-Echo-Request. Введено корпорацией Microsoft дляWebDAV.

5xx: Server Error — Ошибка на стороне сервера

Коды данной категории, предназначены для ситуаций, когда обработка запроса не возможна по вине сервера. Во всех случаях, кроме использования метода HEAD, сервер должен включать в тело ответа, объяснение для пользователя.

500 Internal Server Error — Внутренняя ошибка сервера.
Любая внутренняя ошибка на стороне сервера не подпадающая под остальные ошибки из категории 5хх. Появился в протоколе версии HTTP/1.0.
501 Not Implemented — Не реализовано.
Сервер не поддерживает, необходимых для обработки запроса, возможностей. ( например не поддерживается необходимый метод обработки ). Появился в протоколе версии HTTP/1.0.
502 Bad Gateway — Плохой шлюз.
Сервер, работающий в качестве прокси или шлюза, получил сообщение о неудачное в промежуточной операции. Появился в протоколе версии HTTP/1.0.
503 Service Unavailable — Сервис недоступен.
Сервер не в состоянии обрабатывать запросы клиентов по техническим причинам. Появился в протоколе версии HTTP/1.0.
504 Gateway Timeout — Истек таймаут ожидания ответа шлюза.
Проксирующий сервер или шлюз, не дождался ответа от вышестоящего сервера для завершения обработки запроса. Появился в протоколе версии HTTP/1.0.
505 HTTP Version Not Supported — Версия HTTP протокола не поддерживается.
Сервер не поддерживает, или не может обработать, указанную в заголовке версию HTTP протокола. Появился в протоколе версии HTTP/1.0.
506 Variant Also Negotiates — Вариант тоже согласован.
Из-за не верной конфигурации, выбранный вариант указывает сам на себя, в следствии чего, связывание прерывается. Добавлено в RFC 2295 для дополнения протокола HTTP технологией Transparent Content Negotiation.
507 Insufficient Storage — Переполнение хранилища.
Недостаточно места для обработки текущего запроса. Возможно временная проблема. Используется в протоколе WebDAV.
509 Bandwidth Limit Exceeded — Пропускная возможность канала исчерпана.
Данный код статуса, используется в случае превышения веб площадкой, отведенного ей лимита, на потребляемый трафик. Данный код не описан ни одним RFC и используется только модулем bw/limited, панели веб-хостинга cPanel.
510 Not Extended — Нет расширения.
У сервера отсутствует расширение, которое пытается использовать клиентом. Сервер может передавать информацию, об имеющихся у него расширениях. Введено в RFC 2774 для дополнения протокола HTTPподдержкой расширений.

Методы обработки запросов HTTP

HTTP метод — это основная операция, которую необходимо выполнить над ресурсом. В названии могут использоваться любые символы, кроме управляющих последовательностей и разделителей, как правило это короткое слово на английском языке. Имена методов HTTP зависимы от регистра.

Любой веб сервер обязан работать, по крайней мере с двумя методами GET и HEAD. Если сервер не смог определить метод, указанный в заголовке запроса клиента, он должен вернуть код статуса 501 (Not Implemented), если-же метод серверу известен, но неприменим к данному ресурсу, будет возвращен код статуса 405 (Method Not Allowed). Как в первом, так и во втором случае, сервер должен включить в свой ответ, заголовок Allow со списком методов, которые он поддерживает.

Метод OPTIONS

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

Что-бы выяснить возможности сервера, клиент должен указать в запросе URI, символ — «*«, то есть данный запрос к серверу выглядит как: OPTIONS * HTTP/1.1. Кроме прочего, данный запрос может быть использован для проверки работоспособности сервера и поддержки им протокола HTTP, версии 1.1. Результаты данного запроса не кэшируются.

Метод GET

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

Параметры для выполнения запроса, передаются в URI запрашиваемого ресурса, после символа «?«. Запрос в таком случае выглядит примерно так: GET /some/resource?param1=val1&param2=val2 HTTP/1.1.

Как установлено в стандарте HTTP, запросы методом GET, являются идемпотентными, то есть, повторная отправка одного и того-же запроса, методом GET, должна приводить к одному и тому-же результату, в случае, если сам ресурс, в промежутках между запросами, изменен не был, что позволяет кэшировать результаты, выдаваемые на запрос методом GET.

Кроме вышесказанного, существуют еще два вида метода GET, это:
условный GET, содержащий заголовки If-Modified-Since, If-Match, If-Range и им подобные,
Частичный GET, содержащий заголовок Range с указанием байтового диапазона данных, которые сервер должен отдать. Данный вид запроса используется для докачки и организации многопоточных закачек.

Порядок работы с этими подвидами запроса GET, стандартами определен отдельно.

Метод HEAD

Данный метод, аналогичен методу GET, с той лишь разницей, что сервер не отправляет тело ответа. Метод HEAD, как правило используется для получения метаданных ресурса, проверки URL ( есть-ли указанный ресурс на самом деле ) и для выяснения факта изменения ресурса с момента последнего обращения к нему.

Заголовки ответа могут быть закэшированы, при несоответствии метаданных и информации в кэше, копия ресурса помечается как устаревшая.

Метод POST

Метод POST, используется для передачи пользовательских данных на сервер, указанному ресурсу. Примером может послужить HTML форма с указанным атрибутом Method=»POST», для отправки комментария к статье. После заполнения необходимых полей формы, пользователь жмет кнопку «Отправить» и данные, методом POST, передаются серверному сценарию, который в свою очередь выводит их на странице комментариев. Таким-же образом, с помощью метода POST, можно передавать файлы.

В отличии от GET, метод POST, не является идемпотентным, то есть неоднократное повторение запроса POST, может выдавать разные результаты. В нашем случае, будет появляться новая копия комментария при каждом запросе.

Если в результате запроса методом POST, возвращается код 200 (Ok) или 204 (No Content), в тело ответа сервера, добавляется сообщение о результате выполнения запроса. Например, если был создан ресурс, сервер вернет 201 (Created), указав при этом URI созданного ресурса в заголовке Location.

Ответы сервера, на выполнение метода POST, не кэшируются.

Метод PUT

Используется для загрузки данных запроса на указанный URI. В случае отсутствия ресурса по указанному в заголовке URI, сервер создает его и возвращает код статуса 201 (Created), если ресурс присутствовал и был изменен в результате запроса PUT, выдается код статуса 200 (Ok) или 204 (No Content). Если какой-то из переданных серверу заголовков Content-*, не опознан или не может быть использован в данной ситуации, сервер возвращает статус ошибки 501 (Not Implemented).

Главное различие методов PUT и POST в том, что при методе POST, предполагается, что по указанному URI, будет производиться обработка, передаваемых клиентом данных, а при методе PUT, клиент подразумевает, что загружаемые данные уже соответствуют ресурсу, расположенному по данному URI.

Ответы сервера при методе PUT не кэшируются.

Метод PATCH

Работает аналогично методу PUT, но применяется только к определенному фрагменту ресурса.

Метод DELETE

Удаляет ресурс, расположенный по заданному URI.

Метод TRACE

При запросе методом TRACE, клиент может увидеть, какие изменения были сделаны в запросе, промежуточными серверами.

Метод LINK

Связывает указанный ресурс с другим ресурсом.

Метод UNLINK

Снимает привязку одного ресурса к другому.

В прикладном смысле сайт — это набор файлов. Файлы каждого сайта находятся на том или ином физическом сервере. Чтобы пользователь мог перейти на нужный ресурс в интернете, нужно запросить эти файлы у сервера.

Сразу после того, как пользователь вбивает какой-то запрос в поисковик, браузер делает запрос на сервер. После этого сервер дает ответ и искомый сайт открывается в браузере. Однако иногда вместо ответа на запрос появляется ошибка.

Каждая ошибка имеет свой код. По коду можно определить возможные причины её появления. Рассмотрим, что означают ошибки 406, 410 и 505, из-за чего они появляются и как их можно исправить.

Ошибка 406 Not Acceptable

Если веб-сервер выдаёт код ошибки 406, значит запрос был заблокирован брандмауэром веб-приложений (WAF) ModSecurity. Брандмауэр ModSecurity — это программное обеспечение для веб-сервера Apache, которое фильтрует все поступающие к сайту запросы (веб-трафик). Он принимает корректные запросы и блокирует нежелательные. Например, защищает веб-ресурс от нелегитимных запросов, с помощью которых можно найти уязвимости CMS и затем взломать её.

ModSecurity по умолчанию подключают все хостинг-провайдеры для защиты сайтов клиентов. Подробнее о работе брандмауэра ModSecurity читайте на modsecurity.org.

HTTP 406 ошибка чаще всего имеет локальный характер и возникает на стороне клиента. В редких случаях, чтобы исправить проблему, необходимы действия со стороны владельца.

Основные причины

  1. Брандмауэр ошибочно блокирует корректные запросы.
  2. Временная проблема идентификации IP-адреса при подключении к Wi-Fi.
  3. Ваш браузер поврежден вирусами. К заражению могли привести установленные для браузера расширения или поврежденные файлы операционной системы.
  4. Поврежден реестр Windows. Нередко такое происходит в результате последних обновлений программного обеспечения или после удаления тех или иных его компонентов.
  5. Когда клиенты жалуются, что видят страницу с 406, самая вероятная причина — некорректная работа плагинов CMS. Чаще всего такое бывает на Wordpress-сайтах.

Как исправить HTTP 406 Not Acceptable

Если вы пользователь:

  1. Почистите файлы cookies. Если при повторном подключении вы снова увидите ошибку, попробуйте очистить кэш браузера. Возможно, доступ уже восстановлен, но ваш браузер обращается к старой версии страницы.
  2. Отключите дополнительные расширения. Запустите браузер в режиме «Инкогнито». В этом режиме браузер задействует только базовые настройки. Если веб-ресурс доступен в этом режиме, значит причина ошибки в одном из дополнительных расширений, которые вы используете.
  3. Переустановите браузер. Если вы отключили расширения, но доступ к сайту не появился, попробуйте ввести аналогичный запрос через другой поисковик. Если страница открывается, значит есть критические нарушения в работе текущего браузера.
  4. Обновите драйверы компьютера. Иногда драйверы устройства отключаются и перестают автоматически работать. Это может спровоцировать нарушение в подключении. Для восстановления работы достаточно обновить драйверы.
  5. Отмените последние изменения, если у вас Windows. Восстановление системы позволит вернуть программы и системные файлы вашего компьютера в то состояние, когда не было сбоев в работе.
  6. Просканируйте системные файлы. Благодаря этому можно обнаружить поврежденные файлы и восстановить их. Это поможет оптимизировать работу компьютера и, возможно, устранить проблему.

Если указанные способы не помогли, вероятно, проблема связана с настройками сайта.

Если вы владелец сайта:

1) Если ваш сайт создан на WordPress, проверьте работу плагинов. Чтобы убедиться, что проблема именно в них, можно отключить сразу все плагины и проверить соединение.

Если вы уверены, что на работу влияет конкретный плагин — отключите его. Если не уверены, то отключайте плагины по очереди, пока не вычислите нужный. Для этого:

  1. 1.

    Войдите в панель управления WordPress. Если вы пользуетесь услугой REG.Site, войти в панель управления CMS можно прямо из Личного кабинета.

  2. 2.

    Перейдите на ПлагиныУстановленные.

  3. 3.

    Нажмите Деактивировать для плагина, который хотите отключить:

2) Если ваш сайт создан не на WordPress или отключение плагинов не дало результата, чтобы исправить ошибку 406, напишите заявку в техническую поддержку.

Ошибка 410 Gone

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

Этим 410 похожа на ошибку 404 (страница не найдена). Их основное отличие в том, что при ошибке 404 страница либо не существовала, либо наоборот — существует, но временно не найдена (например, потому что скрыта от пользователей). Ошибка 410 же сообщает, что страница точно существовала раньше, но затем её удалили.

Также ошибки по-разному обрабатывают поисковые роботы. Если роботы встретят страницу с ошибкой 404, они перенесут индексацию сайта на 24 часа. Если сервер выдаст страницу с 410, роботы сразу отметят её как удаленную и больше не будут индексировать. Для владельца сайта это не очень хороший сценарий, поскольку не индексируемые страницы негативно влияют на позиции сайта в поисковых системах.

Как исправить

Способ исправить ошибку 410 HTTP зависит от намерений владельца.

  1. Если страница удалена по ошибке, можно попробовать восстановить её из резервной копии.
  2. Если страницу удалили намеренно, лучше всего настроить редирект. Редирект помогает сделать перенаправление одной страницы на другую. Это позволит сохранить поисковые позиции.

Ошибка 505 HTTP Version Not Supported

Код ошибки 505 говорит нам о том, что проблема возникла на уровне сервера. Вот что означает ошибка 505: с её помощью сервер сообщает, что не может установить соединение по той версии HTTP-протокола, с помощью которой к нему хотят подключиться.

Основные причины

  1. Пользователь использует устаревший браузер, который не поддерживает новые версии протокола. То есть в этом случае браузер подключается по версии HTTP 1.1, а сервер работает по версии HTTP 2.
  2. Сервер не поддерживает HTTP-протокол, с помощью которого пытается подключиться клиент. Например, он работает по версии HTTP 1.1, а запрос поступает из браузера с версии HTTP 2.
  3. Неверные директивы, указанные в файле .htaccess.
  4. Неполадки в работе скриптов ресурса.

Как исправить ошибку 505

Если вы пользователь:

  1. Почистите файлы cookies и кэш браузера.
  2. Обновите версию браузера.
  3. Обновите операционную систему и драйверы.
  4. Обратитесь к интернет-провайдеру. Если все страницы показывают 505 в любых браузерах, обратитесь в службу поддержки вашего провайдера.

Если вы владелец сайта:

  1. Узнайте, по какой версии протокола работает ваш сайт. Обновите её до актуальной, если необходимо. Например, серверы REG.RU работают с протоколом HTTP 1.1.
  2. Проверьте логи веб-сервера. Определите, где кроется ошибка (в работе CGI-скриптов, директивах .htaccess или файле конфигурации веб-сервера) и исправьте её.
  3. Если проблема в скриптах, обратитесь к разработчику сайта.

  • 1c enterprise integrity violation ошибка
  • 1c enterprise 8 application error ошибка установки соединения by reason
  • 1c enterprise 8 application error ошибка при разборе дескриптора виртуальных ресурсов
  • 1c bitrix ошибка при создании файла
  • 1b5e ошибка daf 105