Запрос API POST без заголовка Accept возвращает 406

RFC 7231 предполагает, что запрос без заголовка Accept следует обрабатывать как */*, однако вызов POST-эндпоинта API для запроса в Data Explorer без этого заголовка возвращает ошибку 406 Not Acceptable. Не уверен, специфично ли это для Data Explorer или же касается и других POST-запросов. Все остальные GET-запросы, которые я использовал, не имели этой проблемы.

Случайно сложилось так, что curl и библиотека requests на Python по умолчанию добавляют Accept: */* ко всем запросам, но не все инструменты делают это. Эту особенность можно увидеть, отключив заголовок по умолчанию в curl с помощью пустого заголовка, например:

curl -X POST "https://discourse.example.com/admin/plugins/explorer/queries/26/run" \
-H "Content-Type: multipart/form-data;" \
-H "Api-Key: <your_all_users_api_key>" \
-H "Api-Username: system" \
-H "Accept:"

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

2 лайка

Это, скорее всего, связано со стеком Rails (а не с Discourse), и обход этого, вероятно, будет сложным.

Я вижу некоторые утверждения в actionpack для статуса 406.

Временно переклассифицирую это как #feature, так как существует тривиальный обходной путь, и это, по-видимому, задумано в Rails.

1 лайк