我有一些Ring路线,我正在以两种方式运行。
lein ring server
,使用lein-ring
插件org.httpkit.server
,例如(hs/run-server app {:port 3000}))
这是一个Web应用程序(由Angular.js浏览器客户端使用)。
我使用Requests库在Python中编写了一些API测试:
my_r = requests.post(MY_ROUTE,
data=MY_DATA,
headers={"Content-Type": "application/json"},
timeout=10)
当我使用lein ring server
时,此请求在JS客户端和Python测试中都能正常工作。
当我使用httpkit
时,这在JS客户端中工作正常,但Python客户端超时
socket.timeout:超时
我无法弄清楚为什么Python客户端会超时。它发生在httpkit
但不发生在lein-ring
,所以我只能假设原因与差异有关。
Content-Length
字段(15个字节)。任何想法有什么不对?
答案 0 :(得分:0)
我找到了解决这个问题的方法,但没有令人满意的解释。
我正在使用wrap-json-response
Ring中间件来获取HashMap并将其转换为JSON。我转而使用json/write-str
在我的处理程序中进行自己的转换,这样就修复了它。
猜测它可能与服务器处理输出缓冲有关,但这是推测。
我已经梳理了Wireshark转储,我看不出两者之间有任何相关的差异。发送的Content-Length
字段完全相同。 “飞行中的字节数”不同,分别为518和524.
不知道为什么网络浏览器对此感到满意,但Python请求不是,以及这是Requests
,httpkit
,ring-middleware-format
或我自己的错误代码。