天天看点

get请求和post请求区别

1.​HTTP协议​

1.1 HTTP协议的特点

无论是POST还是GET请求,都是基于​超文本传输协议​(​HTTP​)的,而HTTP协议是TCP/IP协议族的应用层协议。

HTTP协议客户端请求request消息包括以下格式:

请求行(request line)、请求头部(header)、空行、请求数据      
get请求和post请求区别

服务端响应response也由四个部分组成,分别是:

  • http响应行
  • http响应头
  • 空行
  • http响应体
get请求和post请求区别

1.2 请求方法

HTTP协议定义了多种请求方式,具体如下:​

​GET​

​:​获取资源​,用来请求访问已被URI(统一资源标志符,和URL是包含和被包含的关系)识别的资源。​

​POST​

​:用来​传输实体的主体​,虽然GET也可以实现,但是一般不用。​

​PUT​

​:​传输文件​。但是鉴于PUT方法自身不带验证机制,任何人都可以上传文件,存在安全性问题,因此一般网站都不采用该方法。​

​HEAD​

​:​获得报文首部​。和GET请求一样,只是不返回报文主体部分。​

​DELETE​

​:​删除文件​。同样不带验证机制,存在安全性问题。​

​OPTIONS​

​:​询问指定的请求URI支持哪些方法​。​

​TRACE​

​:​追踪路径​,让Web服务器将之前的请求通信环回给客户端的方法。​

​CONNECT​

​:要求在​与代理服务器通信时建立隧道​,实现隧道协议进行TCP通信。

2 ​POST和GET请求区别的常见误区​

2.1 请求参数长度限制:GET请求长度最多1024kb,POST对请求数据没有限制**

关于此点,在HTTP协议中没有对URL长度进行限制,这个限制是​不同的浏览器及服务器​由于有不同的规范而带来的限制。

2.2 GET请求一定不能用request body传输数据**

GET​可以带request body,但不能保证一定能被接收到​。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你读出数据,有些服务器直接忽略。

2.3 POST比GET安全性要高**

这里的安全是相对性,通过GET提交的数据都将显示到URL上,页面会被浏览器缓存,其他人查看历史记录会看到提交的数据,而POST不会。另外GET提交数据还可能会造成CSRF攻击。

2.4 GET产生一个TCP数据包,POST产生两个TCP数据包**

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200 OK(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 OK(返回数据)。注意,​

​尽管POST请求会分两次,但body 是紧随在 header 后面发送的,根本不存在『等待服务器响应』一说​

​。

3 ​POST和GET请求的区别小结​

  • ​请求参数​:GET请求参数是通过URL传递的,多个参数以&连接,POST请求放在request body中。
  • ​请求缓存​:GET请求会被缓存,而POST请求不会,除非手动设置。
  • ​收藏为书签​:GET请求支持,POST请求不支持。
  • ​安全性​:POST比GET安全,GET请求在浏览器回退时是无害的,而POST会再次请求。
  • ​历史记录​:GET请求参数会被完整保留在浏览历史记录里,而POST中的参数不会被保留。
  • ​编码方式​:GET请求只能进行url编码,而POST支持多种编码方式。
  • ​对参数的数据类型​:GET只接受ASCII字符,而POST没有限制。