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等),还可进行如图片、音频等二进制数据传输;
- 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请求对应的结果状况如何,是否成功,或是其他的一些状况。
- 常见状态码:
状态码 | 含义 |
---|---|
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 |
303 | See Other |
307 | Temporary Redirect |
304 | Not 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连接的建立!!!