Http你不知道的事情

96 阅读6分钟

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协议之上,
在HTTPTCP之间添加一个安全协议层(SSLTSL),这个时候,就成了我们常说的HTTPS.

跨域后端设置

cors设置:

Access-Control-Allow-Origin:'*'

Access-Control-Allow-Methods:'POST....'