http请求中的多个get请求

http请求中的多个get请求,http,tcp,pipelining,Http,Tcp,Pipelining,当查看用于获取图像的客户端->服务器交互时,我看到以下来自客户端的HTTP GET请求,其中数据包包含2个HTTP GET请求,我不确定服务器将如何响应这些请求 服务器会忽略第二个GET请求吗 服务器是否会对每个GET请求逐个发送响应 这似乎不是HTTP管道。如果是,请告知 Transmission Control Protocol, Src Port: 59649 (59649), Dst Port: 8080 (8080), Seq: 1, Ack: 1, Len: 648 Sour

当查看用于获取图像的客户端->服务器交互时,我看到以下来自客户端的HTTP GET请求,其中数据包包含2个HTTP GET请求,我不确定服务器将如何响应这些请求

  • 服务器会忽略第二个GET请求吗
  • 服务器是否会对每个GET请求逐个发送响应
  • 这似乎不是HTTP管道。如果是,请告知

    Transmission Control Protocol, Src Port: 59649 (59649), Dst Port: 8080 (8080), Seq: 1, Ack: 1, Len: 648 Source Port: 59649 Destination Port: 8080 [Stream index: 86] [TCP Segment Len: 648] Sequence number: 1 (relative sequence number) [Next sequence number: 649 (relative sequence number)] Acknowledgment number: 1 (relative ack number) Header Length: 32 bytes Flags: 0x018 (PSH, ACK) 000. .... .... = Reserved: Not set ...0 .... .... = Nonce: Not set .... 0... .... = Congestion Window Reduced (CWR): Not set .... .0.. .... = ECN-Echo: Not set .... ..0. .... = Urgent: Not set .... ...1 .... = Acknowledgment: Set .... .... 1... = Push: Set .... .... .0.. = Reset: Not set .... .... ..0. = Syn: Not set .... .... ...0 = Fin: Not set [TCP Flags: *******AP***] Window size value: 683 [Calculated window size: 43712] [Window size scaling factor: 64] Checksum: [validation disabled] [Good Checksum: False] [Bad Checksum: False] Urgent pointer: 0 Options: (12 bytes), No-Operation (NOP), No-Operation (NOP), Timestamps No-Operation (NOP) Type: 1 0... .... = Copy on fragmentation: No .00. .... = Class: Control (0) ...0 0001 = Number: No-Operation (NOP) (1) No-Operation (NOP) Type: 1 0... .... = Copy on fragmentation: No .00. .... = Class: Control (0) ...0 0001 = Number: No-Operation (NOP) (1) Timestamps: TSval 6345, TSecr 6344 Kind: Time Stamp Option (8) Length: 10 Timestamp value: 6345 Timestamp echo reply: 6344 [SEQ/ACK analysis] [iRTT: 0.000099000 seconds] [Bytes in flight: 648] Hypertext Transfer Protocol GET HTTP/1.1\r\n [Expert Info (Chat/Sequence): GET HTTP/1.1\r\n] [GET HTTP/1.1\r\n] [Severity level: Chat] [Group: Sequence]enter code here Request Method: GET Request URI: Request Version: HTTP/1.1 Host: \r\n sent: \r\n User-Agent: \r\n Accept-Encoding: gzip, deflate\r\n Accept-Language: en-GB,*\r\n Connection: keep-alive\r\n \r\n [Full request URI: ] [HTTP request 2/2] [Prev request in frame: 1254] [Response in frame: 1272] Hypertext Transfer Protocol GET \r\n [Expert Info (Chat/Sequence): GET HTTP/1.1\r\n] [GET HTTP/1.1\r\n] [Severity level: Chat] [Group: Sequence] Request Method: GET Request URI: Request Version: HTTP/1.1 Host: \r\n sent: \r\n User-Agent: \r\n Accept-Encoding: gzip, deflate\r\n Accept-Language: en-GB,*\r\n Connection: keep-alive\r\n \r\n [Full request URI: ] [HTTP request 2/2] [Prev request in frame: 1254] [Response in frame: 1272] 传输控制协议,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)、时间戳 无操作(NOP) 类型:1 0... .... = 碎片复制:否 .00. .... = 类别:控制(0) …0 0001=编号:无操作(NOP)(1) 无操作(NOP) 类型:1 0... .... = 碎片复制:否 .00. .... = 类别:控制(0) …0 0001=编号:无操作(NOP)(1) 时间戳:TSval 6345,TSecr 6344 种类:时间戳选项(8) 长度:10 时间戳值:6345 时间戳回显回复:6344 [顺序/确认分析] [iRTT:0.000099000秒] [飞行中的字节数:648] 超文本传输协议 获取HTTP/1.1\r\n [专家信息(聊天/序列):获取HTTP/1.1\r\n] [获取HTTP/1.1\r\n] [严重性级别:聊天] [组:序列]在此处输入代码 请求方法:获取 请求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] [获取HTTP/1.1\r\n] [严重性级别:聊天] [组:序列] 请求方法:获取 请求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规范和中介绍了这一点。客户端正在发送一个新的
    GET
    请求,而不必首先等待对以前的
    GET
    请求的响应。这就是管道的定义:

    HTTP请求和响应可以在连接上通过管道传输管道化允许客户端在不等待每个响应的情况下发出多个请求,从而使单个TCP连接的使用效率更高,运行时间更短

    TCP只是通过为两个HTTP请求使用一个TCP数据包来优化事情。客户端可能已经启用了(也称为“Nagle算法”),以减少网络流量(大多数套接字库默认都会启用)

    为了让服务器响应管道化请求,必须使用持久连接,这是管道化的另一个要求,在您的示例中非常明显(连接:保持活动请求头)

    TCP是一个字节流,较低级别的TCP帧对较高级别的协议层并不重要。一个正确编写的HTTP接收器将能够分离单独的HTTP消息,而不管使用何种TCP帧,并根据需要单独处理它们。HTTP 1.1规范要求所有请求都按照接收的顺序响应(HTTP 2.0改变了这一点,但这是一个更复杂的处理过程-多路复用-我将不详细介绍)

    因此,要回答您的问题:

  • 服务器会忽略第二个GET请求吗?-没有

  • 服务器是否会对每个GET请求逐个发送响应对

  • 这似乎不是HTTP管道。如果是,请告知是的,但不是因为你想的原因


  • 谢谢你,雷米,这真的很有帮助。但是,如果客户机发送两个连接的http请求,则服务器根本看不到第二个http请求。我正在使用lighttpd进行实验,它支持流水线。“这背后的原因可能是什么?”MuralitharanPerumal我无法回答。你得问问lighttpd的作者。听起来像是那个软件中的一个逻辑错误。我有自己的http服务器实现,它可以很好地处理连接的流水线请求