前言:以下都是自己的总结,或多或少会有错误,若有错误,希望能够指出
1.HTTP
HTTP:超文本传输协议(Http,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。 传输的是
2.HTTP报文:
- 请求头:常见的头部字段:juejin.cn/post/684490…
- 请求行
- 空行
- 请求体
HTTP请求的方法
- GET: 通常用来获取资源
- POST: 提交数据,即上传数据
- PUT: 修改数据
- OPTIONS: 列出可对资源实行的请求方法,用来跨域请求
GET和POST的区别
- 传输的不同,GET 请求会把请求报文一次性发出去,而 POST 会分为两个 TCP 数据包,首先发 header 部分,如果服务器响应 100(continue), 然后发 body 部分。(火狐浏览器除外,它的 POST 请求只发一个 TCP 包)
- 安全性不同:POST的数据因为在请求主体内,所以有一定的安全性保证,而GET的数据在URL中,通过历史记录,缓存很容易查到数据信息。
- 缓存的不同,GET 请求会被浏览器主动缓存下来,留下历史记录,而 POST 默认不会。
- 数据类型不同:GET只允许 ASCII 字符,而POST无限制
- 特性不同:GET是安全(这里的安全是指只读特性,就是使用这个方法不会引起服务器状态变化)且幂等(幂等的概念是指同一个请求方法执行多次和仅执行一次的效果完全相同),而POST是非安全非幂等
HTTP状态码
1)200,代表请求成功,从客户端发送的请求在服务端被正常处理了
2)301:永久重定向,请求的资源已经分配了新的URI,以后应该使用资源现在所指的URI
3)302:临时重定向,请求的资源临时分配了新的URI,希望用户本次可以使用新的URI访问
4)304:服务器已执行了请求,但资源没有变化
5)400:由于语法无效,服务器无法理解该请求
6)401:由于缺乏目标资源要求的身份验证凭证,发送的请求未得到满足。
7)403:服务器已经理解请求,但是拒绝执行它。
8)404:代表请求的资源未在服务器上找到
9)500:服务器在执行请求时发生了错误,无法完成请求
HTTP的优点:
- 无状态:无状态的意思是其数据包的发送、传输和接受都是相互独立的。
- 无连接:无连接的意思是指通信双方都不长久的维持对方的任何信息。
- 灵活:主要体现在两个方面。一个是语义上的自由,只规定了基本格式,比如空格分隔单词,换行分隔字段,其他的各个部分都没有严格的语法限制。另一个是传输形式的多样性,不仅仅可以传输文本,还能传输图片、视频等任意数据,非常方便。
HTTP的缺点:
- 无状态
- 明文传输
- 队头阻塞问题:当 http 开启长连接时,共用一个 TCP 连接,同一时刻只能处理一个请求,那么当前请求耗时过长的情况下,其它的请求只能处于阻塞状态,也就是著名的队头阻塞问题。接下来会有一小节讨论这个问题。
https
是以安全为目标的Http通道,是Http的安全版。也加上相当于加了一层ssl
ssl:握手的过程
HTTP和HTTPS的区别:
- 1.https协议需要到CA申请证书,费用较高
- 2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议
- 3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- 4、http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全
HTTP2.0的升级
- 头部压缩:在 HTTP/1.1 及之前的时代,请求体一般会有响应的压缩编码过程,通过Content-Encoding头部字段来指定,但你有没有想过头部字段本身的压缩呢?当请求字段非常复杂的时候,尤其对于 GET 请求,请求报文几乎全是请求头,这个时候还是存在非常大的优化空间的。
- 多路复用:我们之前讨论了 HTTP 队头阻塞的问题,其根本原因在于HTTP 基于请求-响应的模型,在同一个 TCP 长连接中,前面的请求没有得到响应,后面的请求就会被阻塞。 HTTP/2 便从 HTTP 协议本身解决了队头阻塞问题。注意,这里并不是指的TCP队头阻塞,而是HTTP队头阻塞,两者并不是一回事。TCP 的队头阻塞是在数据包层面,单位是数据包,前一个报文没有收到便不会将后面收到的报文上传给 HTTP,而HTTP 的队头阻塞是在 HTTP 请求-响应层面,前一个请求没处理完,后面的请求就要阻塞住。两者所在的层次不一样。
- 二进制分帧:HTTP/2 认为明文传输对机器而言太麻烦了,不方便计算机的解析,因为对于文本而言会有多义性的字符,比如回车换行到底是内容还是分隔符,在内部需要用到状态机去识别,效率比较低。于是 HTTP/2 干脆把报文全部换成二进制格式,全部传输01串,方便了机器的解析。
- 服务器推送:外值得一说的是 HTTP/2 的服务器推送(Server Push)。在 HTTP/2 当中,服务器已经不再是完全被动地接收请求,响应请求,它也能新建 stream 来给客户端发送消息,当 TCP 连接建立之后,比如浏览器请求一个 HTML 文件,服务器就可以在返回 HTML 的基础上,将 HTML 中引用到的其他资源文件一起返回给客户端,减少客户端的等待。