首页天道酬勤httpclientpost请求,前端的性能优化有哪些

httpclientpost请求,前端的性能优化有哪些

张世龙 05-06 06:14 26次浏览

这是我前端开发中常用的代码,记录了小常识的系列。 有些参考了网上的代码。 (互相交流,添加喜欢的东西吧。

Wx: Lxp911221

Get和Post在面试中通常被问到,常见的区别如下。

)1)开机自检更安全(不作为url的一部分缓存、存储在服务器日志中或存储在浏览器浏览历史记录中)。

)2) post发送的数据更大(get有url长度的限制) ) ) )。

)3) post可以发送更多的数据类型(get只能发送ASCII字符) )。

)4)开机自检比get慢

) post用于修改和写入数据,get一般用于搜索排序和过滤等操作(淘宝、支付宝的搜索查询均由get提交),目的是获取资源、读取数据

在开发中经常使用get和post请求,但由于我们经验的不足,可能没有深入考虑过在什么情况下使用get请求,在什么情况下使用post请求。 不仅仅是我,如果看到第4、5条的时候,你知道为什么面试官对我们的回答不满意,也知道自己对get和post的使用方法理解不够,你就会知道get比post快,有多快。在这些方面,你表现出来了

一、为什么get比开机自检快

1.post请求包括更多的请求标头

由于post需要在请求的body节中包含数据,因此会添加一些数据描述节(如content-type )的开头字段,但实际上这一点很少。

2 .最重要的是,开机自检应在实际接收数据之前,在实际发送数据之前将请求头发发送到服务器进行确认

开机自检请求流程:

)1)浏览器请求tcp连接(首次握手) )。

)2)服务器接受tcp连接(第二次握手)。

(3)浏览器进行确认,发送post请求报头(由于第三次握手这个消息很小,所以http在这个时候进行第一次数据发送) )。

)4)服务器返回100 Continue响应

)5)浏览器发送数据

)6)服务器返回200 OK响应

获取请求流程:

)1)浏览器请求tcp连接(首次握手) )。

)2)服务器接受tcp连接(第二次握手)。

)3)浏览器进行确认,发送get请求报头和数据(第三次握手,因为该消息小,所以http此时进行第一次数据发送) )。

)4)服务器返回200 OK响应

也就是说,目视get的总消费量为post的2/3左右,此口无凭,网上已经有网民进行了测试。

3.get缓存数据,但不开机自检

可以进行简单的测试。 使用ajax以get方式请求静态数据(例如html页、图像)时,如果两次传输的数据相同,则第二次以后的消耗时间将在10ms以内,但每次开机自检都会消耗相同的时间。 如果测试结果显示chrome和firefox检测到get请求静态资源,则将其缓存。 对于数据,不缓存,但IE将缓存任何内容。 当然,没有人会为了获取静态数据而使用开机自检吧。 反正我没见过。

4.post不能进行流水线化传输

根据http授权指南,在http的单个会话中,在通信之前必须建立tcp连接。 大多数是tcp,但其他安全协议也可以。 如果每次连接只运行一次http会话,则此连接进程的百分比太大,因此出现了持续连接。 在http/1.0中,向连接标头添加了keep-alive值,在http/1.1中,向连接标头添加了持久性值。 当然,除了命名差异外,http/1.1并不关闭默认为持久连接的持久连接,但http/1.0则相反。 除非在连接标头中添加了keep-alive,否则在接收到包后连接将断开。

即使发生持久连接也还不够。 在http/1.1中,也有通过被称为管道通信的方式进行速度优化的方式。 将需要发送到服务器的所有请求放入输出队列,在发送第一个请求后,第二个请求将立即发送,而不等待服务器的响应。 但是,这种方式不安全。 如果一个管道有10个连接,在发送9个后,服务器突然告诉我连接中断了。 此时,客户端即使收到前九个请求的答复,也会清空这九个请求的内容。 也就是说,忙起来了……此时,客户端的这9个请求需要重新发送。 这个对于幂等要求还没有,例如get的情况下,可以多次发送。 每次都是同样的结果。 (像开机自检这样的非幂等请求)的情况下,例如付款的时候,多次发送会很悲惨。 ),不会顺利吧。

所以,开机自检请求不能用管道通信! 也许,开机自检请求需要重新建立连接。 这个过程不是和没有完全优化的情况一样吗? 因此,在可以使用get请求通信时,不使用开机自检请求会更好地体验用户。 当然,如果有安全要求,开机自检更好。 在浏览器端实现管道化传输还需要考证,默认情况下大多数浏览器(opera除外)似乎除非手动打开,否则不会进行管道化传输。

二、get传入最大长度的理解误区

1 .总结

)1) http协议没有规定get和post长度的限制

)2) get的最大长度限制是因为浏览器和web服务器限制了URL的长度

)3)不同的浏览器和web服务器

,限制的最大长度不一样
(4)要支持IE,则最大长度为2083byte,若支持Chrome,则最大长度8182byte

2.误解
(1)首先即使get有长度限制,也是限制的整个URL的长度,而不仅仅是参数值数据长度,http协议从未规定get/post的请求长度限制是多少
(2)所谓的请求长度限制是由浏览器和web服务器决定和设置的,各种浏览器和web服务器的设定均不一样,这依赖于各个浏览器厂家的规定或者可以根据web服务器的处理能力来设定。IE 和 Safari 浏览器 限制 2k,Opera 限制4k,Firefox 限制 8k(非常老的版本 256byte),如果超出了最大长度,大部分的服务器直接截断,也有一些服务器会报414错误。

3.各个浏览器和web服务器的最大长度总结
浏览器
(1)IE:IE浏览器(Microsoft Internet Explorer) 对url长度限制是2083(2K+53),超过这个限制,则自动截断(若是form提交则提交按钮不起作用)。
(2)firefox:firefox(火狐浏览器)的url长度限制为 65536字符,但实际上有效的URL最大长度不少于100,000个字符。
(3)chrome:chrome(谷歌)的url长度限制超过8182个字符返回本文开头时列出的错误。
(4)Safari:Safari的url长度限制至少为 80 000 字符。
(5)Opera:Opera 浏览器的url长度限制为190 000 字符。Opera9 地址栏中输入190000字符时依然能正常编辑。
服务器
(1)Apache:Apache能接受url长度限制为8 192 字符
(2)IIS:Microsoft Internet Information Server(IIS)能接受url长度限制为16384个字符。这个是可以通过修改的(IIS7)
configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryStringsetting.

ajaxget和post区别,get和post传参的区别