目录
TCP/IP
URI / URL
HTTPS
总结时间:
TCP/IP协议簇
对TCP的理解
对UDP的理解
HTTP(超文本传输协议)是什么?
HTTPS(安全超文本传输协议)是什么?
HTTPS的特点:
HTTPS协议对称加密的过程?
HTTP协议的缓存策略有哪些?
强制缓存:
协商缓存:
名词解释来源:http://t.csdn.cn/Znh1f
TCP/IP
TCP/IP 协议你一定听过,TCP/IP 我们一般称之为协议簇,什么意思呢?就是 TCP/IP 协议簇中不仅仅只有 TCP 协议和 IP 协议,它是一系列网络通信协议的统称。而其中最核心的两个协议就是 TCP / IP 协议,其他的还有 UDP、ICMP、ARP 等等,共同构成了一个复杂但有层次的协议栈。
TCP 协议的全称是 Transmission Control Protocol 的缩写,意思是传输控制协议,HTTP 使用 TCP 作为通信协议,这是因为 TCP 是一种可靠的协议,而可靠能保证数据不丢失。
IP 协议的全称是 Internet Protocol 的缩写,它主要解决的是通信双方寻址的问题。IP 协议使用 IP 地址 来标识互联网上的每一台计算机,可以把 IP 地址想象成为你手机的电话号码,你要与他人通话必须先要知道他人的手机号码,计算机网络中信息交换必须先要知道对方的 IP 地址。
URI / URL
我们可以通过输入 www.baidu.com 地址来访问百度的官网,那么这个地址有什么规定吗?我怎么输都可以?AAA.BBB.CCC 是不是也行?当然不是的,你输入的地址格式必须要满足 URI 的规范。
URI的全称是(Uniform Resource Identifier),中文名称是统一资源标识符,使用它就能够唯一地标记互联网上资源。
URL的全称是(Uniform Resource Locator),中文名称是统一资源定位符,也就是我们俗称的网址,它实际上是 URI 的一个子集。
URI 不仅包括 URL,还包括 URN(统一资源名称),它们之间的关系如下
HTTPS
HTTP 一般是明文传输,很容易被攻击者窃取重要信息,鉴于此,HTTPS 应运而生。HTTPS 的全称为 (Hyper Text Transfer Protocol over SecureSocket Layer),全称有点长,HTTPS 和 HTTP 有很大的不同在于 HTTPS 是以安全为目标的 HTTP 通道,在 HTTP 的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在 HTTP 的基础上增加了 SSL 层,也就是说 HTTPS = HTTP + SSL。
总结时间:
TCP/IP协议簇
对TCP的理解
TCP(Transmission Control Protocol)是一种面向连接的传输协议,它提供可靠性、流量控制和拥塞控制等服务,确保数据传输的可靠性和有序性。TCP将数据分成数据段进行传输,每个数据段都有序号和确认号,以确保数据的可靠传输。TCP还通过滑动窗口机制来进行流量控制和拥塞控制,以避免网络拥塞和数据丢失。TCP适用于对可靠性要求较高的应用场景,例如文件传输、电子邮件等。但是,由于TCP需要维护连接状态和进行数据确认等操作,因此相对于UDP来说,TCP的开销更大,传输速度也会稍慢一些。
对UDP的理解
UDP(User Datagram Protocol)是一种无连接的传输协议,它不提供可靠性、流量控制和拥塞控制等服务,但它具有简单、快速、低开销、无状态等特点。UDP将数据分成数据包进行传输,每个数据包都是独立的,它们可以按照任意顺序到达目的地。UDP适用于一些对可靠性要求不高,但要求传输速度快的应用场景,例如视频、音频等实时传输数据。但是,由于UDP不提供可靠性保障,因此在传输过程中可能会出现数据包的丢失或重复等问题。
HTTP(超文本传输协议)是什么?
Http是超文本传输协议,它是应用层的面向对象的协议,它是基于TCP/IP的高级协议,默认端口号是80。它是基于请求响应模型的,即一次请求对应一次响应。它是无状态的,每次请求之间相互独立。HTTP协议请求消息的数据格式为请求行,请求头,请求空行和请求体。请求行中主要包括请求方式,请求url,请求协议和版本等。请求方式在HTTP协议中有7种,最常用的有2种,get和post。如果是get请求,则还会把请求参数拼接到url后;请求头是客户端浏览器想要告诉浏览器的一些信息,如user-Agent(浏览器信息),host(主机地址),reference(请求来源)等。请求空行是用来分割请求头和请求体的;请求体是post请求下封装请求参数的。
HTTPS(安全超文本传输协议)是什么?
HTTPS(Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的HTTP通道,在HTTP的基础上通过身份认证和传输加密阶段保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入TLS(Transport Layer Security 安全传输层协议)/SSL(Secure Sockets Layer 安全套接层协议),HTTPS 的安全基础是 TLS/SSL,因此加密就需要TLS/ SSL。
SSL的全称为Secure Sockets Layer,安全套接层协议。是为网络通信提供安全及数据完整性的一种安全协议。SSL协议在1994年被Netscape发明,后来各个浏览器均支持SSL。
TLS的全称是Transport Layer Security,安全传输层协议。是SSL3.0的后续版本。在TLS与SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操作。虽然TLS与SSL3.0在加密算法上不同,但是在我们理解HTTPS的过程中,我们可以把SSL和TLS看做是同一个协议。
在HTTPS数据传输的过程中,需要用TLS/SSL对数据进行加密,然后通过HTTP对加密后的密文进行传输,可以看出HTTPS的通信是由HTTP和TLS/SSL配合完成的。
HTTPS的特点:
- 内容加密:混合加密方式,对称加密和非对称加密。
- 验证身份:通过证书认证客户端访问的是正确的服务器。
- 数据完整性:防止传输的数据被中间人篡改。
HTTPS协议对称加密的过程?
HTTPS数据加解密过程中数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输。HTTPS协议加密的过程可以分为两个阶段,分别是:
- 证书的认证阶段:使用非对称加解密算法对数据传送阶段的对称加解密密钥进行加密和解密。
- 数据传送阶段:通过证书认证阶段获取到目标服务器的对称加解密密钥,对数据进行加密传送给服务器。
扩展:
HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。数据是被对称加密传输的,对称加密过程需要客户端的一个密钥,为了确保能把该密钥安全传输到服务器端,采用非对称加密对该密钥进行加密传输。总的来说,对数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输。
在整个HTTPS数据传输的过程中一共会涉及到四个密钥:
- CA机构的公钥,用来验证数字证书是否可信任
- 服务器端的公钥
- 服务器端的私钥
- 客户端生成的随机密钥
一个HTTPS请求可以分为两个阶段,证书认证阶段和数据传送阶段。又可以细分为六个步骤:
- 客户端第一次向服务器发起HTTPS请求,连接到服务器的443(默认)端口。
- 服务器端有一个密钥对,公钥和私钥。用来进行非对称加密使用,服务器端保存私钥,不能泄露,公钥可以发送给任何人。服务器将自己的数字证书(包含公钥)发送给客户端。
- 客户端收到服务器端的数字证书之后,会对数字证书进行检查,验证合法性。如果发现数字证书有问题,那么HTTPS传输就中断。如果数字证书合格,那么客户端生成一个随机值,这个随机值是数据传输阶段时给数据对称加密的密钥,然后用数字证书中的公钥加密这个随机值密钥,这样就生成了加密数据使用的密钥的密文。到这时,HTTPS中的第一次HTTP请求就结束了。
- 客户端第二次向服务器发起HTTP请求,将对称加密密钥的密文发送给服务器。
- 服务器接收到客户端发来的密文之后,通过使用非对称加密中的私钥解密密文,得到数据传送阶段使用的对称加密密钥。然后对需要返回给客户端的数据通过这个对称加密密钥加密,生成数据密文,最后将这个密文发送给客户端。
- 客户端收到服务器端发送过来的密文,通过本地密钥对密文进行解密,得到数据明文。到这时,HTTPS中的第二次HTTP请求结束,整个HTTPS传输完成。
HTTP协议的缓存策略有哪些?
HTTP协议的缓存策略有两种,分别是强制缓存和协商缓存,强制缓存的优先级大于协商缓存。强制缓存是服务器告诉浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行协商缓存策略。协商缓存是让客户端与服务器之间能实现缓存文件是否更新的验证、提升缓存的复用率,将缓存信息中的Etag和Last-Modified字段通过请求发送给服务器,由服务器校验。如果文件没有改变,那么直接返回304状态,继续使用浏览器缓存。
HTTP协议的缓存策略是浏览器每次发起请求时,先在本地缓存中查找结果以及缓存标识,根据缓存标识来判断是否使用本地缓存。如果缓存有效,则使用本地缓存,否则,则向服务器发起请求并携带缓存标识。HTTP协议的缓存策略分两种:强制缓存和协商缓存,而强制缓存优先级大于协商缓存。
- 强制缓存:服务器告诉浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行比较缓存策略。
- 协商缓存:让客户端与服务器之间能实现缓存文件是否更新的验证、提升缓存的复用率,将缓存信息中的Etag和Last-Modified
通过请求发送给服务器,由服务器校验。如果文件没有改变,那么直接返回304状态,继续使用浏览器缓存。
HTTP缓存都是从第二次请求开始的:
- 第一次请求资源时,服务器返回资源,并在响应头首部中回传资源的缓存策略。
- 第二次请求时,浏览器判断这些请求参数,击中强缓存就直接返回状态码200,否则就把请求参数加到请求头首部中传给服务器,看是否击中协商缓存,击中则返回304,否则服务器会返回新的资源。
延伸阅读
强制缓存:
- 强缓存命中则直接读取浏览器本地的资源,在network中显示的是from memory或者from disk。
- 控制强制缓存的字段有:Cache-Control(http1.1)和Expires(http1.0)。
- Cache-control是一个相对时间,用以表达自上次请求正确的资源之后的多少秒的时间段内缓存有效。
- Expires是一个绝对时间。用以表达在这个时间点之前发起请求可以直接从浏览器中读取数据,而无需发起请求。
- Cache-Control的优先级比Expires的优先级高。前者的出现是为了解决Expires在浏览器时间被手动更改导致缓存判断错误的问题。如果同时存在则使用Cache-control。
协商缓存:
- 协商缓存的状态码由服务器决策返回200或者304
- 当浏览器的强缓存失效的时候或者请求头中设置了不走强缓存,并且在请求头中设置了If-Modified-Since或者 If-None-Match的时候,会将这两个属性值到服务端去验证是否命中协商缓存,如果命中了协商缓存,会返回 304 状态,加载浏览器缓存,并且响应头会设置 Last-Modified或者ETag属性。
- 对比缓存在请求数上和没有缓存是一致的,但如果是 304 的话,返回的仅仅是一个状态码而已,并没有实际的文件内容,因此在响应体体积上的节省是它的优化点。
- 协商缓存有2组字段(不是两个),控制协商缓存的字段有:Last-Modified/If-Modified-since(http1.0)和Etag/If-None-match(http1.1)。
- Last-Modified/If-Modified-since表示的是服务器的资源最后一次修改的时间。Etag/If-None-match表示的是服务器资源的唯一标识,只要资源变化,Etag就会重新生成。
- Etag/If-None-match的优先级比Last-Modified/If-Modified-since高。