目录
一、HTTP是什么?
http是一种超文本传输协议,可以传输文本,视频,图片,音频,超链接等,是一种应用层的传输数据的规范。
二、HTTP报文格式
1.请求报文
请求报文包括请求行,请求头,空行,请求主体
请求行包括请求方法,URL,协议版本
1.1请求方法
http1.0 请求方法常见的是get和post方法,get用于请求服务器数据(对服务器数据没影响的场景,比如请求页面),post会向服务端发送数据(会改变服务器数据的内容,比如注册)
http1.1又加入head,options,put等
put与post的区别:post会创建新的资源,而put是更新资源
get和post的区别:
1.get的请求信息写在URL中,没有请求体,而且URL的字数受限;post请求信息写在请求体中,请求不受限制。
2.get请求会被浏览器缓存,post一般不会。
3.post相较于get更安全,因为URL属于明文传输。
4.get会产生一个数据包直接把头部和数据一起发,post会产生两个数据包先发头部服务器响应100,再发data。
1.2URL的组成部分
https :协议名;
learn.microsoft.com:域名;
端口:一般在域名后面用:连接(http默认为80端口,https为443,都省略);
/zh-cn/dotnet/api/system.web.ui.webcontrols.treenode.target服务器上的资源路径;
redirectedfrom=MSDN&view=netframework-4.8:查询条件(用&隔开的键值对,post请求一般不会带参数,get会);
#System_Web_UI_WebControls_TreeNode_Target:锚点;
1.3版本号:描述协议所用版本。
1.4请求头
携带一些可选项,类似于键值对;
比如 host:127.... 指明服务器的域名
connect:keep-alive持久连接,等等
二.http1.0与http1.1的区别
1.头部加入了host,1.0认为一个服务器绑定一个ip,但是现在一台物理主机可以有多个虚拟机共享一个ip,因此加入host传递主机名。
2.头部加入keep-alive,1.0默认为短连接传输完成后自动断开,1.1默认开启keep-alive长连接避免多次连接带来的延时。
3.头部加入了range,允许请求资源的某个部分,返回码为206,1.0默认传递整个对象会造成资源浪费
4.1.1引入了更多的缓存控制策略。
三.http2.0
1.实现了请求的多路复用且采用流水线技术,1.0采用的是请求-应答的模式, 将请求放入队列中,先入先出处理,这会造成队头堵塞,而多路复用解决阻塞问题,每个tcp连接可处理多个请求和应答,http是基于tcp协议的,而tcp采用慢启动的方式逐步加大传输量,这让短时性和突发性的http变得很低效,多路复用可以更有效的使用tcp连接。
2.数据流:多路复用导致可以无序发送数据包,可能一个链接的连续数据包属于不同请求,因此http2.0将每个请求或相应的所有数据包称为一个数据流,每个数据流有一个ID便于区分;
3.优先级:提高重要请求的优先级,比如先加载浏览器首页,在加载其他静态资源;
4.header压缩机制:头部有一些信息每次请求都重复发送且内容重复,比如cookie,agent等,
客户端和服务器分别维护 静态索引字典,动态索引字典,静态哈夫曼编码
对于完全相同的就用索引代替
5.服务器推送:
服务器可以未经请求将一些静态资源同主页发送到客户端,提前推送一些必要的资源,减少延迟;
6.采用二进制格式,1.x解析基于文本,这需要考虑很多场景,二进制只有01组合增强程序健壮性且实现方便。