我正在一个嵌入式系统上运行的HTTP服务器上工作。它使用的以太网芯片似乎工作得很好。但我现在有种奇怪的行为。
当我使用Web浏览器(例如Firefox,甚至是基于命令行的浏览器(如links
))发出请求时,我每次都会从服务器获得正确的响应。如果使用Postman进行测试,它也可以很好地工作。但是,如果我使用cURL
,则每隔一次调用都会得到curl: (52) Empty reply from server
。
在执行HTTP请求的应用程序和执行相同操作的简单命令行工具之间有什么根本区别吗?
此外,从服务器日志中,我意识到:
- Firefox:正确接收所有响应,每个请求只连接一个套接字。
- 链接:正确接收所有响应,每个请求有两个套接字连接。
- cURL:每隔一次调用就无法接收响应,并且每个请求只连接一个套接字。
- 使用fetch的Node.js:只使用一个套接字时,接收响应,但在几次调用后失败。
- Python请求:每隔一次调用就无法接收响应,并且每个请求只连接一个套接字。
cURL和Node.js:注意,我使用了Firefox网络分析器提供的cURL和fetch命令。
为了得到完全相同的响应,我去了Firefox中的网络分析器,并从那里复制了HTTP请求,以便使用完全相同的头部。我从日志中验证了服务器在运行Firefox和cURL
时收到的有效负载总是相同的。
还有什么会影响服务器的行为?我期待一个错误,但由于有效负载是相同的,我想知道还有什么可以不同的和完整的功能应用程序和命令行或脚本实用程序做一个裸请求。
1条答案
按热度按时间9ceoxa921#
我假设在使用浏览器调用时,request headers中存在一些差异。
curl并不比附加参数提供给予更多的信息。
如果你有能力在目的服务器上自己检查请求,你应该打印/注销不同请求的头信息。