Http POST vs GET方法-在网络级别,哪种方法受延迟的影响更大?

Http POST vs GET方法-在网络级别,哪种方法受延迟的影响更大?,http,post,networking,get,latency,Http,Post,Networking,Get,Latency,HTTP GET和POST请求的网络通信有什么区别吗 使用GET,我知道整个请求是一次性发送的。 对于POST,我认为发送了初始请求,然后发送了第二个请求,该请求发送所有参数 例如,假设服务器和客户端之间的延迟为500毫秒。GET和POST调用的总时间是多少?对于给定的数据段,它们可能非常接近。下面是GET请求的外观: GET /test?x=5&y=3&z=4 HTTP/1.1 Header1: value Header2: value ... 以下是这篇文章的内容: POS

HTTP GET和POST请求的网络通信有什么区别吗

使用GET,我知道整个请求是一次性发送的。 对于POST,我认为发送了初始请求,然后发送了第二个请求,该请求发送所有参数


例如,假设服务器和客户端之间的延迟为500毫秒。GET和POST调用的总时间是多少?

对于给定的数据段,它们可能非常接近。下面是GET请求的外观:

GET /test?x=5&y=3&z=4 HTTP/1.1
Header1: value
Header2: value
...
以下是这篇文章的内容:

POST /test HTTP/1.1
Header1: value
Header2: value
...

x=5&y=3&z=4

所以数据量是一样的。真正的问题是,您是否希望用户能够添加书签并返回到URL,并在将来再次看到相同的数据。GET用于此目的,POST用于请求在服务器上更改数据,或出于安全原因(例如,不要使用GET提交密码)。

这一切都是关于客户端的实现。在http规范中没有这样的条件。
发送时间取决于数据量。如果您使用POST only替换GET,则无法区分。这些数据包都是TCP数据包,它们携带HTTP协议,请求方法不会更改网络层的响应时间

它将根据请求的大小根据请求的不同而变化,但这不是由请求类型决定的

你可以用post发送比get发送更多的数据,但这并不意味着他们的响应速度更快,这是另一个问题

HTTP服务器处理和返回结果的速度是在您正在使用的服务器上的,而且可能微不足道,不值得一提

从服务器返回结果的速度取决于HTTP服务器正在处理的资源,如果它调用一个需要时间的PHP文件,那么它将需要时间

数据包之间没有明显的区别。。。这是通过SSL的GET请求:

00907f8252f7001e4fe86a93080045000028
0bb2400080067380ac100167adc22064c51a
01bb66ccad148448d84850103f05bde90000
00907f8252f7001e4fe86a93080045000028
0c0640008006732cac100167adc22064c511
01bbe538c0df8621dc6150104042248c0000
这是通过SSL的POST请求:

00907f8252f7001e4fe86a93080045000028
0bb2400080067380ac100167adc22064c51a
01bb66ccad148448d84850103f05bde90000
00907f8252f7001e4fe86a93080045000028
0c0640008006732cac100167adc22064c511
01bbe538c0df8621dc6150104042248c0000
TCP数据包中的字符串是“GET”还是“POST”并没有太多涉及,网络看着它,说“哦,你是TCP,嗯?好吧,那你就走吧。”它不在乎


正常网络流量之外的任何延迟都完全是由于服务器级别的处理,或者它所处理的代码造成的。

乔纳森的回答非常明确。但让我进一步谈谈请求彼此不同的地方

所有通过互联网的信息都是通过小包裹传递的。假设每个包的最大容量为1KB(这不是正确的值,只是为了澄清机制,如果您想了解限制的真实值,请在RFC上搜索)

好的,我们有一个GET和一个POST请求。这些软件包与Jonathan举例说明的非常相似。在这种情况下,使用少量数据,所有内容都可以封装在1KB包中,因此网络性能没有差异

但是,如果需要大量的请求呢?有几个人知道,但GET请求的最大长度可能因服务器而异。试着问问任何一个网站.com/foo/a{200次a}。它将返回无效/错误的请求,而不仅仅是404未找到

这里是POST发生的地方。如果数据量大于某个值,POST允许服务器继续列出该请求并解析值

此外,在行为上还有另一个潜在的差异,这是以前没有提到的。POST数据在发送到服务器之前在浏览器中解析为当前文档编码。

POST请求由于日志记录较少而具有优势 给定相同的信息量(POST消息不超过GET),POST在服务器端的速度在技术上应该更快(从纳秒到皮秒):

  • 通常,像Apache这样的web服务器会将请求记录在某个地方
  • POST请求不记录查询字符串,因此写处理更少。服务器IOPS可能会无意中影响延迟

    如果没有这个,给定相同的数据包,它们实际上是等价的。
    GET将数据存储在查询字符串中,POST将信息存储在消息正文中。
    服务器以不同的方式处理这两者

在客户端,POST需要更多的处理来准备消息。如果使用AJAX,您会注意到这一点,发送GET请求要比发送POST容易得多

GET能够超越POST请求
  • 如w3 on所定义,GET能够执行部分请求,从而限制网络带宽:

    如果请求消息包含范围标头字段,则GET方法的语义将更改为“部分GET”。如第14.35节所述,部分GET要求仅转让实体的一部分。部分获取方法旨在通过允许完成部分检索的实体,而无需传输客户端已经持有的数据,从而减少不必要的网络使用

  • 此外,w3描述了一种减少网络使用的条件GET:

    如果请求消息包含if-Modified-Since、if-Unmodified-Since、if-Match、if-None-Match或if-Range头字段,则GET方法的语义将更改为“条件GET”。条件GET方法要求仅在条件标头字段描述的情况下传输实体。条件GET方法旨在通过允许刷新缓存的实体来减少不必要的网络使用,而无需多次请求或传输客户端已经持有的数据

  • GET请求是可缓存的。这会减少网络带宽,因为浏览器可能会看到过去已发出的请求,而该请求尚未过期,并通过缓存发出的看似即时的响应进行响应

  • 我在Wireshar监控时测试了这个