AcceptヘッダーなしのAPI POSTリクエストは406を返します

RFC 7231 は、Accept ヘッダーが欠落しているリクエストは */* として扱うべきだと示唆していますが、データエクスプローラーのクエリ 実行用の API POST エンドポイントに当該ヘッダーなしでアクセスすると、406 Not Acceptable が返されます。これがデータエクスプローラー固有の問題なのか、他の POST リクエストにも当てはまるのかはわかりません。私が使用した他の GET リクエストではこの問題は発生していません。

実際、curl や Python の requests ライブラリはデフォルトで全リクエストに 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