У меня такая же проблема. Это определенно одно из промежуточного программного обеспечения, которое не может правильно проанализировать тело и преобразовать :body
. Основная проблема заключается в том, что Content-Type
предполагает, что тело должно быть разборчивым.
Используя ngrep
, я выяснил, как curl
путает промежуточное ПО. Следующее, хотя интуитивно (или довольно сексуально) в командной строке отправляет неверный Content-Type
, который сбивает с толку промежуточное ПО:
curl -nd "Unknown error" http://localhost:3000/event/error
T 127.0.0.1:44440 -> 127.0.0.1:3000 [AP]
POST /event/error HTTP/1.1.
Authorization: Basic SzM5Mjg6ODc2NXJkZmdoam5idmNkOQ==.
User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3.
Host: localhost:3000.
Accept: */*.
Content-Length: 13.
Content-Type: application/x-www-form-urlencoded.
.
Unknown error
Однако следующее вынуждает Content-Type
быть непрозрачным, и промежуточное ПО не будет мешать :body
.
curl -nd "Unknown error" -H "Content-Type: application/data" http://localhost:3000/event/error
T 127.0.0.1:44441 -> 127.0.0.1:3000 [AP]
POST /event/error HTTP/1.1.
Authorization: Basic SzM5Mjg6ODc2NXJkZmdoam5idmNkOQ==.
User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3.
Host: localhost:3000.
Accept: */*.
Content-Type: application/data.
Content-Length: 13.
.
Unknown error
Я подумываю о замене промежуточного программного обеспечения на более либеральное, потому что, хотя запрос неверен, я все же хотел бы решить, что делать с телом самостоятельно. Это действительно странный выбор - ноль тела запроса, когда запрос не имеет смысла. Я на самом деле думаю, что более правильным было бы передать его обработчику ошибок, который по умолчанию будет возвращать 400 Bad Request
или 406 Not Acceptable
.
Есть мысли по этому поводу? В моем случае я мог бы предложить патч для Compojure.