一个菜鸟前端的自我提升:有关http请求中的get和post请求

knightwatch 2020-07-19

http 请求方法:

在http/1.0中共定义了三种请求方式:get、post、head。
在http/1.1中新增了五种请求方式:options、put、delete、trace、connect。
在这八种方法中get、post这两种是最常见的请求方法。

get与post方法的区别:

1. get请求在url中传参的长度是有限制的,而post没有限制。

2. get相较于post更不安全,因为参数直接暴露在url中,所以get不能传递敏感信息。而post方法数据不会显示在url上,而是放在request body中。

3. get传参的类型只接受ASCII字符,而post没有限制。

4. get请求的参数会被完整的保留在浏览器的历史记录中;相反post请求参数不会被浏览器保留。

5. get请求只能进行url编码(application/x-www-form-urlencoded),而post请求支持多种编码方式。

6. get请求会被浏览器主动缓存,而post请求不会,除非手动设置。

7. get在浏览器回退时是无害的,而post会再次提交请求。

get与post实质:

其实get与post在本质上没有区别,他们都是http协议中的请求方式,而http是基于tcp/ip的有关于数据如何在万维网(world wide web 也就是我们所说的web )中通信的协议。因而get与post请求的底层也是tcp/ip,所以他俩都属于TCP链接,所以在使用的时候给get加上request body,给post带上URL参数在技术上是完全可行的(在我的实习公司就是使用的将参数拼接到post请求的url里面的,当时看到时还在心里骂了两句)所以http只是行为准则,你在使用时要不要遵循这个准则要看自己的想法,实质上他们是没有区别的都是tcp链接,只是由于http的规定和浏览器、服务器的限制,导致他们在应用过程中才出现了不同。### get与post传参的长度问题:据说,大多数浏览器通常会都会限制url长度在2K字节,而大多数服务器最多处理64K字节的url,就是说如果使用get请求,使用request body来传输数据,不同服务器处理方式是不同的,不能保证所有的参数一定能被收到。

get方法参数写法:

在约定中,我们的参数写在?后面用&分割,在报文解析的过程中,是通过tcp获取的数据,用正则等工具来提取数据中的Header和Body,来获得参数。同时也就说明我们可以自己规定参数的写法,只要服务端能解析出来即可。

post方法是不是比get方法更安全:

这个安全是相对而言的,不要以为参数不在地址栏中出现就是安全的,实际上他们都是不安全的,因为Http传输是明文传输,只要在网络节点上抓包,就能获取完整的数据报文。要想安全的传输,也就只有加密(Https)

get与post请求的数据包的格式:

get请求产生一个TCP数据包;post请求产生两个数据包,get请求时浏览器会把头部和数据一并发送出去,服务器响应200;post请求时浏览器先发送头部,服务器响应100 continue ,浏览器在发送data,最后服务器响应200。因为post请求需要两步,理论上消耗时间更多一点,看起来get比post请求更实用,实际上在网络环境好的情况下,发送一次包和两次包的时间差可以无视,而在网络环境差的情况下,两次包的tcp请求在进行数据校验的时候会有很大的优势,而且并不是所有的浏览器post请求都发送两次数据包,火狐就发送一次,所以get、post性能差可以认为忽略吧。

这篇内容是我自己在看了知乎大神推送之后自己总结的,大神讲的真的很形象,建议大家去看大神的文章,本文就作为自己学习知识点的记录。
知乎
看了一下,会不会不给访问? 算了,链接在这里:https://zhuanlan.zhihu.com/p/160816600?utm_source=qq&utm_medium=social&utm_oi=981281993694351360

相关推荐