| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> HTTP1.x协议详解和HTTP2.0 -> 正文阅读 |
|
[系统运维]HTTP1.x协议详解和HTTP2.0 |
HTTP协议详细
HTTP的诞生1989 年 3 月 CERN(欧洲核子研究组织) 的蒂姆 ? 伯纳斯 - 李(Tim BernersLee)博士提出了一种能让远隔两地的研究者们共享知识的设想,蒂姆 ? 伯纳斯 - 李也成为万维网之父。 一、HTTP介绍http简称超文本传输协议,属于应用层协议,基本用于应用之间的数据传输,常用于web方向,是基于tcp的应用层协议,有时候还会基于ssl,tsl就是我们说的https协议 没有人能够全面掌握互联网中的传输状况 二、HTTP的组成http属于一个文本协议,通过客户端和服务器之间的规则来实现特定的效果 1. HTTP组成报文格式及实例请求报文格式下面是自制服务器,使用谷歌浏览器发送请求的报文(以公开,可访问)具体内容:
响应报文格式
URL和URI
URI的格式如下:
1.协议:该http的协议为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议。在"HTTP"后面的“//”为分隔符 2.域名:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用 3.端口:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口 http为80,https为443 4.路径:从域名后的第一个“/”开始到最后一个“?”,不是一个URL必须的部分 5.片段部分:从“#”开始到最后,都是锚部分”。不是一个URL必须的部分 6.参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“query = 1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符,不是一个URL必须的部分 2.HTTP的请求方法根据 HTTP 标准,HTTP 请求可以使用多种请求方法。
例如:
三、HTTP的版本
HTTP1.1特点持久连接节省通信量HTTP 1.0 : 规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个 TCP 连接,服务器完成请求处理后立即断开 TCP 连接,服务器不跟踪每个客户也不记录过去的请求。
而HTTP/1.1默认是支持长连接的,有没有这个请求头都行。 http长连接也不会一直保持,一般服务端都会设置keep-alive超时时间。超过指定的时间间隔,服务端就会主动关闭连接。同时服务端还会设置一个参数叫最大请求数,比如当最大请求数是300时,只要请求次数超过300次,即使还没到超时时间,服务端也会主动关闭连接。
管道化( Pipelining)HTTP Pipelining是这样一种技术:在等待上一个请求响应的同时,发送下一个请求 Host 头处理:
HTTP 1.0 :中认为每台服务器都绑定一个唯一的 IP 地址,因此,请求消息中的 URL 并没有传递主机名。但随着虚拟主机技术的发展,一台服务器上可以存在多个虚拟主机,共享一个 IP 地址。 缓存处理
错误状态码的增多http1.1新增了24个错误状态响应码,丰富的错误码更加明确各个状态 HTTP2.0(2).HTTP2.0和HTTP1.X相比的新特性 二进制分帧HTTP/2 采用二进制格式传输数据,而非 HTTP 1.x 的文本格式,二进制协议解析起来更高效。 HTTP / 1 的请求和响应报文,都是由起始行,首部和实体正文(可选)组成,各部分之间以文本换行符分隔。HTTP/2 将请求和响应数据分割为更小的帧,并且它们采用二进制编码。虽然HTTP1.1 的纯文本形式看起来一目了然,非常直观,但这只是对人的体验而言,事实上这种方式存在多义性,例如大小写、空白字符、回车换行、多字少字等,程序在处理的时候需要复杂的处理。效率比较低且麻烦,而二进制的方式,只是0和1,可以严格规定字段大小,顺序,标志位等,不存在歧义,提交小,同时也提升了数据在网络中传输的效率。 头部压缩HTTP 1.1请求的大小变得越来越大,有时甚至会大于TCP窗口的初始大小,因为它们需要等待带着ACK的响应回来以后才能继续被发送。Gzip只会对请求体进行压缩,现在HTTP 2.0 提供了首部压缩方案。现在SPDY和HTTP 2.0都支持首部压缩,前者使用的是DEFLATE算法,而后者使用专门设计的HPACK算法进行压缩传输,能够节省消息头占用的网络的流量。 想要深入直接跳转:http://www.blogjava.net/yongboy/archive/2015/03/20/423655.html
帧长度Length:无符号的自然数,24个比特表示,仅表示帧负载所占用字节数,不包括帧头所占用的9个字节。默认大小区间为为0~16,384(214),一旦超过默认最大值214(16384),发送方将不再允许发送,除非接收到接收方定义的SETTINGS_MAX_FRAME_SIZE(一般此值区间为2^14 ~ 2^24)值的通知。 帧类型Type:8个比特表示,定义了帧负载的具体格式和帧的语义,HTTP/2规范定义了10个帧类型,这里不包括实验类型帧和扩展类型帧 报文头压缩和解压和HTTP/1一样,HTTP/2报头字段包含一个或多个相关的键值对。报头字段会在HTTP请求/响应报头和服务器推送操作中使用。原先为文本字段,现在需要使用HTTP报头压缩进行序列化成报头分块,作为HEADERS 、 PUSH_PROMISE、CONTINUATION等帧的负载传输出去。 解压缩采用的HPACK协议,具体可参考:http://http2.github.com/http2-spec/compression.html 接收端合并接收到的帧组装成报头分块,解压缩还原报头集合。 一个完整的报头分块包含: - 单个包含报头终止标记END_HEADERS的HEADERS、PUSH_PROMISE帧,或者 - HEADERS、PUSH_PROMISE帧不包含的END_HEADERS标记,后续跟随一个或多个CONTINUATION帧,最后一个CONTINUATION帧包含了END_HEADERS标记。 报头压缩是有状态的,在一个完整的连接中,一方的压缩上下文环境,另一方的解压的上下文环境,都是需要具备的。报头解码失败需要作为连接错误COMPRESSION_ERROR对待。 HTTP2 的帧类型
例如 HEADER
字段列表: - Pad Length:受制于PADDED标志控制是否显示,8个比特表示填充的字节数。 - E:一个比特表示流依赖是否专用,可选项,只在流优先级PRIORITY被设置时有效 - Stream Dependency:31个比特表示流依赖,只在流优先级PRIORITY被设置时有效 Weight:8个比特(一个字节)表示无符号的自然数流优先级,值范围自然是(1~256),或称之为权重。只在流优先级PRIORITY被设置时有效 - Header Block Fragment:报头块分片 - Padding:填充的字节,受制于PADDED标志控制是否显示,长度由Pad Length字段决定 所需标志位: END_STREAM (0x1): 报头块为最后一个,意味着流的结束。后续可紧接着CONTINUATION帧在当前的流中,需要把CONTINUATION帧作为HEADERS帧的一部分对待 END_HEADERS (0x4): 此报头帧不需分片,完整的一个帧。后续不再需要CONTINUATION帧帮忙凑齐。若没有此标志的HEADER帧,后续帧必须是以CONTINUATION帧传递在当前的流中,否则接收者需要响应PROTOCOL_ERROR类型的连接错误。 PADDED (0x8): 需要填充的标志 PRIORITY (0x20): 优先级标志位,控制独立标志位E,流依赖,和流权重。 注意事项: - 其负载为报头块分片,若内容过大,需要借助于CONTINUATION帧继续传输。若流标识符为0x0,结束段需要返回PROTOCOL_ERROR连接异常。HEADERS帧包含优先级信息是为了避免潜在的不同流之间优先级顺序的干扰。 - 其实一般来讲,报文头部不大的情况下,一个HEADERS就可以完成了,特殊情况就是Cookie字段超过16KiB大小,不常见。 多路复用HTTP 1.0的模式是,建立连接请求数据完毕之后就立即关闭连接;后来采用了keep-alive保活模式使得可以复用连接不断开,可以利用这次连接继续请求数据。但是始终会有一个缺点,就是你必须等待服务器返回上一次的请求数据你才可以进行下一次的请求。
服务器推送HTTP2中服务端可以在发送页面HTML时主动推送其它资源,而不用等到浏览器解析到相应位置,发起请求再响应。 例如服务端可以主动把JS和CSS等一些静态主动推送给客户端,而不需要客户端解析HTML时再发送这些请求。 四.HTTP和HTTPS区别HTTP既是超文本传输协议,用于从网络传输超文本数据到本地浏览器的协议。HTTPS是以安全为目标的HTTP通道,在其基础上加入了证书机制进行加密。区别在于,一个有证书加密一个没有证书,在安全上具有差异;端口上也不同,HTTP是80端口,HTTP是443端口。 HTTP 默认工作在 TCP 协议 80 端口,用户访问网站 http:// 打头的都是标准 HTTP 服务。 HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。 HTTPS 默认工作在 TCP 协议443端口,它的工作流程一般如以下方式:
HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。 与HTTP关系密切的协议:IP、TCP和DNSipip就是互联网中,每一个网络的唯一标识,其中根据ip段,网络结构区分为外网ip和内网ip,局域网 ARP地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址 DNS负责域名解析的DNS服务 总结HTTP1.1
HTTP2.0
参考: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 9:49:26- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |