HTTP/HTTPS 协议--面试题(3)

首先我们来解释一下HTTP协议的功能和工作原理

HTTP(超文本传输协议)
它是基于TCP / IP 协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则。HTTP底层协议是TCP协议.

HTTP工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。

HTTP 用 TCP要实现的两个基本功能:

  • 发数据;
  • 收数据。
  • HTTP不关心其他的细节问题。

HTTP的任务:

  • 请求资源(从对方服务器将资源拿到);
  • 提交信息(处理数据),从客户端把数据推送到服务器。
image.png

HTTP 请求 / 响应的步骤

1.客户端连接到Web服务器

一个HTTP客户端,通常是浏览器,与Web服务器的HTTP
端口(默认为80)建立一个TCP套接字连接。例如,
http://www.oakcms.cn

2、发送HTTP请求
报文结构:

  • request:请求行(方法 + url + 协议)请求头部、请求正文
  • response:状态行(状态码 + 原因+ 协议)响应头部、响应正文
通过TCP套接字,客户端向Web服务器发送一个文本的请
求报文,一个请求报文由请求行、请求头部、空行和请求
数据4部分组成。
如下图所示:
- Host :请求的资源在哪个主机的端口上
- Connection:该请求支持长连接(heep_alive)
- Content-Length:正文内容长度
- Content-Type:数据类型
- User-Agent:声明用户的操作系统和浏览器版本信息
- Accent:发起了请求
- Referer:当前页面是从哪个页面跳转过来的
- Accept-Encoding:接受的编码
- Accept-Language:接受的语言类型
- Cookie:用于在客户端存储少量信息,通常用于实现会话(session)功能

image.png

3、服务器接受请求并返回HTTP响应

  • Web服务器解析请求,定位请求资源。服务器将资源复本
    写到TCP套接字,由客户端读取。一个响应由状态行、响
    应头部、空行和响应数据4部分组成。

HTTP响应:

  • GET:获取资源
  • POST:传输实体主体
  • PUT:传输文件
  • HEAD:获得报文首部(相当于GET方法获得的资源去掉正文)
  • DELETE:删除文件
  • OPTIONS:询问支持的方法(客户端问服务器)
  • TRACE:追踪路径
  • OCONNECT:要求用隧道协议连接代理
  • LINK:建立与资源之间的联系
  • UNLINE:断开连接关系
image.png
image.png
GET 方法和 POST 方法核心点:
  • 传参的数据量不一样,一个通过 url,一个通过正文,所以 POST 能传更多的数据;
  • GET 方法和 POST 方法传参位置上,可靠性问题。

4、释放连接TCP连接

  • 若connection 模式为close,则服务器主动关闭TCP连接,
    客户端被动关闭连接,释放TCP连接;若connection 模式为
    keepalive,则该连接会保持一段时间,在该时间内可以继
    续接收请求;

5、客户端浏览器解析HTML内容

  • 客户端浏览器首先解析状态行,查看表明请求是否成功的
    状态代码。然后解析每一个响应头,响应头告知以下为若
    干字节的HTML文档和文档的字符集。客户端浏览器读取响
    应数据HTML,根据HTML的语法对其进行格式化,并在浏
    览器窗口中显示。

比较HTTP与HTTPS 特定比较:

HTTP特点:

  • 无状态:协议对客户端没有状态存储,比如访问一个网站需要反复进行登录操作
  • 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。
比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是
否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费时
间和流量。
  • 基于请求和响应:基本的特性,由客户端发起请求,服务端响应
  • 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性,网络完全性极差,后面的HTTPS弥补了这个缺点。

HTTPS特点:

HTTPS和HTTP通信协议发送报文的区别

  • 1. 传统的HTTP协议通信:
    传统的HTTP报文是直接将报文信息传输到TCP然后TCP再通过TCP套接字发送给目的主机上。

  • 2. HTTPS协议通信:
    HTTPS是HTTP报文直接将报文信息传输给SSL套接字进行加密,SSL加密后将加密后的报文发送给TCP套接字,然后TCP套接字再将加密后的报文发送给目的主机,目的主机将通过TCP套接字获取加密后的报文给SSL套接字,SSL解密后交给对应进程。

  • 3. 加入了很多密码学中的协议
  • 基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护
image.png

HTTP与HTTPS安全性比较

HTTPS: 采用 对称加密 和 非对称加密 结合的方式来保护浏览器和服务端之间的通信安全。
HTTPS (security) = 对称加密算法加密数据 + 非对称加密算法交换密钥 + 数字证书验证身份

HTTPS加密具体过程

  • ① 验证身份:
    1. 客户端向服务端发起握手请求,以明文传输请求信息,包含版本信息,加密-套件候选列表,压缩算法候选列表,随机数,扩展字段等信息。

    2. 服务端发送证书 [这套证书就是一对公私钥对(PK,SK)] ,给客户端

    3. 客户端检查证书,确认是否由可信任CA机构签发,获取服务端公钥。 如果不是,由用户决定是否继续通讯;如果检查无误或用户选择继续,则客户端认可服务端的身份.

    4. 服务端要求客户端发送证书,并检查是否通过验证。失败则关闭连接,认证成功则从客户端证书中获得客户端公钥(PK)

    5. 至此,服务器客户端双方的身份认证结束,双方确保身份都是真实可靠的

  • ② 传输加密:抵挡中间人攻击

    1. 客户端和服务端在开始传输数据之前,先协商传输过程需要使用的加密算法。 客户端发送协商请求给服务端, 其中包含自己支持的非对称加密的密钥交换算法 (RSA)、数据签名算法 (SHA/MD5)、对称加密算法 (DES)、加密密钥的长度*

    2. 服务端收到消息后,选择安全性最高的算法,发还给客户端,完成协商

    3. 采用混合加密的方式,对称加密和非对称加密相结合。客户端使用对称加密生成 Key Pairs (pk,sk),对传输数据进行加密,然后使用非对称加密的公钥PK对密钥进行加密,发送给服务端。

    4. 服务端收到后使用自己的SK解密得到密钥key,再用密钥key解密密文得到明文。

    5. 因此,网上传输的数据时被秘钥加密的密文和用公钥PK加密后的秘钥,即使被劫持抓包,没有私钥SK,无法获得加密明文的秘钥,无法获得明文数据。

  • 数字摘要:
    将任意长度消息变成固定长度的短消息,常用的加密算法包括
    HASH(SHA256),HMAC(Hmac_SHA256)

  • ③ 保护数据完整性:
    防止传输的内容被中间人冒充或者篡改
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。