1. HTTP 请求的方法
- GET POST HEAD PUT DELETE CONNECT OPTIONS TRACE
- 返回响应Code
1系列:临时会议,标识客户端请继续
2系列:请求成功
3系列:标识请求的目标有变化 希望客户端进一步处理
4系列:客户端请求错误
5系列:服务端请求错误
- Http请求常用四种格式
application/json
application/x-wwww-form-urlencoded 表单提交
mutipart/form-data 文件上传
text/xml xml格式
- Accept 浏览器接受的格式
Accept 浏览器接受的格式
Accept-Encoding 浏览器端接收的编码方式
Accept-Language 浏览器端接受的语言,用于服务端判断多语言
Cache-Control 控制缓存的时效性
Connection 连接的方式 如果是keep-alive 且服务端支持,则会复用连接
Host Http访问使用的域名
If-Modified-Since 上次访问时更改时间,如果服务端认为此时间后自己没有更新,则会给出304响应
if-None-Match 上次访问时使用的Etag 通常是页面的信息摘要,这个比更改时间更加的准确一些
Use-Agent 客户端标识,因为一些历史原因,这是一笔糊涂账
多数浏览器的这个字段比较负责,区别比较微妙 Cookie 客户端存储Cookie的字符串
- 响应头 Content-type:text/html 会进行渲染 Content-type:octet-stream 会进行下载
2. Http https
Http2多路复用,就是多个请求一起打包发送出去,作为一个 https外部加了套子,将http明文转换为密文
- 对比
Http
1.请求无状态,
2.短链接,总要即销毁,所以请求也快,
3.同时也是明文,请求和确认无法通信方确认,所以无法保证数据的完整性
Https
1.内容加密,混合加密的形式,中间截获也无法查明文
2.通过证书验证访问的是不是自己的服务器
3.保证了数据的完整性
Https实现原理:SSL
1.客户端发送请求链接到服务端443端口,发送的信息是加密算法和随机值1组成
2.服务端收到握手信息,其中包括随机值2和协商加密算法(为客户端发送的子集)
3.服务端发送数字证书给客户端,这套证书就是一对公钥和私钥,传输证书,这个证书就是公钥。
4.客户端拿到证书,验证证书是否有限(过期时间,机构,第三方认证机构等),然后生成一个随机值(预主秘钥)
5.客户端将随机值1、随机值2、预主秘钥生成秘钥,然后通过公钥加密会话秘钥
6.发送会话秘钥是为了让服务端解析这个随机值1.随机值2和会话秘钥
7.服务端然后重新组装会话秘钥和客户端相同,
8.客户端发送信息通过会话秘钥/服务端通过发送信息给客户端,如果两者都能成功,则SSL层建立连接成功
无法缓存的情况:
Cache-Control:no-cache
pragma:no-cache,nostore
Cache-Control:max-age=0
POST请求
请求头不包括Last -Modifined/Etag 并且Cache-Control/Expires
HTTP1和HTTP2的区别
1.Http1.x
缺陷:请求有数量限制,超过数目请求会被阻塞。
2.Http1.0(短连接) 缺陷:
浏览器的每次请求都需要与服务器建立一个TCP连接
(TCP连接的新建成本很高,因为需要客户端和服务器三次握手),
服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求;
解决方案:添加头信息——非标准的Connection字段Connection: keep-alive
3. Http1.1 改进点:
3.1持久连接(与Http1其它版本的最大区别),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive(对于同一个域名,大多数浏览器允许同时建立6个持久连接)
3.2管道机制 即在同一个TCP连接里面,客户端可以同时发送多个请求。
3.3分块传输编码 即服务端每产生一块数据,就发送一块,采用”流模式”而取代”缓存模式”。
3.4新增请求方式
PUT:请求服务器存储一个资源;
DELETE:请求服务器删除标识的资源;
OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求;
TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断;
CONNECT:保留将来使用
缺点:虽然允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。
服务器只有处理完一个请求,才会接着处理下一个请求。
如果前面的处理特别慢,后面就会有许多请求排队等着。这将导致“队头堵塞”
避免方式:
一是减少请求数,
二是同时多开持久连接
4. Http/2.0 特点:
采用二进制格式而非文本格式; 完全多路复用,而非有序并阻塞的、只需一个连接即可实现并行;
(解决了线头阻塞的问题,与Http1最重要的区别)
使用报头压缩,降低开销 服务器推送
4.1 二进制协议 HTTP/1.1 版的头信息肯定是文本(ASCII编码),数据体可以是文本,也可以是二进制。
HTTP/2 则是一个彻底的二进制协议,头信息和数据体都是二进制,
并且统称为”帧”:头信息帧和数据帧。 二进制协议解析起来更高效、“线上”更紧凑,更重要的是错误更少。
4.2 完全多路复用 HTTP/2 复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,
而且不用按照顺序一一对应,这样就避免了”队头堵塞”。
4.3 报头压缩 HTTP 协议是没有状态,导致每次请求都必须附上所有信息。
所以,请求的很多头字段都是重复的,比如Cookie,一样的内容每次请求都必须附带,
这会浪费很多带宽,也影响速度。 对于相同的头部,不必再通过请求发送,只需发送一次;
HTTP/2 对这一点做了优化,引入了头信息压缩机制;
一方面,头信息使用gzip或compress压缩后再发送;
另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,
产生一个索引号,之后就不发送同样字段了,只需发送索引号。
4.4 服务器推送 HTTP协议通常承载于TCP协议之上,
在HTTP和TCP之间添加一个安全协议层(SSL或TSL),这个时候,就成了我们常说的HTTPS.
跨域后端设置
cors设置:
Access-Control-Allow-Origin:'*'
Access-Control-Allow-Methods:'POST....'