Вопрос или проблема
Я попробовал все, что мог придумать, и искал в Интернете последние несколько дней, потратив ~10 часов в день на попытки диагностировать это.
Проблема:
- в WP Site Health я получаю:
REST API – это один из способов, с помощью которого WordPress и другие приложения взаимодействуют с сервером. Например, экран блочного редактора полагается на REST API для отображения и сохранения ваших записей и страниц.
При тестировании REST API был возвращён неожиданный результат:
REST API Endpoint: https://www.mydomain.gr/wp-json/wp/v2/types/post?context=edit
Ответ REST API: (400) Неверный запрос
- При попытке сохранить файл из редактора плагинов я получаю (да, права на файл установлены правильно. даже пробовал 777):
Не удалось установить связь с сайтом для проверки на фатальные ошибки, поэтому изменение PHP было отменено. Вам потребуется загружать изменения вашего PHP файла другими способами, например, используя SFTP.
- Плагины не взаимодействуют с сервером для проверки обновлений.
Журналы:
из error_log litespeed есть запись каждый раз, когда я пытаюсь записать .php файл из редактора файлов или пытаюсь проверить состояние сайта, которая показывает:
2024-03-15 09:45:58.850109 [INFO] [2276963] [T0] [23.88.68.54:35334] Статус 400: Неверный символ в имени заголовка: ‘],”is_nat”‘
Попробованные решения:
- играл с настройками litespeed.
- отключил все плагины/переключился на стандартную тему.
- проверил с помощью стандартного файла .htaccess WP
- Написал небольшой PHP скрипт для взаимодействия с wc-api, который работает ПЕРФЕКТНО (говоря о странностях???).
- переустановил WP v6.4.3.
Я не могу понять, что может быть не так.
Это предупреждение о состоянии сайта, связанное с тем, что REST API возвращает неожиданный результат (тот же конечный пункт и статус 400), внезапно начало возникать и у меня. Это произошло на всех моих песочницах WordPress на сервере LiteSpeed, даже без установленных плагинов.
PHP журнал ошибок, который вы предоставили, был недостающим кусочком пазла для меня.
В моем случае проблема связана с куки mp_*_mixpanel
, который был сохранен в браузере. Этот куки содержал часть "is_nat":0
, которая также упоминается в вашем журнале ошибок, и как только я удалил куки; это решило проблему для меня. Похоже, что LiteSpeed пытается разобрать это как HTTP заголовок, когда WordPress делает запрос к REST API.
Надеюсь, этот ответ поможет кому-то, кто сталкивается с той же проблемой.
Ответ или решение
Неполадки между WP REST API и LiteSpeed: Полное руководство по диагностике и решению
В последнее время множество пользователей, работающих с WordPress на серверах LiteSpeed, сталкиваются с несовместимостью между WP REST API и настройками LiteSpeed. Эти проблемы могут проявляться в различных формах, от ошибок в Site Health до невозможности обновления плагинов. В данной статье мы рассмотрим причины, по которым возникает эта несовместимость, а также предложим надежные методы диагностики и решения проблем.
Проблема: Ошибка 400 при использовании REST API
Согласно приведенному вами описанию, ошибка проявляется следующим образом:
- Тестирование REST API в Site Health выдает статус 400: "Bad Request" при обращении к конкретному эндпоинту
wp-json/wp/v2/types/post?context=edit
. - Ошибка в логах LiteSpeed указывает на проблему с недопустимыми символами в заголовке:
Invalid character in header name: '],"is_nat"'
.
Эта конкретная ошибка могла возникнуть из-за некорректной обработки заголовков HTTP со стороны LiteSpeed.
Потенциальные причины проблемы
-
Проблемы с cookie: Как показывает ваш опыт, причиной может быть наличие специфических cookie (например,
mp_*_mixpanel
), которые LiteSpeed пытается обработать как HTTP-заголовки, что и приводит к ошибке. -
Неправильные заголовки HTTP: Проверка и правильная настройка заголовков, которые отправляются вашим WordPress-сайтом, может устранить конфликты.
-
Ошибки в конфигурации LiteSpeed: Неправильно настроенные модули или параметры могут блокировать корректное выполнение запросов к REST API.
-
Специфические плагины или темы: Иногда конфликты могут возникать из-за определенных плагинов или тем, даже если они отключены.
Решения и шаги по диагностике
Чтобы решить проблемы, подобные тем, что вы описали, выполните следующие шаги:
-
Очистка cookie: Удалите все cookie, относящиеся к вашему сайту, особенно те, что могут быть связаны с сторонними аналитическими инструментами. Это может мгновенно устранить многие проблемы с REST API.
-
Проверка заголовков: Используйте инструменты разработчика в браузере, чтобы посмотреть, какие заголовки отправляются, и убедитесь, что все они корректны. Замените или удалите проблемные заголовки.
-
Обновление конфигурации LiteSpeed:
- Проверьте настройки кэширования и отключите дополнительные модули, если они не нужны.
- Обратите внимание на правила обработки запросов и ограничения, установленные конфигурацией сервера.
-
Логирование ошибок: Убедитесь, что ошибки PHP, связанные с вашим сайтом, полностью зарегистрированы. Это поможет вам получить более подробную информацию о том, что идет не так.
-
Тестирование в чистом окружении: Если вы еще не сделали этого, создайте временный экземпляр сайта с установленной только чистой версией WordPress без плагинов и тем, чтобы проверить, проявляются ли аналогичные проблемы.
-
Связь с поддержкой: Если проблема не решена, рекомендуется обратиться в службу поддержки LiteSpeed или WordPress, предоставив им все имеющиеся логи и описание проблемы.
Заключение
Несовместимость между WP REST API и LiteSpeed — это проблема, которая может сильно воздействовать на функциональность вашего сайта. Правильная диагностика и решение могут значительно улучшить производительность вашего WordPress-сайта. Сфокусируйтесь на очистке cookie, проверке HTTP-заголовков и настройках сервера, чтобы устранить подобные проблемы. Удачи вам в решении этой задачи!