HTTP协议对比HTTPS协议

1. HTTP协议

1.1 概述

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

1.2 HTTP协议格式

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

1.3 HTTP协议支持的方法

在这里插入图片描述

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

1.5.2 响应头

  • 报头格式是 “键值对” 结构;
  • 报头中每个键值对占一行, 键和值之间使用分号分割;
  • 报头结束后有一个完整空行,用于分隔报头和正文;
  • 响应头与请求头格式基本一致;
  • 响应头中Content-Type的取值有如下类型:
    在这里插入图片描述

2. HTTPS协议

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

2.1 加密-解密

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

2.1.1 对称加密

  • 对称加密:加密和解密过程使用相同的秘钥;
  • cipher=Encrypt(plain,key);
    在这里插入图片描述
  • 对称加密的优点:加密速度较快!!
  • 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协议目前均是基于TCP协议实现,所以HTTP/HTTPS应用报文在正式进行通信之前,必须先进行TCP连接的建立!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NorthSmile

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值