HTTP协议与HTTPS / SSL协议

Http 协议

1. Http 发展

  • HTTP/0.9
    • 只有get 命令,且服务端直返HTML 格式字符串,服务器响应完毕就关闭TCP 连接
    • 1991年提出
  • HTTP/1.0
    • 1996 提出
    • 可以发送任何格式内容,包括文字、图像、视频、二进制。也丰富了命令Get、Post、Head,请求和响应的格式加入头信息
    • 每个TCP 连接只能发送一个请求,而新建TCP 连接的成本很高,导致Http/1.0 性能很差
  • HTTP/1.1(目前使用的最多协议
    • 1997年提出
    • 引入持久连接,TCP 默认不关闭,可被多个请求复用
  • SPDY(基本上没人用)
    • 2012 年google 提出
    • 综合了HTTP 和HTTPS两者的优点于一体的传输协议
      • 必须使用HTTPS 连接
      • 请求头Header 压缩
      • 多路复用
  • HTTP/2.0
    • 2015 年提出
    • 已经包括了SPDY 中的优点
    • 采用二进制格式而非文本格式,解析更高效,数据更紧凑,错误更少
    • 服务器可以将响应主动推送到客户端

2. Socket

  • 定义:套接字,实对TCP/IP的封装,提供可供程序员做网络开发所用的接口——Socket 编程接口

3. HTTP 报文格式

  • 请求信息格式

  • 响应信息格式

4. HTTP 协议的代码实例

  • 使用语言:java
  • 使用工具:Socket、StringBuilder、InetSocketAddress(域名解析)、Http1Codec(okhttp-x.x.x.x.jar中的类,用于解析响应体)
  • 访问对象:百度天气
  • 编写请求信息:使用StringBuilder 构造请求行、请求头、请求空行、请求体信息
    • GET请求必须加上Host 请求头,且一般没有请求体
      • 注意中文编码问题
    • POST请求必须加上Content-Length 请求头和Content-Type 请求头
      • 注意中文编码问题
  • 创建Socket 对象并进行连接和请求
    • ip地址使用InetSocketAddress进行域名解析获得
    • 端口号是默认的端口号80
  • 请求响应与响应信息处理
    • 响应头中如果存在Content-Length,读取时按该长度去读取(Http1Codec获得响应体)
    • 响应头中如果存在Transer-Encoding: chunked 则按 5 中的方法去解析数据(Http1Codec获得响应体)

5. HTTP 分块编码

  • 用于响应体数据
  • 当数据量很大时,一般会采用此技术
  • 对应的响应头为Transfer-Encoding: chunked
    • 一般当不存在Content-Length请求头的时候,会出现该请求头
  • 具体格式
    • 服务端返回信息:shouyue你好,我是你爷爷!
    • 响应体具体内容
    • // 格式为
      //      数据分块k的字符数\r\n
      //      数据分块k\r\n
      // 最后一行
      //      0\r\n
      
      7\r\n
      shouyue\r\n
      3\r\n
      你好,\r\n
      3\r\n
      我是你\r\n
      3\r\n
      爷爷!\r\n
      0\r\n

HTTPS/SSL 协议

1. 概述

  • HTTP 的缺点
    • HTTP 在传输数据时,所有传输的内容都是明文,无法保证数据的安全性
  • HTTPS:即 HTTP Over TLS,运行在TLS 协议上的安全的HTTP协议
    • 即在HTTP 协议的基础上通过对数据进行加密,保证数据的安全性
  • 结构图

2. TLS 的发展

  • 1994 ,NetScape 公司设计了 SSL 1.0
  • 1995,升级为SSL 2.0
  • 1996,升级为SSL3.0,并得到大规模的应用
  • 1999,ISOC 接替NetScape,发布SSL的升级版 TLS 1.0版
  • 2006,升级为TLS 1.1
  • 2008,升级为TLS 1.2
  • 2018,升级为TLS 1.3

3. SSL 握手

  • SSL握手目的
    • SSL握手的过程都是明文的,因此SSL握手的重点就在于怎么在不安全的网络中安全的进行密钥交换
  • SSL 握手过程
    • RSA 算法交换密钥(一般不会直接使用RSA,会加上其他技术)
    1. 客户端给出协议版本号、一个随机数(R1)以及客户端支持的加密方法(对称加密方法)
    2. 服务端确定使用的加密方法,并给出数字证书以及一个随机数(R2)
    3. 客户端确定数字证书有效,并生成一个新的随机数(premaster secret,三个随机数中唯一加密的),并使用数字证书中的公钥,利用RSA 算法加密这个随机数,发给服务端
    4. 服务端使用自己的私钥,获取客户端发来的随机数(premaster secret)
    5. 客户端和服务端根据约定的加密算法,使用前面三个随机数,生成对话密钥(master secret),用来加密接下来的整个对话过程
        注意:RSA 可能会被破解,所以一般会使用DH算法,在该算法下premaster secret 不需                   要传递,双方只要交换各自的参数,就可以算出这个随机数。                                        例如:百度使用的就是ECDHE_RSA,即ECC + DH(Diffie- Hellman) + RSA,其中                     ECDHE 用于密钥交换,而RSA 用于对交换参数进行签名。
    • 更详细的过程图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值