HTTP协议
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

浙公网安备 33010602011771号