HTTP协议对比HTTPS协议

HTTP协议对比HTTPS协议

  • 1. HTTP协议
    • 1.1 概述
    • 1.2 HTTP协议格式
    • 1.3 HTTP协议支持的方法
      • 1.3.1 GET方法
      • 1.3.2 POST方法
      • 1.3.3 其他HTTP方法
      • 1.3.4 GET对比POST
    • 1.4 请求报文
      • 1.4.1 Content-Type:请求体中数据格式
      • 1.4.2 Cookie:浏览器缓存
    • 1.5 响应报文
      • 1.5.1 状态码
      • 1.5.2 响应头
  • 2. HTTPS协议
    • 2.1 加密-解密
      • 2.1.1 对称加密
      • 2.1.2 非对称加密
    • 2.2 证书
    • 2.3 HTTPS工作流程

1. HTTP协议

1.1 概述

  • HTTP(Hyper Text Transfer Protocol):超文本传输协议,是一个基于请求和响应,无状态的,应用层协议;
  • HTTP 往往是基于传输层的 TCP 协议实现的. (HTTP1.0, HTTP1.1, HTTP2.0 均为TCP, HTTP3 基于 UDP实现);
  • 不光可进行文本内容传输(如txt、html、css等),还可进行如图片、音频等二进制数据传输;
    HTTP协议对比HTTPS协议_第1张图片
  • HTTP2.0使用多路复用技术使多个HTTP请求共用一个TCP连接,提高网络传输效率!!

1.2 HTTP协议格式

  • HTTP报文分为请求报文和响应报文两种,各自对应不同的协议格式;
  • 空行后面的内容都是正文,正文部分允许为空字符串。如果存在正文,则在头部中会有一个Content-Length属性来标识正文长度;
  • URL基本格式:协议名://主机地址:端口号/文件位置?查询字符串
    HTTP协议对比HTTPS协议_第2张图片

1.3 HTTP协议支持的方法

HTTP协议对比HTTPS协议_第3张图片

1.3.1 GET方法

  • 最常用的HTTP方法,用于获取服务器上的某个资源
  • GET请求可通过如下方式发送:
    1)浏览器地址栏直接输入URL地址;
    2)HTML中link、img、script等标签,也可触发GET请求;
    3)JavaScript中Ajax也可构造GET请求;
  • GET请求特点:
  • 首行的第一部分为 GET;
  • URL 的 query string 可以为空, 也可以不为空;
  • header 部分有若干个键值对结构;
  • body 部分为空;

1.3.2 POST方法

  • 较常用的HTTP方法,用于将用户输入的数据提交给服务器
  • POST请求可通过如下方式发送:
    1)HTML中form标签,也可构造POST请求;
    2)JavaScript中Ajax也可构造POST请求;
  • POST请求特点:
  • 首行的第一部分为 POST;
  • URL 的 query string 一般为空 (也可以不为空);
  • header 部分有若干个键值对结构;
  • body 部分一般不为空. body 内的数据格式通过 header 中的 Content-Type 指定. body 的长度由header 中的 Content-Length 指定;

1.3.3 其他HTTP方法

  • PUT 与 POST 相似,只是具有幂等特性,一般用于更新
  • DELETE 删除服务器指定资源
  • OPTIONS 返回服务器所支持的请求方法
  • HEAD 类似于GET,只不过响应体不返回,只返回响应头
  • TRACE 回显服务器端收到的请求,测试的时候会用到这个
  • CONNECT 预留,暂无使用

1.3.4 GET对比POST

  • 语义不同: GET 一般用于获取数据, POST 一般用于提交数据;
  • GET 的 body 一般为空, 需要传递的数据通过 query string 传递, POST 的 query string 一般为空, 需要传递的数据通过 body 传递;
  • GET 请求一般是幂等的, POST 请求一般是不幂等的. (如果多次请求得到的结果一样, 就视为请求是幂等的);
  • GET 可以被缓存, POST 不能被缓存. (这一点也是承接幂等性);

1.4 请求报文

  • 报头格式是 “键值对” 结构;
  • 报头中每个键值对占一行, 键和值之间使用分号分割;
  • 报头结束后有一个完整空行,用于分隔报头和正文;
  • 常见报头:
报头 含义
Host 表示目标主机的地址和端口
Content-Length 请求体正文长度
Content-Type 请求体中数据格式
User-Agent 简称UA,表示浏览器/操作系统的属性
Referer 表示这个页面是从哪个页面跳转过来的
Cookie 浏览器缓存

1.4.1 Content-Type:请求体中数据格式

  • 该请求报文希望服务器按照什么格式处理请求体中的内容;
  • application/x-www-form-urlencoded: form 表单提交的数据格式;
  • multipart/form-data: form 表单提交的数据格式(在 form 标签中加上enctyped=“multipart/form-data” . 通常用于提交图片/文件;
  • application/json: 数据为 json 格式;

1.4.2 Cookie:浏览器缓存

  • Cookie 中存储了一个字符串;
  • 字符串数据可能是客户端(网页)自行通过 JS 写入的, 也可能来自于服务器(服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据);
  • 可通过该字段实现 “身份标识” 的功能(Cookie+Session机制);

1.5 响应报文

1.5.1 状态码

  • 状态码:表示一个HTTP请求对应的结果状况如何,是否成功,或是其他的一些状况。
    HTTP协议对比HTTPS协议_第4张图片
  • 常见状态码:
状态码 含义
200 OK,表示成功访问
404 Not Found,表示URL指向的服务器资源未找到
403 Forbidden,表示访问被拒绝,有些页面需要用户具有一定的权限才能访问
405 Method Not Allowed,表示服务器不支持该请求所使用的的HTTP方法
500 Internel Server Error,服务器内部处理代码逻辑出现问题
502 Bad Gateway,网关找不到
504 Gateway Timeout,服务器负载较大时,处理请求可能会发生超时情况
301 Move Permanently,永久重定向,浏览器收到这种响应时, 后续的请求都会被自动改成新的地址
302 Move Temporarily,临时重定向,响应报文头中Location字段表示要跳转到哪个页面
303 See Other,不保留方法的临时重定向
307 Temporary Redirect,保留方法的临时重定向
304 Not Modified,缓存相关,如果服务器内容未进行修改,可直接只用浏览器缓存中的内容

1.5.2 响应头

  • 报头格式是 “键值对” 结构;
  • 报头中每个键值对占一行, 键和值之间使用分号分割;
  • 报头结束后有一个完整空行,用于分隔报头和正文;
  • 响应头与请求头格式基本一致;
  • 响应头中Content-Type的取值有如下类型:
    HTTP协议对比HTTPS协议_第5张图片

2. HTTPS协议

  • HTTPS协议是在HTTP 协议的基础上引入了一个加密层;
  • HTTP协议内容都是按照文本的方式明文传输的,导致在传输过程中出现一些被篡改的情况;
  • 具体做法:先使用非对称加密传输秘钥,后续操作可直接采用对称加密!!

2.1 加密-解密

  • 加密Encrypt:将明文(plain)内容进行转换,生成密文(cipher);
  • 解密Decrypt:将密文经过变换,生成原始明文;
  • 加密/解密操作均要使用秘钥key;

2.1.1 对称加密

  • 对称加密:加密和解密过程使用相同的秘钥;
  • cipher=Encrypt(plain,key);
    HTTP协议对比HTTPS协议_第6张图片
  • 对称加密的优点:加密速度较快!!
  • HTTPS仅引入对称加密操作,服务器需要维护每个客户端对应的秘钥,此操作比较麻烦且浪费资源;
  • HTTPS仅使用对称加密的缺点:无法保证秘钥传输的安全!!

2.1.2 非对称加密

  • 非对称加密:加密和解密过程使用不同的秘钥;
  • plain=Decrypt(cipher,key);
  • 非对称加密缺点:运算速度较慢;
  • 加密-解密过程:
    方式一:使用公钥加密,使用私钥解密;
    方式二:使用私钥加密,使用公钥解密;
  • 非对称加密需要使用的秘钥分为公钥和私钥,公钥和私钥是配对的,公钥可告知所有人(比如客户端),而私钥只有服务器自己知道!!
  • HTTPS要想客户端在每次请求服务器时才商定使用的具体秘钥,且对秘钥需加密传输,则需要使用非对称加密;
  • HTTPS使用非对称加密+对称机密的混合加密方式仍然存在问题:无法保证公钥的可靠性,以及公钥如何获取;

2.2 证书

  • 要想保证非对称加密使用的公钥是安全可靠的,那么则需要有一个权威机构对公钥进行发布认证,客户只要在获得公钥的时候,核验该公钥是否是权威机构发布的即可证明该公钥是安全的;
  • 证书颁发机构(CA,Certificate Authority)即上述的权威机构,操作系统中已经内置了一些受信任的证书颁发机构的公钥;
  • HTTPS网站建立时需要向CA申请一个证书,并获得该CA机构对应的私钥;
  • 客户端与服务器在建立连接之处,服务器会向客户端发送一个证书使用CA机构的私钥进行加密),该证书包含了该网站的身份信息,包括:证书发布机构、证书有效期、非对称加密需要使用的公钥、证书所有者、**数字签名(使用如MD5加密算法对整个证书进行加密得到hash值)**等信息;
  • 客户端收到证书后会进行一系列的核验:
    1)查看证书是否过期;
    2)查看证书发布机构是否被操作系统信任;
    3)查看证书是否被篡改过:①使用对应CA机构的公钥对证书进行解密得到证书信息,获取数字签名值hash1;②使用如MD5加密算法对整个证书进行加密得到hash2值;③对比hash1和hash2,如果二者相等,则说明证书是安全的的,未被篡改;
  • 如果核验过程证明证书是安全的,则从中获取后续数据传输需使用的非对称加密对应的公钥;

2.3 HTTPS工作流程

  • 1)通信双方建立TCP连接;
  • 2)通信双方进行四次握手,沟通正式进行数据通信需要的对称秘钥:
    (1)客户端发送连接建立请求;
    (2)服务器响应连接请求,并返回服务器证书;
    (3)客户端校验证书合法性,获取服务器对应公钥,并加密发送后续对称加密对应秘钥;
    (4)服务器收到对称加密对应秘钥,发送响应报文告知客户端已经收到秘钥;
  • 3)使用对称加密进行加密通信;
    HTTP协议对比HTTPS协议_第7张图片
    注意:HTTP/HTTPS协议目前均是基于TCP协议实现,所以HTTP/HTTPS应用报文在正式进行通信之前,必须先进行TCP连接的建立!!!

你可能感兴趣的:(计算机网络,Java开发,http,https,网络协议,java)