工作内容偏向数据交互,所以会 经常遇到GET和POST请求。用的时候只是根据API文档去写的,但是使用它们中的一个的原因是如何来的呢?
首先他们是什么呢?
GET和POST是什么?HTTP协议中的两种发送请求的方法。
HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。
HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。所以,它俩到底有什么不一样呢?
从以下几个方面来思考下:
- 怎么提交参数
- 参数数据的安全性
- 根据API文档说明,能支持哪个?
- 参数的数据格式和长度
我们可以根据实践经历总结得到:GET请求中对应上面三个思考:
- GET请求在发起时,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)。期间,GET产生一个TCP数据包。
- 第一:数据可以被放在params里面,可以在控制台看到。或者是直接拼接在请求地址中传参;第二:在一次请求完成后,这个过程中的数据参数将会保留在浏览器的缓存中。————从安全性来说,这样是很差的,因为参数直接暴露了。尤其是涉及到关键的用户信息时。所以一般不建议以GET去提交某些敏感信息。
- 我们发送get是希望从服务器上获取数据,这个层面意思是说,在与后端的协作中有个后端提供给前端的接口文档,这时候会有对每一个接口做必要性的说明。这里也包括接口请求方式,只需要根据文档要求来写axios或者是ajax的method参数的值,就可以了。
- 根据w3c的标准规范,GET请求它只能支持ASCII字符。当然鉴于数据若放在地址后面做拼接是需要规定它的最大长度的。一般来说提交的数据最大是2k;(原则上url 长度无限制,但大多数浏览器通常都会限制url 长度在2k(2048字节byte))
POST请求呢?
- 发起POST请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。也就是类似于一种有预告的请求。当让不是所有的浏览器都会在POST请求中发两个数据包,火狐就只有一个。
- 相对来说,它的数据安全性还有保障的。它的参数被放在请求体中*(POST放在Request body中)。在一次请求完成后,这个过程中的数据参数将会被销毁,不会保留在浏览器的缓存中。
- 一般来说,post请求需要向服务器传送数据。所以在对接提交表单数据的接口中是常用的。
- POST请求对于参数的长度以及类型没有限制。并且POST支持多种编码方式。
那么是不是GET请求真的是很少用?
不是的,它的某些优点——它的请求是可以加标签(markBook)的,因为GET请求的过程中参数被留在自己的地址中了,从收藏的标签中可以正常完成请求的过程,而POST的参数没有这个优势,所以不能加markBook(标签)。
总结:GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
参考:(感谢这位作者)https://www.cnblogs.com/logsharing/p/8448446.html。