当查看客户端->服务器获取图像的交互时,我看到来自客户端的以下HTTP GET请求,其中数据包包含2个HTTP GET请求。我不确定服务器将如何响应这些请求?
- 服务器会忽略第二个GET请求吗
- 服务器会对每个GET请求逐个发送响应吗
-
这似乎不是HTTP管道。如果是,请告知。
传输控制协议,Src端口:59649(59649),Dst端口:8080(8080),Seq:1,Ack:1,Len:648来源端口:59649目标端口:8080[流索引:86][TCP段长度:648]序列号:1(相对序列号)[下一序列号:649(相对序列号)]确认编号:1(相对确认编号)标头长度:32字节标志:0x018(PSH、ACK)000…………=保留:未设置…0…..=无:未设置…..0…….=拥塞窗口减少(CWR):未设置…..0……=ECN回声:未设置……0…..=紧急:未设置…….1….=确认:设置…..1…=推送:设置……..0.=重置:未设置……..0.=Syn:未设置…………..0=翅片:未设置[TCP标志:*******AP***]窗口大小值:683[计算窗口大小:43712][窗口大小缩放因子:64]校验和:[验证已禁用][良好校验和:错误][错误校验和:False]紧急指针:0选项:(12字节)、无操作(NOP)、无运行(NOP,Timestamps)无操作(NOP)类型:10……..=碎片复制:否.00…..=类:控件(0)…0 0001=编号:无操作(NOP)(1)无操作(NOP)类型:10……..=碎片复制:否.00…..=类:控件(0)…0 0001=编号:无操作(NOP)(1)时间戳:TSval 6345,TSecr 6344种类:时间戳选项(8)长度:10时间戳值:6345时间戳回复:6344[SEQ/ACK分析][iRTT:0.000099000秒][飞行字节数:648]超文本传输协议获取HTTP/1.1\r\n[专家信息(聊天/序列):获取HTTP/1.1\r\n\r\n][GET HTTP/1.1\r\n\r\n][严重级别:聊天][组:序列]在此输入代码请求方法:GET请求URI:请求版本:HTTP/1.1主机:\r\n发送时间:\r\n用户代理:\r\n接受编码:gzip,deflate\r\n接受语言:en-GB,*\r\n连接:保持活动\r\n\\r\n[完整请求URI:][HTTP请求2/2][帧中的上一个请求:1254][帧中的响应:1272]超文本传输协议获取\r\n[专家信息(聊天/序列):获取HTTP/1.1\r\n\r\n][GET HTTP/1.1\r\n\r\n][严重级别:聊天][组:序列]请求方法:GET请求URI:请求版本:HTTP/1.1主机:\r\n发送时间:\r\n用户代理:\r\n接受编码:gzip,deflate\r\n接受语言:en-GB,*\r\n连接:保持活动\r\n\\r\n[完整请求URI:][HTTP请求2/2][帧中的上一个请求:1254][帧中的响应:1272]
有什么在线工具可以用来测试此类请求吗?
如果合适的话,多个HTTP请求在一个TCP数据包中是完全可以接受的。
您看到的确实是HTTP管道,这在HTTP 1.1规范的RFC 2616第8节和RFC 7230第6.3.2节中有介绍。客户端正在发送新的GET
请求,而无需首先等待对先前GET
请求的响应。这就是流水线的定义:
HTTP请求和响应可以在连接上进行流水线处理流水线允许客户端在不等待每个响应的情况下发出多个请求,从而使单个TCP连接的使用效率大大提高,所用时间大大缩短。
TCP只是通过为两个HTTP请求使用单个TCP数据包来优化事情。客户端可能启用了发送合并(也称为"Nagle算法")(大多数套接字库默认都这样做)以减少网络流量。
为了让服务器响应流水线请求,必须使用持久连接,这是流水线的另一个要求,并且在您的示例(Connection: keep-alive
请求标头)中清晰可见。
TCP是字节流,较低级别的TCP帧对较高级别的协议层无关紧要。一个正确编写的HTTP接收器将能够分离各个HTTP消息,而不考虑使用的TCP帧,并根据需要单独处理它们。HTTP 1.1规范要求所有请求都按照接收到的顺序响应(HTTP 2.0改变了这一点,但这是一个更复杂的处理过程——多路复用——我不会讨论)。
因此,为了回答您的问题:
-
服务器会忽略第二个GET请求吗-无
-
服务器会逐一向每个GET请求发送响应吗-是
-
这似乎不是HTTP管道。如果是,请告知。-是的,但不是因为你想的原因。