我面临同样的问题。这绝对是无法正确解析 body 和转换的中间件之一: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
我正在考虑用更自由的中间件替换中间件,因为即使请求是错误的,我仍然希望能够自己决定如何处理身体。当请求没有意义时,将请求正文归零是一个非常奇怪的选择。我实际上认为更正确的行为是将其传递给错误处理程序,默认情况下将返回 a 400 Bad Request
or 406 Not Acceptable
。
对此有什么想法吗?就我而言,我可能会为 Compojure 提出一个补丁。