HTTP/HTTPS

五层模型

首先是经典的五层模型:应用层--传输层--网络层--数据链路层--物理层


物理层:主要作用是定义物理设备如何传输数据(电脑的硬件设备相关,网卡端口,网线连出去之后要有一条光缆,为我们传输几千公里以外的数据等)
数据链路层:在通信的实体间建立数据链路连接(物理设备可以把两台设备连接在一起,而这层就相当于是软件让两台设备创建了电路连接)
网络层:为数据在节点之间传输创建逻辑链路(假设我的电脑要去访问百度的服务器,如何去寻找百度服务器就是网络层做的事情)
传输层:向用户提供了可靠的端到端(end-end)服务,主要有两个协议TCP协议UDP协议,网络层建立客户端与服务器端的连接之后要传输数据,那么如何传输,是在这一层定义的。传输层向高层屏蔽了下层数据通信的细节。
应用层:为应用软件提供了很多服务,主要有HTTP协议FTP协议,构建于TCP协议之上,屏蔽了网络传输的相关细节
(OSI七层)将五层中的应用层又分为会话层,表示层以及应用层。
会话层:负责网络中两节点的建立,在数据传输中维护计算机网络中两台计算机的通信连接,并决定何时终止通信。
表示层:负责数据格式的转换,数据解析等。同时也对应用层的协议进行翻译。

HTTP协议的发展之路

HTTP/0.9
内容十分简单,只有一个命令GET,对应get、post等请求方法;
没有HEADER等描述数据的信息
服务器发送完内容,就关闭TCP连接(在一个TCP连接上可以建立多个HTTP连接)
HTTP/1.0
增加了很多命令,如post、put等
增加status code状态码和header数据描述以及操作的方法描述
多字符集支持、多部分发送、权限、缓存等
HTTP/1.1
数据大部分都是字符串形式的,所以数据的分别片方式不太一样
持久连接keep-alive。使连接持续有效
pipeline管线化,可以在同一个连接里发送多个请求,但是服务器端是按请求顺序处理的(串行)
增加host和一些其他命令,有了host就可以在一台设备上同时启动多个服务,通过host可以定位到请求的是哪个软件服务(比如node,Java等)
HTTP/2:主要是为了解决HTTP1.1里面的一些性能低下的问题
所有数据都是以二进制传输的,(按帧传输)
所以同一个连接里面发送多个请求不再按照顺序来处理
头信息压缩以及推送等高效率的功能
HTTP1.1里面 header里面有很多字段都是字符串形式的,占用很多带宽,头信息压缩之后,有效地减少了带宽使用
HTTP1.1里面主动方永远是客户端,服务器端一直是被动方,举个栗子:当请求一个html页面的时候,服务器端先把html源代码发送给客户端,客户端解析到需要引用css和js的部分时再去向服务器端请求css和js文件
而HTTP2里面加入了推送的功能,就可以在客户端请求完html页面之后主动把它需要引用的css和js文件等推送过去,实现了三者的并行传输。

TCP三次握手

第一次握手:client给server发送一个创建连接的请求,带有标志位SYN=1,序列Seq=X,进入SYN_SEND状态,等待server确认。
第二次握手:server收到连接请求,就会开启一个socket接口,确认client的SYN(ACK=X+1),向client返回一个标志位SYN=1,再发一个自己的序列Seq=Y,进入SYN_RECV状态
第三次握手:client收到应答再发送给server一个应答ACK=Y+1,序列Seq=Z,双方进入ESTABLISHED状态,完成三次握手。
三次握手的原因:为了防止服务器端开启一些无用的连接,网络传输是有延时的,如果传输的过程当中客户端的请求被阻塞或者延迟,过一定的时间他没有收到服务器端的应答就会默认本次发送失效,重新再发一次请求,而隔了一段时间之后服务器端接收到了之前的请求,就回去给客户端响应,并且等待他的回应,但此时客户端认为自己没有发送这个请求,是不会响应的。
四次挥手关闭连接
第一次挥手:Clien发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
第二次挥手:Server收到FIN后,发送一个ACK给Client,Server进入CLOSE_WAIT状态。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,发送ACK给Server,Server进入CLOSED状态,完成四次握手.
四次挥手的原因:
当收到对方的FIN报文时,仅表示对方不再发送数据但还能接收收据,我们也未必把全部数据都发给了对方,所以我们可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方表示同意关闭连接。因此我们的ACK和FIN一般会分开发送。

URI

Uniform Resource Identifier/统一资源标识符
用来唯一标识互联网上的信息资源
包括URLURN
URL:Uniform Resource Locator/统一资源定位符
http://user:pass@host.com:80/path?query=string#hash
http:协议
user:pass:用户密码,一般不用
host.com:资源定位,找到这台服务器所在互联网的位置。可以是IP,就可以直接找到目标服务器,也可以是域名,需要DNS解析才能找到目标服务器
80:端口,每一台服务器都有很多的端口,存放了很多的web服务,端口可以定位是具体的哪一个,HTTP协议默认是80,FTP是21,HTTPS是443
path:请求路径
query=string#hash:参数
URN:永久统一资源定位符,在资源移动之后还能被找到,但目前还没有成熟的使用方案

HTTP报文

请求报文
起始行:包含请求方式,请求地址,协议版本
首部:key-value值,告诉服务器端都要什么值,值要什么类型
空行:表示header部分结束了,到了数据部分
主体:数据部分
响应报文
起始行:协议版本,状态码,状态码的含义
首部:key-value值
空行:表示header部分结束了,到了数据部分
主体:响应的数据部分

HTTPS

HTTP是明文协议
1、传递的数据容易被偷窥和篡改对称加密
在每次发送真实数据之前,服务器先生成一把密钥,然后先把密钥传输给客户端。之后服务器给客户端发送真实数据的时候,会用这把密钥对数据进行加密,客户端收到加密数据之后,用刚才收到的密钥进行解密。如果客户端要给服务器发送数据,也是采用这把密钥来加密。


这种加密的密钥传输也是采用明文的方式,因此这种加密对于中间人来说跟明文其实没啥区别,反倒还多了一个加密解密的步骤。
2、密钥的传递问题非对称加密,密钥是一对,公钥和私钥)
数学基础:两个超大的素数求乘积非常容易(私钥),但分解因子很麻烦(公钥)rsa算法
接收端和发送端分别拥有一对公钥和私钥,公钥是可以发送给对方的私钥不可以,加密的时候就先用对方的公钥和己方的私钥加密,再发送给对方,对方用自己的私钥解密。即用公钥加密的数据,只有对应的私钥才能解密;用私钥加密的数据,只有对应的公钥才能解密


3、非对称加密速度特别慢
结合前面两种方式,可以用非对称加密的方式来传输对称加密过程中的密钥,之后我们就可以采取对称加密的方式来传输数据了。具体实现:
服务器用明文的方式给客户端发送自己的公钥(公钥谁知道都没关系),客户端收到公钥之后,会生成一把密钥(对称加密用的),然后用服务器的公钥对这把密钥进行加密,之后再把密钥传输给服务器,服务器收到之后进行解密,最后服务器就可以安全着得到这把密钥了,而客户端也有同样一把密钥,他们就可以进行对称加密了。又会出现如下问题:中间人冒充服务器

而这种方式之所以不安全的原因就在这,是因为客户端并不知道接收到的公钥是不是服务器的
数字证书:可以证明公钥是服务器的一种策略,找到一个拥有公信力,大家都认可的认证中心(CA),服务器在传输公钥的过程中,把公钥以及服务器的个人信息通过Hash算法生成信息摘要:

为了防止信息摘要被人调换,服务器还会用CA提供的私钥对信息摘要进行加密来形成数字签名:

最后把原来没Hash算法之前的个人信息以及公钥 和 数字签名合并在一起,形成数字证书。

当客户端拿到这份数字证书之后,就会用CA提供的公钥来对数字证书里面的数字签名进行解密来得到信息摘要,然后对数字证书里服务器的公钥以及个人信息进行Hash得到另外一份信息摘要。最后把两份信息摘要进行对比,如果一样,则证明这个人是服务器,否则就不是:

这样,就可以保证服务器的公钥安全着交给客户端了。
物理基础:
A、一种颜色 222 444 333
B、一种颜色 111 555 666
新的颜色: 777 判断是哪两个颜色混合出来的
认证完之后SSL结束握手,就开始对称加密传输数据
HTTPS建立完整连接的过程
1、首先简历TCP握手连接
2、进行SSL协议的握手密钥交换
3、通过共同约定的密钥开始通信

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1)OSI与TCP/IP各层的结构与功能,都有哪些协议。 OSI分层 (7层):物理层、数据链路层、网络层、传输层...
    ldlywt阅读 6,785评论 0 26
  • 一、简介 TCP、UDP、HTTP、HTTPS 都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则“说话...
    小道萧兮阅读 11,134评论 2 25
  • 概念及常识 HTTP (Hypertext transfer protocol) 超文本传输协议;详细规定了浏览器...
    石头老张阅读 9,826评论 0 49
  • 撕开夜的乐章 打碎旧的 比如紧箍咒 不再仰望 街对面的高楼 低下头 从平凡里寻找爱的蛛丝马迹 烟火一直在 青山不老...
    红学砖家阅读 3,352评论 5 29
  • 又回到春末的五月,凌晨的集市人不多,小孩在门前在歌唱,阳光它照暖了溪河,柳絮乘着大风吹,树影下的人想睡,沉默的人,...
    嗨嗨_529a阅读 1,157评论 0 0