https 简介

https 协议是建立在 http 协议之上的, 在 http 协议与 tcp 协议间, 添加了一个 SSL(Secure Socket Layer) 协议, 用于客户端和服务端进行密钥协商.

单向验证流程:

  • 客户端发起 http 请求
  • 服务端返回证书(公钥, 权威认证机构等信息)
  • 客户端验证证书
  • 客户端产生随机密钥(对称密钥)
  • 客户端使用服务端的公钥对对称密钥进行加密, 发送给服务端
  • 客户端与服务端使用对称密钥加密数据, 进行传输

双向验证流程:

  • 客户端发起 http 请求
  • 服务端返回证书(公钥, 权威认证机构等信息)
  • 客户端验证证书
  • 客户端发送自己的证书
  • 服务端验证收到的证书
  • 客户端产生随机密钥(对称密钥)
  • 客户端使用服务端的公钥对对称密钥进行加密, 发送给服务端
  • 客户端与服务端使用对称密钥加密数据, 进行传输

为什么不使用非对称密钥加密进行数据传输呢?

  • 对客户端的要求加大, 必须要有合法的证书, 非法证书服务端可能不认
  • 一般数据没有必要使用安全度更高的非对称加密算法, 而且非对称加密的速度不理想

如果觉得有帮助, 可以扫描右边的微信打赏码支持一下.

http 跨域请求

发起请求资源的域与真正提供资源的域不同的 http 请求, 该 http 请求就是跨域请求. 如: 访问网页 A, 网页 A 中包含从网页 B 中获取资源的请求, 访问网页 B 的 http 请求为跨域请求. 域 = 协议 + 域名 + 端口, 任何一项不同是不相同的域. 如果不对跨域请求进行限制, 则用户可能在访问网站 A 时, 被恶意插入跨站链接, 欺骗用户, 获取用户账户, 密码等私密信息.

具体的内容可参考:

如果觉得有帮助, 可以扫描右边的微信打赏码支持一下.

xss 攻击

Cross SiteScript, 跨站脚本攻击. 恶意攻击者向有 xss 漏洞的网站植入恶意代码, 一旦用户访问被攻击的网站, 恶意代码就会执行, 从而达到破坏的目的. 一般攻击的目的: 盗取用户 Cookies, 破坏页面结构, 植入恶意链接等.

防止攻击的方法:

  • 被攻击的服务器及时更新软件, 解决漏洞
  • 访问的浏览器可以安装对应的插件, 对网站进行检测

如果觉得有帮助, 可以扫描右边的微信打赏码支持一下.

CSRF 攻击

Cross-site request forgery, 跨站请求伪造. 冒充用户的身份, 发送伪造请求.

攻击流程:

| ------- | --1--> | ------- |
|         |        | Web A   |
|         | <-2--- |         |
|         | ---5-> |         |
| 用户A   |        | ------- |
|         | --3--> |         |
|         |        |         |
|         | <--4-- | Web B   |
|---------|--------|---------|
  • 1. 用户A 登陆到 Web A
  • 2. Web A 产生用于验证身份的 cookie
  • 3. 用户A 访问 Web B
  • 4. Web B 要求用户A 访问 Web A
  • 5. 用户A 通过携带验证身份的 cookie, 并通过 Web B 构造的请求访问 Web A. Web A 通过验证, 并对资源进行操作

从上面的流程可以看出, Web B 通过冒充用户的身份, 发送伪造请求, 达到攻击的目的.

那如何防止 CSRF 攻击呢? 主流的方法时通过 Token 验证, 每次用户访问时, 都需携带上特定的 Token. 由于恶意的服务器, 没有办法获取到 Token, 故攻击无法生效.

如果觉得有帮助, 可以扫描右边的微信打赏码支持一下.

http 内容分块传输

我们经常在网上下载各种大文件, 如: pdf文件, 视频, 系统镜像等大文件. 浏览器通过什么机制来下载大文件呢? 下面将介绍 http 分块传输的机制. 该机制主要时通过将大文件拆分为小文件, 分别对小文件进行传输.

分块传输机制:

  • 使用 Transfer-Encoding: chunked 进行控制
  • 因为传输时不知道传输内容大小, 需要有特殊的标志表示分块传输结束. http 协议采用传输空块的方式, 告知对方分块传输结束
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

10
数据体1
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

FC
数据体2
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

0

分块传输的优点:

  • 能够传输大小未知的数据
  • 提高传输效率, 应为可以对内容进行分块压缩, 使得压缩和发送能过并行进行
  • 可以在最后的结束块发送最后才能过确定的信息

如果觉得有帮助, 可以扫描右边的微信打赏码支持一下.

http 内容编码

因为网络带宽有限, 所以有对内容进行压缩的需求. http 协议提供了 Content-EncodingAccept-Encoding 字段控制压缩行为. 浏览器告诉服务器接收的压缩类型; 服务器对内容进行压缩, 并告诉浏览器内容通过什么格式的压缩.

内容编码的类型:

  • gzip 采用 CNU zip 编码
  • compress 采用 Unix 的文件压缩程序
  • deflate 使用zlib压缩
  • identity 没有压缩

参考

如果觉得有帮助, 可以扫描右边的微信打赏码支持一下.

http 长连接

http 协议采用无连接的方式进行交互. 每次进行http请求时, 都需要重新建立连接, 进行三次握手. 可能中间还有: 代理, 路由, 通道等转发行为. 无连接的方式必定会对持续连接的场景带来性能上极大的损失. 于是引入了 Keep-Alive 模式, 该模式能过让http连接保持一段时间.

  • http 1.1 默认启用 Keep-alive 模式, 需要关闭可以在协议头加入 connection: close 进行关闭.
  • 通过 Keep-Alive: timeout=5, max=100 的格式可以对长连接进行控制. 表示: 保持5秒, 最多接收100次请求

参考

如果觉得有帮助, 可以扫描右边的微信打赏码支持一下.

请求方法(http 1.1)

  • GET:
    • 请求指定的页面信息, 并返回实体主体
    • 一般用于数据的读取, 不会产生副作用
  • HEAD
    • 与 GET 方法类似, 只是不返回响应体, 只返回响应头部
    • 通常查询服务器的性能
  • POST:
    • 提交资源
    • 非幂等, 资源可能重复创建或修改
  • PUT:
    • 取代指定的资源
    • 幂等
  • DELETE:
    • 删除指定资源
    • 幂等
  • CONNECT:
    • 建立一个到由目标资源标识的服务器的隧道
    • HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器
  • OPTIONS: 允许客户端查看服务器的性能
  • TRACE: 回显服务器收到的请求, 主要用于测试或诊断
  • PATCH: 方法用于对资源应用部分修改

如果觉得有帮助, 可以扫描右边的微信打赏码支持一下.