请求方法
- GET、POST、PUT、DELETE、OPTIONS、HEAD、CONNECT、TRACE
get和post区别
- get请求通过URL传输数据;post请求数据放在body里
- get请求相对比较安全
- get请求只允许ASCII字符;post请求没有限制
- get请求是幂等的;post请求是非幂等的
- get请求后退或刷新无害;post请求会重复提交
- get语义上是获取数据;post请求语义上是发送数据
post和put的区别
- post可以操作资源集,向目录下添加东西,post一次添加一次,非幂等
- put是幂等的,比如编辑某个资源
常用状态码
- 200: 请求正常处理
- 301: 永久重定向
- 302: 临时重定向
- 401: 请求需要认证
- 404: 服务器无法找到对应资源
- 500: 服务器内部错误
常用首部
类型相关
- Accept(请求头) / Content-Type(响应头)
- Accept-Encoding:支持的压缩类型(gzip)
缓存相关
- 强缓存:Cache-Control,Expires(响应头)
- 协商缓存:Etag(响应头) / If-None-Match(请求头),Last-Modified(响应头) / If-Modified-Since(请求头)
Cookie相关
- Set-Cookie (响应头)
- Cookie(请求头)
重定向相关
- Referer:来源 (请求头)
- Location:重定向到的地址(响应头)
跨域相关
- Origin:只会精确到端口 (请求头)
- Access-Control-Allow-Headers
- Access-Control-Allow-Methods
- Access-Control-Allow-Origin
持久连接相关
- 默认就是持久连接,Connection: close(请求头,关闭持久连接)
- http1.0 可以使用Connection: keep-alive (请求头)/ Keep-Alive: timeout=3 (响应头,代表TCP连接空闲等待的时间)
- 客户端如何判断响应数据接收完成
- Content-Length(响应头)
- 动态内容可以分块传输。Transfer-Encoding: chunked (响应头,最后内容会传0,说明传输完成)
http/1.1 的优点
持久连接
- 只要任意一端没有明确提出断开连接,则保持TCP连接状态
- Chrome同一个域名下最多建立6个TCP连接
- 虽然TCP连接可以共用,但是http请求还是要串行发送
管线化
- 可以同时在一个TCP连接内并行发送http请求,不用等待前一个响应
- 由于http的报文没有序号,所以必须按顺序接收响应;若前一个http请求迟迟收不到响应,会阻塞之后的请求
websocket
特点
- 全双工(需要客户端先发送连接请求,连接成功后,可以互发信息)
- 通信量少
- 基于TCP协议,但是需要先发送一个http请求,将协议转换到websocket
- 先发送一个http请求,申请转换协议。其中“Sec-WebSocket-Key”头信息是一个随机到经过base64编码的字符串;
Connection: Upgrade Upgrade: websocket Sec-WebSocket-Key: **** Sec-WebSocket-Version: 13- 服务端接收到该字符串后,会追加一个固定的“魔串”:258EAFA5-E914-47DA-95CA-C5AB0DC85B11,并进行SHA-1加密,然后再次经过base64编码生成一个新的key,作为响应头中的“Sec-WebSocket-Accept”字段的内容返回给浏览器。响应状态码为101
Connection: upgrade sec-websocket-accept: **** upgrade: websocket- 一旦浏览器接收到来自服务器的响应,便会解析响应中的“Sec-WebSocket-Accept”字段,与自己加密编码后的串进行匹配,一旦匹配成功,便有建立连接的可能了
HTTP/2.0 的优点
二进制分帧
- HTTP/2 采用二进制格式传输数据,而非 HTTP 1.x 的文本格式,二进制协议解析起来更高效。
- 请求响应到消息由一个或多个帧组成
头部压缩
- 只发送差异数据,而不是全部发送,从而减少头部的信息量
多路复用
- 一个TCP连接可以并行发送http请求,每个请求有个ID,根据ID来识别该请求
服务端推送
- 请求html页面时,把相关资源推送过去(遵守同源策略)