HTTP 与 HTTPS 协议:从基础到安全强化

引言

互联网的消息是如何传递的?

是在路由器上不断进行跳转

IP的目的是在寻址

HTTP 协议:互联网的基石

定义

HTTP(英文:HyperText Transfer Protocol,缩写:HTTP),即超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。它就像是互联网世界的 "快递规则",规定了从万维网服务器传输超文本到本地浏览器的传送方式,详细定义了客户端和服务器之间数据交互的格式和规则。正是有了 HTTP 协议,我们才能顺畅地从服务器获取网页内容,让丰富多彩的网页呈现在我们眼前。

工作原理

  1. 连接建立:当我们在浏览器地址栏输入一个网址并按下回车键,客户端(浏览器)就会向服务器发送请求,尝试建立连接。这个过程就如同打电话时先拨号码等待对方接听。
  2. 发送请求 :客户端通过 HTTP 协议发送请求消息,其中包含请求方法(常见的有 GET、POST 等)、请求头以及可能存在的请求体。请求方法告诉服务器要执行的操作,比如 GET 用于获取资源,POST 用于提交数据。请求头则携带了许多附加信息,例如User - Agent,它会告知服务器我们使用的浏览器类型和版本,就像在快递包裹上贴上寄件人的详细信息。而请求体,对于 POST 请求来说,会存放要提交给服务器的数据,如用户注册时填写的用户名、密码等表单数据。
  3. 服务器响应 :服务器接收到请求后,就像快递员收到包裹后进行处理。它会根据请求内容进行一系列操作,然后生成响应消息。响应消息包括响应状态码,比如 200 表示请求成功,服务器成功返回了我们需要的资源;404 则表示未找到请求的资源,就好像快递员找不到收件地址一样。同时,响应消息还包含响应头和响应体。响应头会说明响应数据的类型(如Content - Typetext/html表示返回的是 HTML 网页内容)等信息,而响应体则是服务器返回给我们的实际数据,比如网页的 HTML 代码。
  4. 连接关闭:在数据传输完成后,连接通常会关闭。不过,为了提高效率,在某些情况下,连接也可以保持打开状态,以便客户端能够快速进行后续请求,而无需再次建立连接。

由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。

以下是 HTTP 请求/响应的步骤:

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

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

  2. 发送HTTP请求

    通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

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

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

  4. 释放连接TCP连接

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

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

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

特点

  1. 无状态:HTTP 协议本身是无状态的,这意味着服务器不会记住不同请求之间客户端的状态或信息。每一个请求都是独立的个体,就好像快递员每次送快递都不记得上一次给这个地址送过什么。例如,当我们在一个电商网站浏览商品,从一个页面跳转到另一个页面时,服务器并不会自动记住我们之前浏览过哪些商品,除非我们通过其他方式(如 Cookie)来记录这些信息。
  2. 明文传输:数据在传输过程中以明文形式发送,这就好比我们在一个透明的管道中传递信件,任何人都可以轻易地看到信件的内容。这种特性使得数据容易被窃取、篡改或监听。网络中的不法分子可以通过一些手段截获我们传输的数据,获取我们的账号密码、信用卡信息等敏感内容,还可能恶意篡改数据,导致我们获取到错误的信息。
  3. 应用场景:由于其简单高效,HTTP 协议广泛应用于网页浏览、数据获取等场景。我们日常访问新闻网站、查看博客文章等,都是通过 HTTP 协议来实现的。它就像互联网世界的 "通用语言",让我们能够便捷地获取各种信息。

HTTP请求方法:

GET

向指定的资源发出"显示"请求。使用GET方法应该只用在读取数据,而不应当被用于产生"副作用"的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。

与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中"关于该资源的信息"(元信息或称元数据)。

POST

向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。

PUT

向指定资源位置上传其最新内容。

DELETE

请求服务器删除Request-URI所标识的资源。

TRACE

回显服务器收到的请求,主要用于测试或诊断。

OPTIONS

这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。

CONNECT

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

HTTP 协议:互联网的基石

定义

HTTP,即超文本传输协议,它就像是互联网世界的 "快递规则",规定了从万维网服务器传输超文本到本地浏览器的传送方式,详细定义了客户端和服务器之间数据交互的格式和规则。正是有了 HTTP 协议,我们才能顺畅地从服务器获取网页内容,让丰富多彩的网页呈现在我们眼前。

工作原理

  1. 连接建立:当我们在浏览器地址栏输入一个网址并按下回车键,客户端(浏览器)就会向服务器发送请求,尝试建立连接。这个过程就如同打电话时先拨号码等待对方接听。
  2. 发送请求 :客户端通过 HTTP 协议发送请求消息,其中包含请求方法(常见的有 GET、POST 等)、请求头以及可能存在的请求体。请求方法告诉服务器要执行的操作,比如 GET 用于获取资源,POST 用于提交数据。请求头则携带了许多附加信息,例如User - Agent,它会告知服务器我们使用的浏览器类型和版本,就像在快递包裹上贴上寄件人的详细信息。而请求体,对于 POST 请求来说,会存放要提交给服务器的数据,如用户注册时填写的用户名、密码等表单数据。
  3. 服务器响应 :服务器接收到请求后,就像快递员收到包裹后进行处理。它会根据请求内容进行一系列操作,然后生成响应消息。响应消息包括响应状态码,比如 200 表示请求成功,服务器成功返回了我们需要的资源;404 则表示未找到请求的资源,就好像快递员找不到收件地址一样。同时,响应消息还包含响应头和响应体。响应头会说明响应数据的类型(如Content - Typetext/html表示返回的是 HTML 网页内容)等信息,而响应体则是服务器返回给我们的实际数据,比如网页的 HTML 代码。
  4. 连接关闭:在数据传输完成后,连接通常会关闭。不过,为了提高效率,在某些情况下,连接也可以保持打开状态,以便客户端能够快速进行后续请求,而无需再次建立连接。

特点

  1. 无状态:HTTP 协议本身是无状态的,这意味着服务器不会记住不同请求之间客户端的状态或信息。每一个请求都是独立的个体,就好像快递员每次送快递都不记得上一次给这个地址送过什么。例如,当我们在一个电商网站浏览商品,从一个页面跳转到另一个页面时,服务器并不会自动记住我们之前浏览过哪些商品,除非我们通过其他方式(如 Cookie)来记录这些信息。
  2. 明文传输:数据在传输过程中以明文形式发送,这就好比我们在一个透明的管道中传递信件,任何人都可以轻易地看到信件的内容。这种特性使得数据容易被窃取、篡改或监听。网络中的不法分子可以通过一些手段截获我们传输的数据,获取我们的账号密码、信用卡信息等敏感内容,还可能恶意篡改数据,导致我们获取到错误的信息。
  3. 应用场景:由于其简单高效,HTTP 协议广泛应用于网页浏览、数据获取等场景。我们日常访问新闻网站、查看博客文章等,都是通过 HTTP 协议来实现的。它就像互联网世界的 "通用语言",让我们能够便捷地获取各种信息。

HTTP 与 HTTPS 的区别

  1. 安全性:HTTP 以明文传输数据,存在安全风险;而 HTTPS 通过加密技术,有效保护数据安全,安全性高。
  2. 端口:HTTP 默认使用 80 端口,而 HTTPS 默认使用 443 端口。端口就像是不同的通道,不同协议通过不同的端口进行数据传输。
  3. 证书:HTTP 不需要数字证书,而 HTTPS 需要服务器拥有数字证书,用于身份验证和加密通信。
  4. 性能:由于 HTTPS 需要进行加密和解密操作,相比 HTTP 会消耗更多的计算资源和时间,性能相对略低。但随着硬件和网络技术的发展,这种性能差异在大多数情况下并不明显。
  5. 兼容性:HTTP 兼容性较好,在各种设备和网络环境中都能广泛使用;HTTPS 在某些旧设备或环境中可能存在兼容性问题,但总体上兼容性也在不断提高。
  6. 成本:HTTP 成本较低,而 HTTPS 需要购买数字证书,增加了一定的成本。

与 HTTP/HTTPS 相关的其他重要概念

GET 和 POST 请求

  1. GET 请求
    • 用途:主要用于从服务器获取数据,例如我们在浏览器中输入网址访问网页,就是通过 GET 请求获取网页内容;在搜索引擎中输入关键词进行搜索,也是使用 GET 请求将关键词发送给服务器,获取搜索结果。
    • 特点 :请求参数会附加在 URL 后面,以问号分隔,多个参数之间用 & 连接,如https://example.com?param1=value1&param2=value2。由于受限于 URL 的长度(不同浏览器对 URL 长度限制不同,一般在 2KB 到 8KB 左右),GET 请求的数据长度有限制。并且,因为参数暴露在 URL 中,安全性相对较低,容易被缓存、记录或窃取。比如,我们在浏览一些网站时,可能会发现浏览器地址栏中显示了我们搜索的关键词等参数,如果这些信息被不法分子获取,可能会导致隐私泄露。
  2. POST 请求
    • 用途:常用于向服务器提交数据,像用户注册、登录、在电商网站中提交订单等操作,都需要使用 POST 请求将用户输入的数据发送给服务器。
    • 特点:请求参数放在请求体中,不会显示在 URL 中,所以对数据长度没有像 GET 那样严格的限制。安全性相对较高,因为参数不直接暴露在 URL 中。但需要注意的是,如果传输过程没有加密(如在 HTTP 协议下),数据仍可能被窃取。

请求头、请求正文、响应头、响应正文

  1. 请求头 :客户端向服务器发送请求时,请求头包含了许多附加信息。例如User - Agent用于标识客户端的类型和版本,不同的浏览器(如 Chrome、Firefox)或移动应用在发送请求时,User - Agent的值会有所不同,服务器可以根据这个信息来优化响应内容,以适配不同的客户端。Accept则告知服务器客户端能接受的响应数据类型,比如客户端可以接受text/html格式的网页内容,也可以接受application/json格式的数据。Cookie信息也包含在请求头中,它可以让服务器识别用户身份,记录用户的一些状态信息。
  2. 请求正文:对于 POST 等请求,请求正文用于存放要提交给服务器的数据。比如在用户注册时,用户填写的用户名、密码等表单数据会被放在请求正文中发送给服务器。而 GET 请求一般没有请求正文,即使有也不会被服务器处理。
  3. 响应头 :服务器在响应客户端请求时,响应头包含了许多有用的信息。Content - Type说明了响应数据的类型,如text/html表示返回的是 HTML 网页内容,客户端可以根据这个信息正确地解析和显示数据。Set - Cookie用于在客户端设置 Cookie,服务器可以通过这个字段向客户端发送新的 Cookie 信息或更新已有的 Cookie。Content - Length则表示响应数据的长度,客户端可以根据这个信息来判断是否完整接收了数据。
  4. 响应正文:响应正文是服务器返回给客户端的实际数据内容。如果我们访问一个网页,响应正文可能就是网页的 HTML 代码,浏览器会根据这些代码来渲染出我们看到的网页页面。如果是一个数据接口请求,响应正文可能是 JSON 格式的数据,客户端可以根据这些数据进行相应的业务逻辑处理。
  1. 定义:Cookie 是由服务器发送到用户浏览器并保存在本地的一小块数据。它就像是服务器给用户发放的一张 "身份卡片",可以在用户下次访问同一服务器时被发送回服务器,用于识别用户身份、记录用户偏好等。例如,当我们在一个网站上登录后,服务器会通过设置 Cookie 来记住我们的登录状态,这样我们在后续访问该网站的其他页面时,就不需要再次登录。
  2. 获取 Cookie 的方法
    • 客户端获取 :在浏览器中,我们可以通过开发者工具的 "Application" 或 "Storage" 选项卡查看当前网站的 Cookie。在 JavaScript 中,可使用document.cookie来获取当前页面相关的 Cookie 字符串,不过这个字符串是经过编码的,需要进一步解析才能获取到具体的 Cookie 信息。
    • 服务器获取 :不同的服务器端语言有不同的方法来获取客户端发送过来的 Cookie。例如,在 Python 的 Flask 框架中,可以通过request.cookies来获取;在 Java 的 Servlet 中,可以通过HttpServletRequest对象的getCookies()方法来获取。一般来说,都是从请求对象中获取 Cookie 信息。
  3. Cookie 的优缺点
    • 优点:Cookie 可以用于实现用户登录状态保持,让用户在访问网站的不同页面时无需重复登录,提升用户体验。同时,它还可以记录用户的浏览偏好,比如用户设置的字体大小、页面布局等,下次用户访问时可以直接应用这些设置。此外,将一些用户相关的信息存储在客户端的 Cookie 中,可以减轻服务器的负担。
    • 缺点:Cookie 的存储容量有限,一般单个 Cookie 大小限制在 4KB 左右。并且,由于 Cookie 存储在客户端,存在安全性问题,容易被窃取或篡改。如果没有加密,不法分子获取到 Cookie 后,可能会冒充用户身份进行操作,导致用户信息泄露和安全风险。另外,Cookie 会随着每次请求发送到服务器,可能会增加不必要的网络流量,尤其是当 Cookie 数量较多或内容较大时。

Session

定义

Session 通常指会话,是在计算机网络通信中,特别是在 Web 应用程序中,用于跟踪用户与服务器之间交互状态的一种机制。它允许服务器在多个请求之间识别同一个用户,并存储与该用户相关的特定数据和状态信息,弥补了 HTTP 协议无状态的不足。

工作原理

  • 创建 Session :当用户首次访问 Web 应用程序时,服务器会为该用户创建一个唯一的 Session 对象,并为其分配一个唯一的标识符(Session ID)。这个 Session ID 通常会通过响应头中的Set-Cookie字段发送给客户端,客户端会将其存储在 Cookie 中,或者也可以通过 URL 重写等方式在后续请求中携带。
  • Session 数据存储:服务器可以在 Session 对象中存储各种与用户相关的数据,例如用户登录信息、购物车内容、浏览历史等。这些数据会在服务器端的内存或其他存储介质中保存,直到 Session 过期或被主动销毁。
  • Session 跟踪:在用户与 Web 应用程序的交互过程中,客户端每次向服务器发送请求时,都会在请求头中包含 Session ID。服务器根据这个 Session ID 来查找对应的 Session 对象,从而获取该用户的相关数据和状态信息,实现对用户会话的跟踪。
  • Session 销毁:Session 有一定的生命周期,当用户长时间不活动(超过设置的超时时间),或者用户主动注销登录,又或者服务器出现故障重启等情况时,服务器会销毁该用户的 Session 对象,释放相关资源。

实现方式

  • 基于 Cookie :这是最常见的方式。服务器通过Set-Cookie响应头将 Session ID 发送给客户端,客户端将其存储在 Cookie 中。后续请求时,浏览器会自动在请求头中带上这个 Cookie,服务器据此识别用户的 Session。
  • URL 重写 :将 Session ID 附加在 URL 后面,例如http://example.com/page?sessionId=12345。当用户点击链接或提交表单时,Session ID 会随着请求发送到服务器,服务器通过解析 URL 获取 Session ID 来识别用户。
  • 隐藏表单字段:在 HTML 表单中添加一个隐藏字段,用于存储 Session ID。当表单提交时,Session ID 会作为表单数据一起发送到服务器。
  • 存储位置:Cookie 数据存储在客户端浏览器中,而 Session 数据存储在服务器端。
  • 安全性:由于 Session 数据在服务器端,相对来说比 Cookie 更安全,不容易被客户端篡改。而 Cookie 存储在客户端,存在被恶意篡改或窃取的风险。
  • 存储容量:Cookie 通常有大小限制,一般单个 Cookie 不超过 4KB,而 Session 存储在服务器端,理论上可以存储更多的数据,具体限制取决于服务器的配置和存储方式。
  • 作用:Cookie 主要用于存储一些简单的用户偏好、登录状态等信息,并且可以在不同域名之间根据设置进行共享。Session 主要用于在服务器端跟踪用户的会话状态,存储与用户相关的复杂数据和状态信息,一般只在同一个 Web 应用程序内有效。

对称加密和非对称加密

  1. 对称加密原理
    • 定义:对称加密是指加密和解密使用相同的密钥。就好像两个人使用同一把钥匙来锁和开一个箱子。
    • 过程:发送方使用密钥对明文进行加密,将明文转换为密文,然后将密文发送给接收方。接收方收到密文后,使用相同的密钥对密文进行解密,还原出明文。常见的对称加密算法有 DES、AES 等。对称加密的优点是加密和解密速度快,效率高,适用于大量数据的加密。但它的缺点也很明显,就是密钥管理困难。因为通信双方需要安全地共享密钥,如果密钥在传输过程中泄露,那么数据就不安全了。例如,在一个团队中,如果大家都使用对称加密进行通信,那么如何安全地将密钥分发给每一个成员就是一个难题。
  2. 非对称加密原理
    • 定义:非对称加密使用一对密钥,即公钥和私钥。公钥可以公开分发,就像我们可以将自己的邮箱地址公开给任何人一样;而私钥由用户自己妥善保存,就像我们要保管好自己的家门钥匙。
    • 过程:发送方使用接收方的公钥对明文进行加密,生成密文,然后将密文发送给接收方。接收方使用自己的私钥对密文进行解密,得到明文。常见的非对称加密算法有 RSA、ECC 等。非对称加密的优势在于密钥管理相对简单,因为公钥可以公开分发,不需要像对称加密那样严格保密。但它的加密和解密速度相对较慢,一般用于对少量关键数据的加密,如数字证书、密钥交换等场景。例如,在 HTTPS 协议中,服务器会将自己的公钥放在数字证书中发送给客户端,客户端使用公钥对数据进行加密后发送给服务器,服务器再用私钥进行解密。

HTTP 协议不安全原因及 HTTPS 中的安全套接字

  1. HTTP 协议不安全原因:由于 HTTP 协议的数据是以明文传输的,这就好比在一个没有任何防护的道路上运输贵重物品,网络中的攻击者可以轻易地截取、监听传输的内容。他们可以获取用户的账号密码、信用卡信息等敏感数据,给用户带来巨大的损失。同时,攻击者还可以篡改数据内容,比如将一个商品的价格从 100 元篡改为 1 元,导致数据的完整性和真实性无法保证,影响正常的业务流程。
  2. HTTPS 协议中的安全套接字:HTTPS 是在 HTTP 基础上通过 SSL/TLS 协议来实现加密传输和身份认证等功能。SSL/TLS 协议中的安全套接字层就像是一个安全的通道,负责在客户端和服务器之间建立安全的连接,进行数据的加密和解密。它使用了对称加密和非对称加密等技术,在保证数据传输安全的同时,也提高了通信的效率。例如,在 SSL/TLS 握手过程中,会使用非对称加密来交换密钥,然后在后续的数据传输中使用对称加密来提高加密和解密的速度,确保数据能够安全、高效地传输。
相关推荐
BullSmall2 小时前
第三方软件安全-Dependency‑Track Docker 部署
安全·docker·容器
AImatters2 小时前
国产算力底座,支撑油气储运数字化迈过关键分水岭
安全·cpu·算力·海光·油气储运
叠叠乐5 小时前
中国移动家庭云电脑window关闭所有安全脚本
安全
Jmyd01235 小时前
实训室的 3D 模型涉及肖像文物,数据安全与合规怎么做?
安全·3d·数据安全·虚拟实训
芯盾时代5 小时前
《金融业网络安全管理办法(征求意见稿)》全条款深度拆解(三)
网络·安全·网络安全
敢敢是只喵i6 小时前
一个本地 AI Agent 要操作多个门店或 SaaS 账号,应该怎样安全切换身份?
人工智能·安全·ai·系统架构·业界资讯
Acrel12347 小时前
DC800V 大规模落地,算力机房安全该如何保障
安全
其实防守也摸鱼7 小时前
权限提升与横向移动:从内网渗透到域控的完整技术图谱
运维·服务器·数据库·安全·github·copilot·渗透
深圳海导科技8 小时前
资产防盗追踪系统:物联网高价值资产安全管理|海导科技navynav
科技·物联网·安全
波多利希最高礼仪的握力器8 小时前
安全复制SCP
linux·服务器·安全