赞
踩
1.HTTP1.1支持长连接,在一个TCP连接上可以进行多次请求和响应,减少了建立和关闭连接的消耗和延迟(Connection: Keep-Alive);而HTTP1.0每次请求都需要重新创建连接;
2.带宽优化:HTTP1.1在请求头引入了range头域,允许只请求资源的某一部分,实现断点续传功能优化带宽;而HTTP1.0每次请求都从文件头开始传输整个数据资源;
3.(gzip压缩?)
通过SPDY方案对http1.x进行了优化,并衍生出HTTP2.0。两者区别:HTTP2.0 支持明文 HTTP 传输,而 SPDY强制使用 HTTPS;
1. 2.0采用二进制格式,而HTTP1.x是基于文本进行解析;文本具有多样性因此需要考虑的场景很多
HTTP/2 不再像 HTTP/1.1 里的纯文本形式的报文,而是全面采用了二进制格式,头信息和数据体都是二进制,并且统称为帧(frame):头信息帧和数据帧。
这样虽然对人不友好,但是对计算机非常友好,因为计算机只懂二进制,那么收到报文后,无需再将明文的报文转成二进制,而是直接解析二进制报文,这增加了数据传输的效率。
2. 2.0多路复用:
HTTP/2 是可以在一个TCP连接中并发多个请求或回应,而不用按照顺序一一对应。移除了 HTTP/1.1 中的串行请求,不需要排队等待,也就不会再出现「队头阻塞」问题,降低了延迟,大幅度提高了连接的利用率。 建立的连接中接收方根据id再归属到不同的服务端请求中即可;
举例来说,在一个 TCP 连接里,服务器收到了客户端 A 和 B 的两个请求,如果发现 A 处理过程非常耗时,于是就回应 A 请求已经处理好的部分,接着回应 B 请求,完成后,再回应 A 请求剩下的部分。
3. 2.0head头部压缩:减小传输大小。采用HPACK
算法:在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。(gzip是http1.1采用的,http2已经不用了)
HTTP/2 主要的问题在于,多个 HTTP 请求在复用一个 TCP 连接,下层的 TCP 协议是不知道有多少个 HTTP 请求的。所以一旦发生了丢包现象,就会触发 TCP 的重传机制,这样在一个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来。
这都是基于 TCP 传输层的问题,所以 HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP!
UDP 发生是不管顺序,也不管丢包的,所以不会出现 HTTP/1.1 的队头阻塞 和 HTTP/2 的一个丢包全部重传问题。大家都知道 UDP 是不可靠传输的,但基于 UDP 的 QUIC 协议 可以实现类似 TCP 的可靠性传输。
所以, QUIC 是一个在 UDP 之上的伪 TCP + TLS + HTTP/2 的多路复用的协议。 QUIC 是新协议,对于很多网络设备,根本不知道什么是 QUIC,只会当做 UDP,这样会出现新的问题。所以 HTTP/3 现在普及的进度非常的缓慢,不知道未来 UDP 是否能够逆袭 TCP。
1.HTTP(超文本传输协议)运行在TCP上,传输的内容都是明文;HTTPS(超文本传输安全协议)运行在SSL(依靠证书来验证服务器身份并进行通信加密)/TLS之上,然后再运行再TCP上,传输内容都属经过加密的;
2.此外,HTTPS用的是443端口,HTTP用的是80端口
提起HTTPS加密,不得不提一下加密方式:
对称加密:加密与解密使用的是同样的共享密钥,所以速度快,但由于需要将密钥在网络传输,容易导致密钥泄漏,难以保证消息可靠性。
非对称加密:采用非对称时,客户端和服务端均拥有一个公钥和私钥,公钥对外开放,私钥只有自己方可见,公钥加密只有私钥才能解密;这样,客户端在发送消息前先用服务端公钥加密,消息到了服务端,服务端自己再用私钥解密; 优点是安全,缺点:比对称加密慢,其次如果客户端发送的过程中公钥被中间人替换了,这样服务端无法确认公钥正确性;
由于对称和非对称都有缺点,所以HTTPS采用数字证书的方式进行加密
一般是服务端主动去向CA(认证中心)申请数字证书(公钥),这个数字证书ssl就是作为公钥,前面不是说非对称加密怕公钥被替换了嘛,这里在CA申请的公钥就不会出现这种情况:
首先客户端需要确认服务端的身份是否合法:
客户端发起请求服务端地址,
服务端响应返回证书(包含公钥,还有其他认证信息);
客户端验证这个证书是否合法,如果是CA认证的,浏览器不会有任何反应,如果是服务端自己私建的,浏览器会弹窗让用户选择是否信任此证书。
客户端确认证书合法代表信任了服务端,然后就是传送通讯秘钥的过程:
客户端自己生成了一个随机字符串作为通讯秘钥,并用公钥对通讯秘钥加密(还包括通讯用的加密算法),
发送给服务端,
服务端用私钥解密得到了通讯秘钥和通讯加密算法。
开始传输报文:
服务端使用通讯秘钥和约定好的通讯加密算法对报文加密并返回,此后客户端和服务端的报文都会使用此秘钥和算法加密传输(对称加密)。
HTTPS在传输的过程中会涉及到三个密钥:
以上3步就是一次完整的TLS握手过程, 因此https创建链接经历了3次TCP握手 + 1次TLS握手;
组成:请求行(含请求方法GET或POST等,以及URL (Uri一般用来定位本地文件,URL一般用来网络请求))),请求头部,请求数据
GET和POST区别:
1.GET可以提交少量参数,放在URL之后用?分开,参数和参数间用&连接,eg:baidu.com?name=test1&id=123456; 而POST会把提交的数据放到请求数据中;
2.GET提交数据有大小限制(因为浏览器对URL有长度限制,1024个字符),而POST方法提交的数据没有限制;
3.GET方式提交关键信息如用户名密码等会出现在URL中 并不安全;
含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。例如:
Accept:浏览器能接受的媒体类型;
Accept-language:可接受的语言
Cookie:用来存储一些用户信息以便让服务器辨别用户身份的(cookie是存储在本地浏览器,而session存储在服务器,是一种服务器端的机制,服务器使用一种类似于hastable的结构来保存信息);
GET中没有请求数据而POST中有,POST适用于客户填写表单场合;
组成:状态行(含响应码),首部行(响应结果的长度,响应结果的类型等等),实体主体(响应正文);
被包含在状态行中,常见响应码有:
响应头中还包含了一些缓存控制的信息:
相关文章链接:HTTP 缓存相关的响应头信息 - 简书
一次HTTP操作称为一个事务,其工作整个过程如下:
1 ) 、地址解析
如用客户端浏览器请求这个页面:http://localhost.com:8080/index.htm
在这一步,需要通过DNS(域名和ip的远端关系解析器)去解析域名localhost.com 从而拿到主机的IP地址(因为用的是TCP/IP协议,所以要拿IP)。
这一步有可能出现dns劫持;
相对与 DNS,HTTPDNS 的主要优点如下:
降低时延
缩短了查询链路。不像 DNS 查询那样需要访问多台 DNS 服务器,分别从根域名到各级域名查询,才能得到最终的结果;
域名防劫持
域名解析请求直接发送至HTTPDNS服务器,绕过运营商 Local DNS,避免域名劫持问题
(注意DNS有缓存,优先缓存策略下,如果出现连接不上后台服务的情况,先清除缓存试试)
2)、封装HTTP请求数据包
把以上部分结合本机自己的信息,封装成一个HTTP请求数据包
3)封装成TCP包,建立TCP连接(TCP的三次握手)
在HTTP工作开始之前,客户端首先要通过网络与服务端连接,通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。
4)客户机发送请求命令
建立连接后,客户机发送一个HTTP请求响应给服务器
5)服务器响应
服务器接到请求后,返回HTTP响应信息
6)服务器关闭TCP连接(四次挥手)
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码 Connection:keep-alive 就代表需要保持连接不断开;
7)浏览器渲染
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。