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 상태 코드와 관련된 몇 가지 어설션(assertions)을 확인할 수 있습니다.

간단한 우회 방법이 있고 Rails의 의도된 동작으로 보이기 때문에, 당분간 #contribute:feature로 카테고리를 변경하겠습니다.

1개의 좋아요