HTTP协议
1、介绍
HTTP协议
(超文本传输协议:Hyper Text Transfer Protocol)用于从万维网
服务器传输超文本到本地浏览器的传送协议。其基于TCP/IP
通信协议来传递数据,是一个属于应用层
的面向对象
的协议。
特点:
1)简单快速;
2)灵活;
3)无连接;
4)无状态;
5)支持B/S及C/S模式。
2、HTTP请求组成
2.1 请求行
请求类型 请求路径 协议版本
GET / HTTP/1.1
2.2 请求头
Host Referer Cookie Authorization等
2.3 请求体
略
3、HTTP响应组成
3.1 状态行
协议版本 状态码 请求结果
HTTP/1.1 200 OK
3.2 响应头
Access-Control-Allow-Headers Access-Control-Allow-Methods Access-Control-Allow-Origin等
3.3 响应体
4、状态码
4.1 状态码分类
1xx: 指示消息 – 表示已接收请求,继续处理
2xx: 成功 – 表示请求已被成功接收、理解、接受
3xx: 重定向 – 要完成请求必须进行更进一步的操作
4xx: 客户端错误 – 请求有语法错误或请求无法实现
5xx: 服务端错误 – 服务器未能实现合法的请求
4.2 常见状态码
200: 请求成功
400: 请求有语法错误
401: 未授权
403: 鉴权失败
500: 服务端发生错误
503: 服务端当前不能处理请求,一段事件后可能恢复正常
5、请求方式
GET: 请求指定的页面信息,并返回实体主体
HEAD: 类似于GET,只不过响应中没有具体内容(可用于记录用户行为)
POST: 提交表单数据或者上传文件
PUT: 向服务端传送数据取代指定文档的内容
DELETE: 请求服务器删除指定的内容
CONNECT: HTTP/1.1协议中预留能够将连接改为管道方式的代理服务器
OPTIONS: 允许客户端查看服务器的性能
TRACE: 会先服务器收到的请求(主要用于测试或诊断)
( Restful、Restless )
6、HTTP请求/响应步骤(浏览器输入url地址到页面渲染的整个过程)
6.1 客户端连接到Web服务器
HTTP客户端
,通常是浏览器
,首先进行DNS解析
,再与Web服务器的HTTP端口(默认80)
建立一个TCP套接字连接。
6.2 发送HTTP请求
通过TCP套接字
,客户端向Web服务器发送一个文本的请求报文,请求报文由请求行
、请求头部
、空行
、请求数据
4部分组成。
6.3 服务器接受请求并返回HTTP响应
Web服务器
解析请求
、鉴权
、定位请求资源
、按照HTTP协议进行响应
。服务器将资源复本
写到TCP套接字,由客户端
读取。响应由状态行
、响应头部
、空行
、响应数据
4部分组成。
6.4 释放TCP链接
若Connection模式
为close
,则服务器主动关闭TCP连接
,客户端被动关闭连接
,释放
TCP连接;Connection模式
为keep-alive
,则该连接会保持一段时间
,在该时间内可以继续接收请求。
6.5 客户端浏览器解析HTML内容
首先解析状态行
,查看表明请求是否成功的状态码。然后解析每个响应头
,响应头
告知以下为HTML文档
的字符集。客户端
读取响应数据HTML
,根据HTML语法
对其进行格式化
,并在浏览器窗口中显示。
7、 HTTP 1.0、 HTTP 1.1、HTTP 2.0
7.1 HTTP 1.0、 HTTP 1.1、HTTP 2.0在并发请求上的主要区别
7.1.1 HTTP 1.0
每个TCP连接
只能发送一次请求
,当服务器响应后
就会关闭
这个连接,下一次请求需再次建立TCP连接。
7.1.2 HTTP 1.1
默认采用持久连接
,Connection: keep-alive。取消持久连接Connection: close。增加了管道机制
,在同一个TCP连接
里允许多个请求同时发送,按照到达服务器的顺序
开始处理,当前请求处理完后再处理下一个请求。
缺点:队头阻塞
7.1.3 HTTP 2.0
加了双工模式
,服务器也可以同时处理多个请求
了,解决了队头阻塞的问题。多路复用
,没有了次序
的概念。加了服务器推送功能
。
7.2 HTTP 1.1的长连接和HTTP 2.0多路复用的区别
7.2.1 HTTP 1.1
同一时间一个TCP连接
只能处理一个请求
,采用一问一答
的形式,上一个请求响应后才能处理下一个请求。
7.2.2 HTTP 2.0
同域名
上的所有通信都在单个连接
上完成。单个连接上可以并行交错
的进行请求和响应。
7.3 为什么HTTP 1.1不能实现路由的复用
HTTP 2.0
是基于二进制帧
的协议,HTTP 1.1
是基于文本分隔解析的协议。
HTTP 1.1
的报文结构中,服务器需要不断的读入字节
,直到遇到换行符
,处理顺序是串行
的。
HTTP 2.0
以帧
为最小数据单位,每个帧
都会标识自己属于哪个流
,多个帧组成一个流
。多路复用
,其实就是TCP
里存在多条流
。
7.4 更多
HTTP 1.0、 HTTP 1.1、HTTP 2.0的详细区别参考博文:https://www.cnblogs.com/heluan/p/8620312.html