1С не может прочитать ответ сайта - разбор причин
Учётная система жалуется, что не может разобрать ответ сайта, и обмен обрывается на первом же шаге. Разбираем причины по убыванию частоты.
С чего начать
Смотрим, что именно отдаёт точка обмена:
curl -sS -u 'exchange:пароль' -D - -o /tmp/answer.txt \ 'https://example.com/bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth'head -c 200 /tmp/answer.txt | od -c | head -5# первые байты ответа: там должно быть слово success, и ничего перед нимgrep -n 'success' /tmp/answer.txt | head -3# служебное слово не на первой строке означает лишний вывод вышеОтвет точки обмена - это несколько строк служебного текста. Любой лишний байт перед ними ломает разбор, и учётная система сообщает об этом одинаково для всех причин сразу.
Ищем посторонний вывод в своём коде:
grep -rlP '^\xEF\xBB\xBF' /home/bitrix/www/local/ /home/bitrix/www/bitrix/php_interface/# метка кодировки в начале файла попадает в любой ответ сайтаtail -20 /home/bitrix/www/bitrix/php_interface/init.php# пустая строка после закрывающего тега тоже уходит в ответМетка кодировки и пробелы вокруг закрывающего тега уходят в ответ раньше служебных строк. Тот же эффект дают предупреждения PHP, если их вывод на экран включён на боевом сайте.
Проверяем переходы и коды ответа:
curl -sIL 'http://example.com/bitrix/admin/1c_exchange.php' | grep -E 'HTTP/|location'# учётная система за переходами не идёт: адрес должен отвечать сразуtail -20 /var/log/nginx/error.log | grep -i exchange# отказы веб-сервера видны здесь, а не в журнале обменаПереход на другой адрес учётная система не отрабатывает. Правило, уводящее весь сайт на защищённый протокол или на адрес с другим написанием домена, обрывает обмен на первом шаге.
Причины
-
Посторонний вывод перед ответом примерно 30% случаев
ПризнакВ ответе перед служебным словом видны лишние байты или текст ошибки.
ПроверкаСмотрим первые байты ответа и ищем метку кодировки в подключаемых файлах.
Что делатьУбираем метку кодировки и закрывающие теги в конце файлов, выключаем вывод предупреждений.
-
Точка обмена отвечает переходом примерно 25% случаев
ПризнакОтвет содержит код перехода на другой адрес вместо служебных строк.
ПроверкаЗапрашиваем адрес точки обмена и смотрим цепочку ответов до конечного.
Что делатьПрописываем в узле сразу конечный адрес с нужным протоколом и написанием домена.
-
Веб-сервер отказал в обработке примерно 20% случаев
ПризнакВ ответе код отказа: запрет доступа, слишком большое тело запроса или ошибка шлюза.
ПроверкаСмотрим журналы веб-сервера в момент сеанса обмена и предел размера тела запроса.
Что делатьПоднимаем предел размера тела, снимаем защитные правила с адреса точки обмена.
-
Не проходит доступ к точке обмена примерно 15% случаев
ПризнакОтвет содержит форму входа вместо служебного текста.
ПроверкаПроверяем учётную запись обмена, её права и ограничения по адресу.
Что делатьВыдаём права на обмен, снимаем двухэтапный вход и ограничение по адресу для этой записи.
-
Кодировка ответа не та примерно 10% случаев
ПризнакСлужебные строки в ответе есть, но выглядят набором нечитаемых символов.
ПроверкаСверяем кодировку сайта с кодировкой, заданной в настройках узла обмена.
Что делатьПриводим настройку узла к кодировке сайта: обе стороны должны говорить в одной.
Частые вопросы
Как проверить точку обмена без учётной системы?
Запросом из консоли с логином и паролем обмена. Ответ должен начинаться служебным словом и не содержать разметки.
Почему обмен работал и перестал?
Чаще всего после правки кода или включения правила перехода на сервере. Оба изменения попадают в ответ точки обмена.
Можно ли смотреть ответ в журнале обмена?
Да, при включённом протоколировании он пишется целиком. Это самый быстрый способ увидеть лишний вывод.
Мешает ли защита от ботов?
Да, если она проверяет запросы к административной части. Адрес точки обмена из таких проверок исключают.
Смежное
-
Настройка обмена с 1С - оглавление подтемы
-
Настройка обмена с 1С: точка обмена, доступ, порядок шагов - как настроить обмен правильно
-
Журнал обмена: как читать и что означают его сообщения - где смотреть подробности
-
Редиректы внутри сайта: 301 на раздел, https и старые адреса - откуда берутся переходы
-
Обмен с 1С и HTTP - устройство обмена целиком
-
Ручная загрузка файла обмена: когда 1С не достучится до сайта - когда связь наладить не удаётся
-
Протокол обмена с 1С: шаги, параметры, ответы, отладка - каким должен быть ответ на каждом шаге