HTTP与HTTPS知识点详解
一、TCP/UDP
1.1、TCP
TCP(Transmission Control Protocol:传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP的主要特点有:
- 基于流的方式
- 面向连接
- 可靠通信方式
- 支持错误重传方式
- 支持拥塞控制,能够在网络拥堵的情况下延迟发送
- 提供错误校验和,甄别有害的数据包
1.2、UDP
UDP(User Datagram Protocol:用户数据报协议),为应用程序提供了一种无需建立连接就可以发送封装的IP数据包的方法。无需建立连接,即不需要所谓的握手操作,从而加快了通信速度,允许网络上的其他主机在接收方同意通信之前进行数据传输。
数据报是与分组交换网络关联的传输单元
UDP的特点:
- 可以发送大量的数据包(因为不建立连接,也就不需要维护连接窗台,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息)
- 尽最大努力交付,不保证可靠交付
- 面向报文的
- 没有拥塞控制,网络出现的拥塞不会使源主机的发送速率降低
- 支持一对一、一对多、多对一、多对多的交互通信
- UDP的首部开销小,只有8个字节,比TCP得0个字节首部要短
1.3、TCP和UDP的不同
| TCP | UDP |
|---|---|
| TCP面向连接(TCP在发送数据前需要先建立连接,然后再发送数据,并且有发送确认) | UDP面向无连接(UDP无需建立连接就可以发送大量数据,并且没有发送确认) |
| TCP面向字节流 | UDP面向报文 |
| TCP头部字节20字节 | UDP头部字节只有8字节 |
| TCP会按照特定顺序重新排列数据包 | UDP数据包没有固定顺序,所有数据包都相互独立 |
| TCP是重量级的,在发送数据前要三次握手建立连接 | UDP是轻量级的,没有跟踪连接,消息排序等 |
| TCP会进行错误校验,并能够进行错误恢复 | UDP也会错误检查,但会丢弃错误的数据包 |
| TCP传输速度较慢 | UDP传输速度较快 |
| TCP是可靠的,因为它可以确保将数据传送到服务器 | UDP是不可靠的,不能保证将数据传输到目标 |
| 每一条TCP连接都只能是点到点的 | UDP没有建立连接,可以n对n(n=[1,...,n]) |
1.4、TCP三次握手
首先要了解一下一下基本概念:
| 消息类型 | 描述 |
|---|---|
| SYN(Synchronize Sequence Numbers:同步序列编号) | 用来初始化和建立连接。在客户机和服务器之间建立TCP连接时,首先会发送的一个信号,客户端在接收到SYN信息时,就会在自己的段内生成一个随机值X |
| SYN-ACK | 服务器收到SYN后,打开客户端连接,发送一个SYN-ACK作为答复。确认号设置为比接受到的序列号多一个,即X+1,服务器为数据包选择的序列号是另一个随机数Y |
| ACK(Acknowledge Character:确认字符) | 表示发来的数据已确认接收无误。 |

- 第一次握手:客户端尝试建立连接,向服务器发送SYN包,客户端进入SYN_SEND状态等待服务器确认。
- 第二次握手:服务器接收客户端SYN包并确认,同时向客户端发送确认包(SYN+ACK包),此时服务器进入SYN_RECEIVED状态
- 第三次握手:客户端接收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
用比较生活化的说法就是:(客户端-小明,服务端-小红)
- 小明给小红打电话,接通了后,小明说喂,能听到吗,这就相当于是连接建立。
- 小红给小明回应,能听到,你能听到我说的话吗,这就相当于是请求响应。
- 小明听到小红的回应后,好的,这相当于是连接确认。在这之后小明和小红就可以通话/交换信息了。
1.5、TCP四次挥手
TCP连接要断开的时候使用四次挥手,连接的每一端都会独立的终止,过程如下:

- 第一次挥手:客户端数据传输完毕需要断开连接,向服务器发送连接释放报文段(FIN、seq),并停止发送数据,进入FIN-WAIT-1状态,等待服务器确认。
- 第二次挥手:服务器接收到FFIN信息后,立即向客户端发送ACK确认消息,服务器进入CLOSE-WAIT关闭等待状态,此时的TCP处于半关闭状态,A到B到的连接释放。客户端收到服务器的确认后,进入FIN-WAIT-2状态,等待来自服务器的FIN消息
- 第三次挥手:当服务器数据传输完毕后,会向客户端发送来FIN消息,服务器进入LAST_ACK状态,等待客户端的最后确认
- 第四次挥手:客户端接收到服务器的FIN信息后,向服务器发送ACK确认消息,进入TIME_WAIT状态。此时TCP未释放,等待一定时间后,客户端进入CLOSED状态。
同样用比较生活化的说法就是:(客户端-小明,服务端-小红)
- 小明对小红说,我所有的东西都说完了,我要挂电话了。
- 小红说,收到,我这边还有一些东西没说。
- 经过若干秒后,小红也说完了,小红说,我说完了,现在可以挂断了
- 小明收到消息后,又等了若干时间后,挂断了电话。
1.6、TCP/IP网络模型
一般是五层模型:

但是也可以分成四层,就是把链路层和物理层合二为一表示成网络接口层:

还有一种是OSI七层网络模型,在五层协议的基础上加了会话层和表示层:

二、HTTP
2.1、HTTP
HTTP(HyperText Transfer Protocal:超文本传输协议)是一种用于在web上传输超媒体文件的底层协议。简单来说就是一种发布和接收HTML页面的方法,被用于在web浏览器和网站服务器之间传递信息。
HTTP主要分为三部分:超文本、传输、协议。
- 超文本,即说明不单单只是传输文本,还可以传输图片、音频、视频,甚至点击文字或图片能够进行超链接的跳转。
- 传输,即数据需要经过一系列的物理介质从一个端系统传送到另一个端系统的过程。通常我们把传输数据包的一方称为请求方,接受二进制数据包的一方称为应答方。
- 协议,即网络中传递、管理信息的一些规范。
HTTP协议以明文形式发送内容,不提供任何方式的数据加密,如果攻击者截取了web浏览器和网站服务器之间的传输报文,就可以获取其中的信息。因此,HTTP不适合传输一些敏感信息,比如支付信息等。
HTTP工作流程如下:
(1)域名解析
(2)三次握手建立TCP连接
(3)发起HTTP请求
(4)服务器响应HTTP请求,浏览器得到HTML代码
(5)浏览器解析HTML代码 ,并请求HTML中的资源(图片、js、css等)
(6)浏览器对页面进行渲染呈现给用户
(7)断开TCP连接
2.2、常见的HTTP方法
- HTTP1.0定义三种:GET、POST、HEAD
- HTTP1.1新增五种:PUT、DELETE、OPTIONS、TRACE、CONNECT
这些方法的具体作用如下:
- GET:用于请求访问指定的URL,从给定的服务器中检索信息,即从指定资源中请求数据。可以通过URL传参给服务器。
说明:GET请求是可以缓存的,可以从浏览器历史记录中查找到GET请求。
- POST:用于将数据发送到服务器以创建或更新资源
- PUT:用于将数据发送到服务器以创建或更新资源,它可以用上传的内容替换目标资源中的所有当前内容
PUT:如果两个请求相同,后一个请求会把前一个请求覆盖掉(所以PUT用来改资源)
POST:后一个请求不会把第一个请求覆盖掉 - HEAD:与GET方法相似,但没有响应体,仅传输状态行和标题部分
- DELETE:用来删除指定的资源,它会删除URL给出的目标资源中的所有当前内容
- CONNECT:用来建立到给定URL标识的服务器的隧道
- OPTIONS:用于获取当前URL所支持的方法,描述了目标资源的通信选项,会返回服务器支持预定义URL的HTTP策略
- TRACE:用于沿着目标资源的路径执行消息环回测试
2.3、HTTP中GET和POST的区别
| 不同点 | GET | POST |
|---|---|---|
| 数据传输方式不同 | 参数通过URL传递 | 通过请求体传输数据 |
| 安全性不同 | 参数在URL中,并且会被浏览器主动缓存,通过历史记录、缓存很容易查到数据信息 | 数据在请求体内,有一定的安全性保证,数据不会被缓存 |
| 数据类型不同 | 只允许ASCII字符 | 无限制 |
| 危害性不同 | GET无害,进行刷新、后退等操作时无害 | POST可能会重复提交表单 |
| 数据大小限制不同 | 因为url长度的限制,数据最大是2k | 理论上没有限制 |
| 过程不同 | GET产生一个TCP数据包,浏览器会把http header和data一起发送出去,服务器再响应200(返回数据) | POST产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 OK(返回数据) |
2.4、HTTP1.0/1.1/2.0区别
(1)HTTP1.0
- HTTP1.0仅提供了最基本的认证,此时用户名和密码还未经加密,很容易被窥探
- HTTP1.0被设计用来使用短连接,即每次发送数据都会经过TCP三次握手和四次挥手,效率较低。
- HTTP1.0只用header中的IF-Modified-Since和Expires作为缓存失效的标准
- HTTP1.0不支持断点续传,也就是说,每次都会传送全部的页面和数据
- HTTP1.0人为每台计算机只能绑定一个IP,所以请求消息中的URL并没有传递主机名
(2)HTTP1.1
- HTTP1.1使用了摘要算法来进行身份验证
- HTTP1.1默认使用长连接,即只需建立一次连接就可以传输多次数据,传输完成后,只需要依次切断连接即可。长连接的连接时长可以通过请求头中的keep-alive来设置
- HTTP1.1中新增了E-tag、If-Unmodified-Since、If-Match、If-None-Match等缓存控制表头来控制缓存失效
- HTTP1.1支持断点续传,通过使用请求头中的Range实现
- HTTP1.1使用了虚拟网络,在一台物理服务器上可以存在多个虚拟主机,并且它们共享一个IP地址
(3)HTTP2.0
- 头部压缩,由于http1.1经常会出现User-Agent、Cookie、Accept、Server、Range等字段会占用较多字节,而Body却经常只有几十字节,所以导致头重脚轻。HTTP2.0使用HPACK算法进行压缩
- 二进制格式,HTTP2.0使用了更加靠近TCP/IP的二进制格式,抛弃了ASCII码,提升了解析效率
- 强化安全,安全性越来越重要,HTTP2.0一般跑在https上
- 多路复用,在同一个域名下,开启一个TCP的连接,每个请求以流的方式传输,每个流有唯一标识,连接一旦建立,后续的请求都可以复用这个连接并且可以同时发送,服务器可以根据流的唯一标识来响应对应的请求。
- 服务器推送,服务器可以主动推送其他资源,而不用等浏览器解析到相应位置发起请求再响应。
![]()
断点续传原理?
用到了HTTP头 Range和Content-Range字段,一个最简单的断点续传实现大概如下:
1.客户端下载一个1024K的文件,已经下载了其中512K
2.网络中断,客户端请求续传,因此需要在HTTP头中申明本次需要续传的片段:
Range:bytes=512000-
这个头通知服务端从文件的512K位置开始传输文件
3. 服务端收到断点续传请求,从文件的512K位置开始传输,并且在HTTP头中增加:
Content-Range:bytes 512000-/1024000
并且此时服务端返回的HTTP状态码应该是206,而不是200。
长连接和多路复用的区别?
+ 长连接中若干个请求排队串行化单线程处理,后面的请求等待前面的请求返回才能获得执行机会,一旦某个请求超时,后续请求只能被阻塞,也就是常说的线头阻塞
+ 多路复用中多个请求可以同时在一个连接上并行执行,某个请求任务耗时严重,不会影响到其他链接的正常执行
keep-alive的优先
+ 较少的CPU和内存的使用(由于同时打开的连接少了)
+ 允许请求和应答的HTTP管线化
+ 降低拥塞控制(TCP连接少了)
+ 减少了后续请求的延迟(无需在进行握手)
+ 报告错误无需关闭TCP连接
多路复用什么时候关闭?
关闭的时机有2个:
+ 用户离开这个页面
+ 服务器主动关闭connection
2.5、HTTP请求报文与响应报文格式
请求报文包含三部分:
- 请求行:包含请求方法,URL、HTTP版本信息
- 请求头
- 空行
- 请求体
![]()
响应报文包含三部分:
- 状态行:包含HTTP版本、状态码、状态妈的原因短语
- 响应头
- 空行
- 响应体
![]()
2.6、HTTP常见请求头
HTTP请求头分为四种:通用标头、实体标头、请求标头、响应表头
2.6.1、通用标头
通用表头为请求报文与响应报文都会使用的头部字段,主要有三个:Date、Cache-Control、Connection。
HTTP1.1其他通用标头如下:(以下也均基于HTTP1.1)

(1)Date
Date 是一个通用标头,它可以出现在请求标头和响应标头中,它的基本表示如下
Date: Wed, 21 Oct 2015 07:28:00 GMT
表示的是格林威治标准时间,比北京时间慢八个小时

(2)Cache-Control
Cache-Control 是一个通用标头,他可以出现在请求标头和响应标头中,Cache-Control 的种类比较多,虽然说这是一个通用标头,但是有一些特性是请求标头具有的,有一些是响应标头才有的。主要大类有** 可缓存性、阈值性、 重新验证并重新加载 和其他特性**
(3)Connection
Connection决定当前事务(依次三次握手和四次挥手)完成后,是否会关闭网络连接。Connection 有两种:
- 一种是持久性连接,即一次事务完成后不关闭网络连接
Connection: keep-alive
- 另一种是非持久性连接,即一次事务完成后关闭网络连接
Connection: close
2.6.2、实体标头
实体标头是请求报文与响应报文的实体部分使用的头部字段,描述消息正文内容的HTTP标头。

Expires:强缓存相关
Last-Modified:协商缓存相关
2.6.3、请求标头

If-Modified-Since、If-None-Match:协商缓存相关
Range:断点续传相关
2.6.4、响应标头

Etag:协商缓存相关
Keep-Alive:表示的是 Connection 非持续连接的存活时间,可以进行指定
Set-Cookie:用于服务器向客户端发送 sessionID
2.7、HTTP常见状态码
- 200:OK,成功,请求被正常处理
- 201:Created,已创建
- 202:Accepted,请求已接受,但是还没执行,不保证完成请求
- 204:No content,请求被受理但没有资源可以返回
- 206:Partial Content,客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源(断点续传就会返回206)
- 301:moved permanently,永久性重定向
- 302:found,暂时性重定向,表示资源临时被分配了新的 URL
- 303:see other,表示资源存在着另一个 URL,希望能通过GET方法重定向到另一个URL上
- 304:not modified,发送附带条件的请求时,条件不满足时返回,与重定向无关
- 307:temporary redirect,临时重定向,302类似,但是强制要求使用POST方法
- 400:bad request,请求报文语法错误,浏览器无法识别
- 401:unauthorized,请求需要认证
- 403: forbidden,表示对请求资源的访问被服务器拒绝
- 404:not found,服务器无法找到对应资源
- 408:Request timeout,客户端请求超时
- 409:Confict,请求的资源可能引起冲突
- 500 internal sever error,服务器内部错误
- 501:Not Implemented,请求超出服务器能力范围
- 503:service unavailable,服务器繁忙
- 505:http version not supported 服务器不支持,或者拒绝支持在请求中使用的 HTTP 版本
2.8、无状态协议
无状态协议(Stateless Protocol) 就是指浏览器对于事务的处理没有记忆能力。举个例子来说就是比如客户请求获得网页之后关闭浏览器,然后再次启动浏览器,登录该网站,但是服务器并不知道客户关闭了一次浏览器。
HTTP 就是一种无状态的协议,他对用户的操作没有记忆能力。可能大多数用户不相信,他可能觉得每次输入用户名和密码登陆一个网站后,下次登陆就不再重新输入用户名和密码了。这其实不是 HTTP 做的事情,起作用的是一个叫做 小甜饼(Cookie) 的机制。它能够让浏览器具有记忆能力。
如果你的浏览器允许 cookie 的话,查看方式 chrome://settings/content/cookies

也就说明你的记忆芯片通电了…… 当你向服务端发送请求时,服务端会给你发送一个认证信息,服务器第一次接收到请求时,开辟了一块 Session 空间(创建了Session对象),同时生成一个 sessionId ,并通过响应头的 Set-Cookie:JSESSIONID=XXXXXXX 命令,向客户端发送要求设置 Cookie 的响应;客户端收到响应后,在本机客户端设置了一个 JSESSIONID=XXXXXXX 的 Cookie 信息,该 Cookie 的过期时间为浏览器会话结束;

接下来客户端每次向同一个网站发送请求时,请求头都会带上该 Cookie信息(包含 sessionId ), 然后,服务器通过读取请求头中的 Cookie 信息,获取名称为 JSESSIONID 的值,得到此次请求的 sessionId。这样,你的浏览器才具有了记忆能力。

还有一种方式是使用 JWT 机制,它也是能够让你的浏览器具有记忆能力的一种机制。与 Cookie 不同,JWT 是保存在客户端的信息,它广泛的应用于单点登录的情况。JWT 具有两个特点:
- JWT 的 Cookie 信息存储在客户端,而不是服务端内存中。也就是说,JWT 直接本地进行验证就可以,验证完毕后,这个 Token 就会在 Session 中随请求一起发送到服务器,通过这种方式,可以节省服务器资源,并且 token 可以进行多次验证。
- JWT 支持跨域认证,Cookies 只能用在单个节点的域或者它的子域中有效。如果它们尝试通过第三个节点访问,就会被禁止。使用 JWT 可以解决这个问题,使用 JWT 能够通过多个节点进行用户认证,也就是我们常说的跨域认证。
三、HTTPS
3.1、HTTPS
HTTPS(HyperText Transfer Protocol Secure:超文本传输安全协议)是一种透过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但使用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
3.2、HTTPS工作原理
前提条件:采用HTTPS协议的服务器必须要有一套数字证书,证书需要客户端验证通过,才可以继续访问。证书中包含一对公钥和私钥,用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据,只有对应的私钥才能解密。如果对公钥私钥不太理解,可以想象成一个钥匙和一把锁头,你可以把锁头给别人,但是钥匙只有你有,别人用你给的锁把重要的东西锁起来,然后发给你,因为只有你有钥匙,余姚市只有你才能打开锁看到被锁起来的东西。
-
客户端与服务器通过TCP建立连接
-
客户端发起HTTPS请求,用户输入https网址,连接到server的443端口
-
服务器返回证书,证书中包括:签发者、证书用途、使用者公钥、使用者私钥、使用者的HASH算法、证书到期时间等
-
客户端解析证书,客户端的TSL会解析证书,首先验证公钥是否有效,比如颁发机构、过期时间等。如果发现异常,则会弹出警告框,提示证书存在问题;如果证书没有问题,那么就生成一个随机值,然后用证书中的公钥对该随机值加密
-
传送加密信息,传送用证书加密后的随机数,服务端得到这个随机数后,以后客户端和服务端的通信就可以通过这个随机数来了
-
服务端解密信息,服务端用私钥解密后,得到了客户端传过来的随机数(客户端的私钥),然后把内容通过该值进行对称加密,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全
-
传送加密后的信息,服务器将加密后的信息传送给客户端
-
客户端解密信息,客户端收到后,用之前生成的私钥解密加密信息
![]()
https为什么安全?
ssl加密,HTTPS 保证了传输安全,防止传输过程被监听、防止数据被窃取,使用CA证书可以确认网站的真实性。对称加密
即通信的双方都使用同一个秘钥进行加解密,比如特务接头的暗号,就属于对称加密非对称加密
私钥 + 公钥= 密钥对。
即用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据,只有对应的私钥才能解密
因为通信双方的手里都有一套自己的密钥对,通信之前双方会先把自己的公钥都先发给对方,然后对方再拿着这个公钥来加密数据响应给对方,等到到了对方那里,对方再用自己的私钥进行解密。
非对称加密虽然安全性更高,但是非对称的加解密效率很低,所以带来的问题就是速度很慢,影响性能。
于是HTTPS是结合了两种加密方式,将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。
3.3、CA证书
3.3.1、为什么需要证书
防止”中间人“攻击,同时可以为网站提供身份证明。如果此时在客户端和服务器之间存在一个中间人,这个中间人只需要把原本双方通信互发的公钥,换成自己的公钥,这样中间人就可以轻松解密通信双方所发送的所有数据。所以这个时候需要一个安全的第三方颁发证书(CA),证明身份的身份,防止被中间人攻击。
3.3.2、中间人攻击
中间人攻击的过程:
(1) 本地请求被劫持(如DNS劫持等),所有请求都发送到中间人的服务器
(2) 中间人服务器返回中间人自己的证书
(3) 客户端创建随机数,通过中间人证书的公钥对随机数加密后传送给中间人,这样中间人就拿到了客户端的随机数
(4) 中间人以客户端的请求内容再向正规网站发起请求
(5) 因为中间人与服务器的通信过程是合法的,正规网站通过建立的安全通道返回加密后的数据
(6) 中间人凭借与正规网站建立的对称加密算法对内容进行解密
(7) 中间人通过与客户端建立的对称加密算法对正规网站返回的内容数据进行加密,传输给客户端
(8) 客户端通过与中间人建立的对称加密算法对返回结果数据进行解密
由于缺少对证书的验证,所以虽然是客户端发起的HTTPS请求,但客户端完全不知道自己的网络已被拦截,传输内容被中间人全部窃取。
为了避免中间人攻击,保证传输安全,需要一个安全的第三方颁发证书(CA),来证明身份,防止被中间人攻击。
3.3.3、证书包含哪些信息
颁发机构信息、有效期、公钥、公司信息、域名、指纹
3.3.4、证书的合法性依据
由权威机构发布的,而权威机构是有认证的,所有权威机构都会对申请者的信息进行审核
3.3.5、浏览器入额验证证书的合法性
- 验证域名和有效期等信息是否正确,证书上都有这些信息,比较容易完成验证
- 判断证书来源是否合法,每份证书都可以根据验证链查找到对应的根证书,操作系统、浏览器会在本地存储去哪为机构的根证书,利用本地根证书可以对对应机构签发证书完成来源验证
- 判断证书是否被篡改,需要与CA服务器进行校验
- 判断证书是否被吊销,通过CRL(证书注销列表)和OCSP(在线证书状态协议)实现,其中OCSP可在判断证书是否被篡改时用,以减少与CA服务器的交互,提高验证效率
以上都满足,则浏览器认为证书是合法的
证书是公开的,如何避免证书被冒用?
由于证书是公开的,如果中间人在官网上下载一份证书作为自己的,然后发起中间人攻击,客户端肯定会认同这个证书是合法的,如何避免这种证书冒用?
这就是非对称加密中的公钥私钥的用处。虽然中间人可以得到证书,证书中包含公钥,但只有公钥推不出私钥。如果把该证书发给客户端,客户端用证书上的公钥加密数据,中间人却没有私钥无法解密,获取不到数据。
3.4、本地随机数被窃取怎么办?
随机数的传递是采用非对称加密,但是数据传输过程是采用对称加密,而用于对称加密的随机数是本地生成并存储于本地的,HTTPS如何保证随机数不会被窃取?
答:HTTPS只是保证传输过程的安全,而随机数存储在本地,本地的安全属于另一安全范畴,应对的措施有安装杀毒软件、反木马、浏览器升级修复楼栋等。
3.5、使用HTTPS会被抓包吗
**会被抓包,HTTPS 只防止用户在不知情的情况下通信被监听,如果用户主动授信,是可以构建“中间人”网络,代理软件可以对传输内容进行解密。**
HTTPS的数据是加密的,常规下抓包工具代理请求后抓到的包内容是加密状态,无法直接查看。但是,前文有提到,当证书不对时,浏览器只会提示安全风险,如果用户授权仍然可以继续访问网站,完成请求。因此,只要客户端是我们自己的终端,在我们自己授权的情况下,便可以组件中间人网络,而抓包工具便是作为中间人的代理。通常HTTP抓包工具的使用方法是生成一个证书,用户手动把证书安装到客户端中,然后把终端发起的所有请求通过该证书完成与抓包工具的交互,然后抓包工具再转发请求到服务器,最后把服务器返回的结果在控制台输出后再返回给终端,从而完成整个请求的闭环。
既然HTTPS不能方抓包,那HTTPS有什么意义?
HTTPS可以防止用户在不知情的情况下通信链路被监听,只是对于主动授信的抓包操作不提供防护,因为这个场景用户已经对风险知情并且主动授信。要防止抓包,需要采用应用级的安全防护,例如采用私有的对称加密,同时做好移动端的防反编译加固,防止本地算法被破解。
四、HTTP和HTTPS区别
- 安全性不同。HTTP是超文本传输协议,信息是明文传输;HTTPS则是具有安全性的SSL加密传输。
- 证书有否不同。HTTPS需要用到CA证书,HTTP不需要证书
- 连接方式不同。HTTP和HTTPS使用完全不同的连接方式,HTTP的连接很简单,是无状态的,HTTPS在HTTP的基础上使用了ssl协议进行加密传输
- 端口不同。HTTP端口是80,HTTPS端口是443
五、HTTP优化
利用负载均衡优化和加速HTTP应用: https://blog.51cto.com/virtualadc/580832
利用HTTP Cache来优化网站:https://www.cnblogs.com/cocowool/archive/2011/08/22/2149929.html
六、其他
6.1、地址栏输入URL到打开页面发生了什么
(1)浏览器地址栏输入URL
(2)DNS解析URL对应的IP
(3)根据IP建立TCP连接
(4)浏览器向服务器发起http请求
(5)服务器处理请求
(6)服务器响应请求,浏览器接收http响应
(7)浏览器解析HTML,并请求HTML中的资源(图片、js、css等),渲染页面呈现出来
(8)断开TCP连接
6.2、域名解析过程
(1)查询浏览器自身DNS缓存:
以chrome为例:在浏览器地址栏输入:chrome://net-internals/#dns
浏览器自身缓存时间比较短,为1min,数量为1000条
(2)查询OS自身缓存:
cmd -> ipconfig /displaydns -> 回车
清楚OS自身缓存:
cmd -> ipconfig /flushdns
(3)读取hosts文件:C:\Windows\System32\drivers\etc\hosts
(4)向本地DNS服务器请求
向本地配置的DNS服务器发送域名解析请求,通过UDP协议向DNS的53端口发起请求
(5)查找NetBIOS name Cache,它就存在于客户端电脑中
补充:如果有任何一个步骤中,找到了域名对应的ip,则直接返回,后面的步骤不再进行
参考:
https://mp.weixin.qq.com/s/s2sTBmPQYKDD0kcCtFtxcg
https://blog.csdn.net/zhangliangzi/article/details/51336564?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param
https://blog.csdn.net/weixin_34234823/article/details/93168108?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
https://www.runoob.com/w3cnote/http-vs-https.html
https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/78507762?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param#5、HTTPS抓包






浙公网安备 33010602011771号