这篇文章不详细讲解HTTP协议
基本的HTTP大家应该熟悉,这里就不额外进行详细的讲解了。
计算及网络分层
- 1.应用层
- 2.传输层
- 3.网络层
- 4.数据链路层
- 5.物理层
HTTP
- 1.http(超文本传输协议) ,是用于应用层,用来进行服务端和客户端进行文件传输的协议。
- 2.HTTP是无连接,无状态的一种协议,常用的HTTP1.0,常用端口为80端口,其是以TCP为基础进行的传输。
- 3.在HTTP的所有传输过程中,你的数据包全部是明文显示
常见的HTTP方法
1.GET 请求指定的页面信息,并返回实体主体。
2.HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3.POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。
POST 请求可能会导致新的资源的建立和/或已有资源的修改。
4.PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5..DELETE 请求服务器删除指定的页面。
6.CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7.OPTIONS 允许客户端查看服务器的性能。
8.TRACE 回显服务器收到的请求,主要用于测试或诊断。
9.PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。
HTTP1.1
1.缓存处理, 在header中加入了if-modified-Since,Expires来作为缓存判断的标准,服务器可以识别发起请求的资源有没有进行变化,如果没有变化,则可直接使用上次请求获得的资源
2.长连接,在HTTP1.1中支持长连接和请求的流水线(pipling)。在一个TCP链接上可以传送多个HTTP请求和相应, 减少了建立和关闭连接的消耗和延迟。HTTP中是默认开启KEEP-ALIVE。减少了资源消耗。
4.带宽优化和网络链接使用
5.HOST头处理
HTTP2.0
1.新的二进制格式(Binary Format), HTTP1.1的解析是基于文本。基本文本协议的格式解析存在天然缺陷,考虑到场景的增多,HTTP2.0采用二进制格式。
2.多路复用(Multiplexing),连接共享,每一个request都是用作链接共享机制的。一个request对应一个id,这样一个连接上可以有多个request, 每个连接的requerst可以随机混杂在一起,接受方可以根据request的id将requerst在归属到各自不同的服务端请求里面。
3.header压缩 使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields 表。避免了重复header的传输,又减少了需要传输的大小
4.服务器推送 Server push 功能
HTTP3.0
1.解决队头阻塞问题 , HTTP2.0协议的多路复用机制解决了HTTP层的队头阻塞问题,但是在TCP层仍然存在队头阻塞问题。CP协议在收到数据包之后,这部分数据可能是乱序到达的,但是TCP必须将所有数据收集排序整合后给上层使用,如果其中某个包丢失了,就必须等待重传,从而出现某个丢包数据阻塞整个连接的数据使用。
QUIC协议是基于UDP协议实现的,在一条链接上可以有多个流,流与流之间是互不影响的,当一个流出现丢包影响范围非常小,从而解决队头阻塞问题。
2.0RTT 建链, 衡量网络建链的常用指标是RTT Round-Trip Time,也就是数据包一来一回的时间消耗。RTT包括三部分:往返传播时延、网络设备内排队时延、应用程序数据处理时延。一般来说HTTPS协议要建立完整链接包括:TCP握手和TLS握手,总计需要至少2-3个RTT,普通的HTTP协议也需要至少1个RTT才可以完成握手。QUIC协议可以分为首次连接和非首次连接
3.前向纠错, QUIC每发送一组数据就对这组数据进行异或运算,并将结果作为一个FEC包发送出去,接收方收到这一组数据后根据数据包和FEC包即可进行校验和纠错。
4.连接迁移 TCP协议使用五元组来表示一条唯一的连接,当我们从4G环境切换到wifi环境时,手机的IP地址就会发生变化,这时必须创建新的TCP连接才能继续传输数据。QUIC协议基于UDP实现摒弃了五元组的概念,使用64位的随机数作为连接的ID,并使用该ID表示连接。基于QUIC协议之下,我们在日常wifi和4G切换时,或者不同基站之间切换都不会重连,从而提高业务层的体验。
UDP优点
1.基于TCP开发的设备和协议非常多,兼容困难
2.TCP协议栈是Linux内部的重要部分,修改和升级成本很大
3.UDP本身是无连接的、没有建链和拆链成本
4.UDP的数据包无队头阻塞问题
5.UDP改造成本小
QUIC其实是Quick UDP Internet Connections的缩写,直译为快速UDP互联网连接。
数据包在整个网络的移动
当你在浏览器输入了网址之后,通过DNS获取·了目标的IP地址,然后TCP建立连接,然后发送http请求,在数据链路层,数据包就会沿着如下图的顺序进入网络,通过一个一个的节点传送到目的地。
1.HTTP使用的是80端口
2.HTTPS使用的是443端口
在80端口路线的所有节点上,都可以使用代理进行拦截,修改,查看。所以你的个人信息在HTTP中都是存在安全隐患的。
HTTPS通过443端口连接沟通加密算法。
HTTPS
1.HTTPS协议需要到CA申请证书,一般免费证书很少,需要缴费
2.HTTP协议运行在TCP之上,所有的传输都是铭文,HTTPS运行在SSL/TLS之上, SSL/TLS运行在TCP之上,所有的传输内容都是经过加密的
3.HTTPS使用443 端口, HTTP使用80端口
4.HTTPS可以有效的防止运行商劫持,解决了防劫持的一个大问题
流程:
当使用HTTPS发送数据信息的时候,发送端使用签名对内容进行摘要算法得出摘要,发送(原本数据+摘要+算法)发送给接收端
浏览器向443端口请求加密算法- 传输加密算法->保证安全,不被拦截
浏览器向80端口发送请求
加密算法decode(密文)
加密的过程:私钥 ->数据->加密->密文->公钥->原文
浏览器持有公钥,使用公钥加密->密文->使用私钥解密->原文
公钥加密,私钥解密
非对称加密建立连接,对称机密进行通信
问题1:如果使用公钥伪造数据呢
用私钥加密,中间人用公钥解密,可以查看原文内容,但是此时它无法使用公钥进行加密还原,因为他无法获得私钥。此时就会出现一个问题,不能篡改但是可以进行查看
问题2: 第三者在中间拦截你的公钥然后再用自己的私钥进行解密,加密,同样内容会被篡改
中间者第三人可以生成一组公钥和私钥。他先使用公钥解密然后查看内容,然后将原文用自己的私钥进行加密,再传递给服务端。
CA第三方证书验证
有了上面的问题2,第三方CA可以使用自己的私钥生成出->CA公钥。浏览器保存CA的公钥,服务器把服务器端的公钥提交给CA。
CA.私钥(服务器端公钥) = 密文
浏览器使用CA.公钥进行解密,这样浏览器可以查看密文内容。CA的公钥时不进行传输,整个网络上的人就无法解密CA的密文。
使