网页网站培训班,广告公司怎么取名,各大搜索引擎入口,建立个人网站能干原文章#xff1a;https://blog.csdn.net/qq_28483283/article/details/80207674 请优先参考原文章 Get和Post在面试中一般都会问到#xff0c;一般的区别#xff1a; #xff08;1#xff09;post更安全#xff08;不会作为url的一部分#xff0c;不会被缓存、保存在服… 原文章https://blog.csdn.net/qq_28483283/article/details/80207674 请优先参考原文章 Get和Post在面试中一般都会问到一般的区别 1post更安全不会作为url的一部分不会被缓存、保存在服务器日志、以及浏览器浏览记录中 2post发送的数据更大get有url长度限制 3post能发送更多的数据类型get只能发送ASCII字符 4post比get慢 5post用于修改和写入数据get一般用于搜索排序和筛选之类的操作淘宝支付宝的搜索查询都是get提交目的是资源的获取读取数据 虽然在开发中经常用get或者post请求但是由于我们资历经验的欠缺或许就重来没有深究过什么场合用get请求什么场合用post请求我相信不止我一个人当看到第4,5条的时候就会明白为什么面试官对我们的回答不满意也明白了自己对get或post用法理解的欠缺那么get比post更快究竟快多少呢表现在那些方面 一、为什么get比post更快 1.post请求包含更多的请求头 因为post需要在请求的body部分包含数据所以会多了几个数据描述部分的首部字段如content-type,这其实是微乎其微的。 2.最重要的一条post在真正接收数据之前会先将请求头发送给服务器进行确认然后才真正发送数据 post请求的过程 1浏览器请求tcp连接第一次握手 2服务器答应进行tcp连接第二次握手 3浏览器确认并发送post请求头第三次握手这个报文比较小所以http会在此时进行第一次数据发送 4服务器返回100 Continue响应 5浏览器发送数据 6服务器返回200 OK响应 get请求的过程 1浏览器请求tcp连接第一次握手 2服务器答应进行tcp连接第二次握手 3浏览器确认并发送get请求头和数据第三次握手这个报文比较小所以http会在此时进行第一次数据发送 4服务器返回200 OK响应 也就是说目测get的总耗是post的2/3左右这个口说无凭网上已经有网友进行过测试。 3.get会将数据缓存起来而post不会 可以做个简短的测试使用ajax采用get方式请求静态数据比如html页面图片的时候如果两次传输的数据相同第二次以后消耗的时间将会在10ms以内chrome测试而post每次消耗的时间都差不多。经测试chrome和firefox下如果检测到get请求的是静态资源则会缓存如果是数据则不会缓存但是IE什么都会缓存起来当然应该没有人用post去获取静态数据吧反正我是没见过。 4.post不能进行管道化传输 http权威指南中是这样说的http的一次会话需要先建立tcp连接大部分是tcp但是其他安全协议也是可以的然后才能通信如果 每次连接都只进行一次http会话那这个连接过程占的比例太大了于是出现了持久连接在http/1.0中是connection首部中添加keep-alive值在http/1.1中是在connection首部中添加persistent值当然两者不仅仅是命名上的差别http/1.1中持久连接是默认的除非显示在connection中添加close否则持久连接不会关闭而http/1.0中则恰好相反除非显示在connection首部中添加keep-alive否则在接收数据包后连接就断开了。 出现了持久连接还不够在http/1.1中还有一种称为管道通信的方式进行速度优化把需要发送到服务器上的所有请求放到输出队列中在第一个请求发送出去后不等到收到服务器的应答第二个请求紧接着就发送出去但是这样的方式有一个问题不安全如果一个管道中有10个连接在发送出9个后突然服务器告诉你连接关闭了此时客户端即使收到了前9个请求的答复也会将这9个请求的内容清空也就是说白忙活了……此时客户端的这9个请求需要重新发送。这对于幂等请求还好比如get多发送几次都没关系每次都是相同的结果如果是post这样的非幂等请求比如支付的时候多发送几次就惨了肯定是行不通的。 所以post请求不能通过管道的方式进行通信很有可能post请求需要重新建立连接这个过程不跟完全没优化的时候一样了么所以在可以使用get请求通信的时候不要使用post请求这样用户体验会更好当然如果有安全性要求的话post会更好。管道化传输在浏览器端的实现还需考证貌似默认情况下大部分浏览器除了opera是不进行管道化传输的除非手动开启 二、get传参最大长度的理解误区 1.总结 1http协议并未规定get和post的长度限制 2get的最大长度限制是因为浏览器和web服务器限制了URL的长度 3不同的浏览器和web服务器限制的最大长度不一样 4要支持IE则最大长度为2083byte若支持Chrome则最大长度8182byte 2.误解 1首先即使get有长度限制也是限制的整个URL的长度而不仅仅是参数值数据长度http协议从未规定get/post的请求长度限制是多少 2所谓的请求长度限制是由浏览器和web服务器决定和设置的各种浏览器和web服务器的设定均不一样这依赖于各个浏览器厂家的规定或者可以根据web服务器的处理能力来设定。IE 和 Safari 浏览器 限制 2kOpera 限制4kFirefox 限制 8k非常老的版本 256byte如果超出了最大长度大部分的服务器直接截断也有一些服务器会报414错误。 3.各个浏览器和web服务器的最大长度总结 浏览器 1IEIE浏览器Microsoft Internet Explorer 对url长度限制是20832K53超过这个限制则自动截断若是form提交则提交按钮不起作用。 2firefoxfirefox火狐浏览器的url长度限制为 65536字符但实际上有效的URL最大长度不少于100,000个字符。 3chromechrome谷歌的url长度限制超过8182个字符返回本文开头时列出的错误。 4SafariSafari的url长度限制至少为 80 000 字符。 5OperaOpera 浏览器的url长度限制为190 000 字符。Opera9 地址栏中输入190000字符时依然能正常编辑。 服务器 1ApacheApache能接受url长度限制为8 192 字符 2IISMicrosoft Internet Information Server(IIS)能接受url长度限制为16384个字符。这个是可以通过修改的IIS7 转载于:https://www.cnblogs.com/tarenacode/p/11382828.html