HTTP常用方法,状态码,请求报文与响应报文格式
HTTP协议的缺点
安全方面
a、通信使用明文不加密,内容可能被窃听
b、不验证通信方身份,可能遭到伪装
c、无法验证报文完整性,可能被篡改
其他
HTTP头消耗不必要的流量;
不方便主动推送消息(WebSocket,轮询);
HTTPS交互过程
https://www.jianshu.com/p/ba92b59a6e2e
https://imququ.com/post/optimize-tls-handshake.html
HTTPS的缺点
1.握手阶段造成计算消耗大,交互次数多,影响访问速度;
2.一般网站由HTTP跳转到HTTPS的方式增加了访问耗时;
3.安全算法消耗CPU资源;
4.某些SSL证书要钱;
Connection: Keep-Alive
HTTP1.1中所有请求都默认为长连接(服务端可能有默认连接超时时间)
优点
1.不需要经常建立及关闭连接,节省建立连接的开销;
2.允许HTTP pipelining的请求模式;
3.减少了后续请求的响应时间;
轮询,长轮询,长连接
轮询
客户端定时向服务端发送请求,服务器接到请求后马上返回响应信息并关闭连接。
优点:后端程序编写比较容易。
缺点:请求中有大半是无用,浪费带宽和服务器资源。
长轮询
客户端向服务器发送请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。
优点:在无消息的情况下不会频繁的请求,耗费资源小。
缺点:服务器hold连接会消耗资源。
长连接
在页面里嵌入一个隐蔵iframe,将这个隐蔵iframe的src属性设为对一个长连接的请求或是采用xhr请求,服务器端就能源源不断地往客户端输入数据。 (直接使用Websocket也可以达到相同效果)
优点:消息即时到达,不发无用请求;管理起来也相对方便。
缺点:服务器维护一个长连接会增加开销。
Chunk
服务端一般通过Content-Length字段告诉客户端数据长度,但有时候服务器需要动态生成数据,这时候不可能预先知道内容大小,这时候就可以使用Transfer-Encoding:chunk模式
chunk编码格式如下:
[chunk size][\r\n][chunk data][\r\n][chunk size][\r\n][chunk data][\r\n][chunk size = 0][\r\n][\r\n]
HTTP1.1的管线化
HTTP管线化可以克服同域并行请求限制带来的阻塞,它是建立在持久连接之上,是把所有请求一并发给服务器,但是服务器需要按照顺序一个一个响应,而不是等到一个响应回来才能发下一个请求,这样就节省了很多请求到服务器的时间。不过,HTTP管线化仍旧有阻塞的问题,若上一响应迟迟不回,后面的响应都会被阻塞到。
HTTP缓存
强制缓存
Expires 到期时间,HTTP1.1使用Cache-Control代替
Cache-Control private/public/max-age/no-cache/no-store
对比缓存
Last-Modified/If-Modified-Since 根据时间
Etag/If-None-Match 根据Etag(生成规则由服务器决定),优先级较高