cURL 在输出和跟踪中显示不同的服务器响应数据:为什么?

cURL 在输出和跟踪中显示不同的服务器响应数据:为什么?

运行以下命令后:

curl --data-binary @request.bin $URL --trace trace.txt > out.txt

输出文件不包含任何内容(其大小为零),但在跟踪.txt我可以读到(除其他外)这些:

<= Recv data, 5 bytes (0x5)
0000: 30 0d 0a 0d 0a                                  0....

我希望输出文件包含30 0d 0a 0d 0a,或者至少不为空。我错在哪里?


NB:服务器的响应是“OK”:

<= Recv header, 17 bytes (0x11)
0000: 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK.

答案1

0d 0a 0d 0a表示 2 次CR LF,它是服务器和客户端之间 HTTP 对话交换的一部分,表示“http 会话结束”。我猜这里的零0....对应于Content-Length: 0标头,这意味着服务器返回了空回复。您可以看到它为空out.txt。非空回复有什么原因吗,或者您也想捕获输出标头out.txt

答案2

30 0d 0a 0d 0a 这是从 HTTP 服务器到客户端的终止零消息。

在服务器使用“数据块”的情况下会发生这种情况:

HTTP 规范提供了两种方法来指定请求的结束位置。Content-Length 标头和 Transfer-Encoding 标头。

“Transfer-Encoding 标头用于指定消息主体使用分块编码。每个块由以字节为单位的块大小(十六进制)组成,后跟换行符,后跟块内容。消息以大小为零的块结束。”

https://portswigger.net/web-security/request-smuggling

相关内容