Похоже, проблема в том, что в локальной среде разработки Discourse устанавливает следующий заголовок:
content-encoding: null
Мой локальный сервер Apache не может обработать заголовок content-encoding: null. Из моей консоли wp shell запрос wp_remote_get("http://localhost:4200/site.json") завершается ошибкой, которую я привёл выше, тогда как запрос к продакшн-сайту Discourse, например wp_remote_get("https://meta.discourse.org/site.json"), выполняется без каких-либо проблем.
Мое временное решение проблемы — закомментировать эту строку в локальной установке Discourse: https://github.com/discourse/discourse/blob/main/app/assets/javascripts/bootstrap-json/index.js#L330. Однако это не самое лучшее решение. У кого-нибудь возникали подобные проблемы при подключении к сайту Discourse, работающему на localhost? Есть ли у кого-нибудь предложения, как настроить локальный сервер Apache для принятия ответов с заголовком content-encoding: null?
Жаль, что я не знаю точно, когда началась эта проблема. Возможно, она возникает с тех пор, как Discourse начал устанавливать заголовок content-encoding: null.
Редактирование: проблема возникает на Ubuntu 22.04.1. Версия Curl: curl 7.81.0. Версия PHP: 8.1.2. Это не срочно, но мне интересно, что именно происходит.
Интересно! Это звучит знакомо, но я пока не могу точно вспомнить, где именно. Но, думаю, мой первый вопрос: где и почему Discourse устанавливает заголовок content-encoding в значение null?
Действительно, это похоже на проблему, возникающую только в режиме разработки. Это, вероятно, связано с:
Номера строк меняются по мере обновления кода. Для справки: строка в коде Discourse, которую мне приходится закомментировать для локальной разработки с плагином WP Discourse, следующая:
res.set("content-encoding", null);
Не проводя полного анализа того, что происходит в коде Discourse, кажется, что закомментирование этой строки заставляет Discourse сжимать ответ с помощью gzip:
Мне приходится возвращаться к этой теме каждый раз, когда я хочу подключить свои локальные сайты WordPress и Discourse.
Для своей справки: строка res.set("content-encoding", null); теперь находится здесь:
Комментирование этой строки решает проблему.
Если эта проблема не затрагивает других, возможно, в моей локальной среде разработки что-то настроено неверно. Однако установка заголовка “content-encoding” в значение null всё ещё кажется неправильной. Это недопустимое значение для заголовка.
На самом деле я тоже недавно столкнулся с этим в контексте плагина ActivityPub при тестировании интеграции ActivityPub между плагином WordPress ActivityPub и Discourse локально.
Я изменил категорию на Development, потому что считаю, что это проблема только разработки в discourse/discourse, которая проявляется только с PHP-удалённым сервером (из-за того, как функции запросов PHP обрабатывают данные или что-то в этом роде).
Сейчас точно не помню, но, кажется, пришёл к выводу, что в продакшене это устанавливается в другом месте? Постараюсь вспомнить завтра.