计算机网络基础:4.HTTP与HTTPS

news2024/9/23 21:27:27

一、回顾设定

        想象你在经营一家繁忙的餐厅,顾客们通过点餐系统(网卡)下单,订单被前台(路由器)接收并分发到各个厨房区域(网络设备)。光猫像是食材供应商,通过高效的物流系统(光纤)将食材送到餐厅。厨房(交换机)处理多个订单,确保每道菜(数据包)都按顺序送达。

        在这餐厅中,OSI七层模型就像是餐厅的运营流程:

  • 物理层:餐厅的物理设施(如餐桌、椅子)传输原始比特流。
  • 数据链路层:服务员将订单从顾客传递到厨房,确保数据在物理链路上的可靠传输。
  • 网络层:前台接收订单并分发到正确的厨房区域。
  • 传输层:厨房调度员确保每道菜按顺序送达。
  • 会话层:预订系统管理顾客的预订和用餐时间。
  • 表示层:菜单将食物以吸引人的方式展示(处理数据格式、加密和压缩)。
  • 应用层:点餐应用直接接收顾客的订单。

        TCP/IP模型简化了这个流程,将应用层、表示层和会话层合并为一个应用层,直接与用户交互。每个层次协议如HTTP、FTP、TCP、IP、Ethernet和Wi-Fi分别对应不同的餐厅操作。

        IP地址就像餐桌编号,确保每个设备(桌子)都有一个唯一的编号,前台(网络层)根据IP地址将订单分发到正确的厨房区域,再由服务员(数据链路层)送到具体的餐桌。

        DNS服务器则是餐厅中的“顾客座位对照表”,将顾客的名字(域名)转换为餐桌编号(IP地址),确保每个订单准确送达。不同类型的域名可以比作餐厅中的不同类型顾客名单,比如VIP名单、普通顾客名单等。

        通过上述设定,我们可以更好地理解网络各个层次和设备的作用,以及它们如何协同工作以确保数据(订单)高效、安全地从源头(顾客)传输到目的地(目标设备)。详细介绍请看前两篇文章。

二、HTTP

        1. HTTP定义: HTTP(HyperText Transfer Protocol)就像餐厅中顾客与服务员之间的通信语言。顾客使用这种语言下单,服务员通过这种语言将订单传递到厨房。

        2. 工作原理: HTTP基于TCP/IP协议,类似于餐厅中前台(路由器)与厨房(交换机)之间的点餐和传菜系统。它是一个应用层协议,定义了顾客(客户端)和厨房(服务器)之间的请求和响应标准。

        3. 请求和响应:

  • 请求:顾客(客户端)发送的HTTP请求就像顾客向服务员下单,包含订单的各个部分。

    • 请求行:就像顾客的点单,包括点了什么菜(请求方法,如GET、POST)。
      • GET请求就是顾客查看菜单上的菜品信息。这种请求是为了获取信息,不会改变餐厅的状态。
      • POST请求就是顾客提交一个新的订单。这个请求会改变餐厅的状态,因为它代表了一个新的订单的提交。
      • 比如在HTML中常见的GET请求与POST请求的表单例子:
      • <form method="GET" action="/search">
          <label for="query">Search:</label>
          <input type="text" id="query" name="query">
          <button type="submit">Submit</button>
        </form>
        <form method="POST" action="/order">
          <label for="item">Order Item:</label>
          <input type="text" id="item" name="item">
          <button type="submit">Submit</button>
        </form>
    • 请求头:类似于顾客的特殊要求(如无辣、少盐),包含额外信息(如User-Agent、Accept)。
    • 空行:表示请求头的结束
    • 请求体:就像顾客详细的订单内容(如要多少份、特殊备注),特别是在POST请求中。
  • 响应:厨房(服务器)返回给顾客的HTTP响应就像服务员上菜,包含上菜的各个部分。

    • 状态行:类似于服务员告诉顾客订单状态(如菜品正在准备、已上菜),包含状态码(如200成功、404未找到)。
    • 响应头:就像服务员提供的额外信息(如菜品的配料说明),包含服务器信息、内容类型等。
    • 空行:表示响应头的结束。
    • 响应体:实际的菜品内容(如网页、数据)。

        4. HTTP方法: HTTP方法如GET、POST、PUT、DELETE等,就像不同类型的点单方式:

  • GET:像顾客查看菜单(获取资源)。
  • POST:像顾客提交订单(提交数据)。
  • PUT:像顾客修改订单(更新资源)。
  • DELETE:像顾客取消订单(删除资源)。

        5. 状态码:服务器返回的状态码就像服务员告知顾客订单状态:

  • 200:成功上菜。
  • 404:菜品未找到(点单的菜品不存在)。
  • 500:厨房出错(服务器错误)。

        6. 安全性:HTTP协议本身不加密,类似于在公开场合大声点餐,容易被他人听到。HTTPS通过SSL/TLS协议对数据加密,就像服务员悄声传递订单,确保信息安全。

        7. 持久连接:HTTP/1.1引入的持久连接,就像服务员在整个用餐过程中保持联系,而不是每次点菜都重新建立联系,减少了时间和沟通成本。

        8. HTTP/2:HTTP/2是HTTP协议的升级版,支持头部压缩和多路复用,提高了传输效率,类似于服务员同时处理多个订单,提高了服务效率。

        9. 内容类型:HTTP协议定义的内容类型如text/html、application/json等,类似于餐厅的菜单项,告诉顾客菜品的具体类型。

        10. 缓存:HTTP协议支持缓存机制,类似于餐厅提前准备一些常点的菜品,减少等待时间,提高服务速度。

三、HTTPS

        HTTPS(HyperText Transfer Protocol Secure)是HTTP的安全版。它在传统HTTP协议的基础上增加了SSL/TLS加密层,确保数据在传输过程中是加密的,保护用户隐私和数据安全。

        HTTPS协议可以比作餐厅中的保密点餐服务。在这个服务中,顾客的点单信息通过加密的方式传递给服务员,确保其他顾客或不相关人员无法窃听或篡改信息。

1. 加密数据传输

        在HTTPS协议中,数据传输是加密的,类似于顾客和服务员使用密语交流订单内容,确保只有顾客和服务员知道具体的点单信息。

  • 数据加密:所有数据在传输前都会被加密,防止中途被窃听或篡改。就像顾客和服务员使用特定的密语,外人无法理解他们的对话。
  • SSL/TLS:HTTPS使用SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议来加密数据。SSL/TLS是加密的实现方式,类似于顾客和服务员之间的密语系统。
2. 数据完整性

        HTTPS确保数据在传输过程中不被篡改,就像服务员从厨房取菜到桌上的过程中,确保菜品不会被其他人动过。

  • 消息摘要:HTTPS通过消息摘要(如SHA-256)来验证数据的完整性。这就像服务员在上菜前检查菜品是否完好无损。
3. 身份验证

        HTTPS使用数字证书验证服务器身份,确保顾客与真正的餐厅(服务器)交流,而不是与冒牌餐厅(伪装的服务器)交流。

  • 数字证书:HTTPS使用由可信的第三方(CA,证书颁发机构)颁发的数字证书来验证服务器身份,类似于顾客检查服务员的工牌或餐厅的营业执照,确保其真实性。
4. HTTPS 的工作流程

        HTTPS的工作流程可以比作顾客和服务员之间的一次加密交流过程,从身份验证到加密交流,再到订单传递。

  • 建立安全连接:顾客和服务员首先相互验证身份(使用数字证书),确保对方可信。
  • 生成加密密钥:一旦身份验证通过,顾客和服务员会共同生成一个共享的加密密钥,用于接下来的交流。
  • 加密通信:所有点单和上菜信息通过加密密钥进行加密传输,确保信息安全。
5. 代码示例

        不妨写一个Python代码来观察HTTP与HTTPS的差异,这里以百度为例:

import requests
from requests.exceptions import SSLError

# URL using HTTP
http_url = "http://baidu.com"

# URL using HTTPS
https_url = "https://baidu.com"

def fetch_data(url):
    try:
        response = requests.get(url)
        return response.status_code, response.content
    except SSLError as e:
        return None, str(e)

def main():
    # Fetch data using HTTP
    http_status, http_content = fetch_data(http_url)
    print("HTTP Status Code:", http_status)
    print("HTTP Content (first 100 bytes):", http_content[:100])

    # Fetch data using HTTPS
    https_status, https_content = fetch_data(https_url)
    print("\nHTTPS Status Code:", https_status)
    print("HTTPS Content (first 100 bytes):", https_content[:100])

if __name__ == "__main__":
    main()

        返回结果如下:

HTTP Status Code: 200
HTTP Content (first 100 bytes): b'<html>\n<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">\n</html>\n'

HTTPS Status Code: 200
HTTPS Content (first 100 bytes): b'<!DOCTYPE html>\r\n<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charse'

进程已结束,退出代码0

        可以看到二者状态码都是200,表示均访问成功了。

        同时,HTTP协议返回的内容在传输过程中是以明文形式发送的,任何中间人都可以读取到这些内容。而HTTPS协议返回的通过SSL/TLS协议进行了加密,这样就无法被中间人直接读取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1946402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2、LangChain —— RAG基本架构

文章目录 一、概述二、什么是 RAG三、概念1、Indexing2、Retrieval and generation 四、设置1、下载安装 langchain2、LangSmith 五、一个简单的RAG后端1、Load2、Split3、Embedding and Store4、Retrieval5、Generate 一、概述 LLM 支持的最强大的应用程序之一是 复杂的问答 (…

MySQL中实现动态表单中JSON元素精准匹配的方法

目录 前言 一、动态表单技术 1、包含的主要信息 2、元素属性设置 3、表单内容 二、表单数据存储和查询 1、数据存储 2、数据的查询 3、在5.7版本中进行JSON检索 4、8.0后的优化查询 三、总结 前言 在很多有工作流设置的地方、比如需要在不同的流程中&#xff0c;需要…

【八股系列】JavaScript如何判断一个对象是否属于某个类?

&#x1f389; 博客主页&#xff1a;【剑九 六千里-CSDN博客】 &#x1f3a8; 上一篇文章&#xff1a;【探索扫描二维码登录的奥秘&#xff1a;从前端到后端的无缝连接】 &#x1f3a0; 系列专栏&#xff1a;【面试题-八股系列】 &#x1f496; 感谢大家点赞&#x1f44d;收藏⭐…

基于单片机控制的家电产品硬件故障诊断

摘要&#xff1a; 在现阶段家用电子产品生产制造的过程中&#xff0c;需要应用到非常多的单片机以及单片机控制技术&#xff0c;单片机凭借着自身体积小、反应快、功耗低的优势迅速抢占了家电产品的市场。并且在单片机实际的应用过程中&#xff0c;通过对单片机控制技术的掌握可…

HarmonyOS 本地真机运行

目录 官网地址 1.开发工具设置签名 2.手机开启开发者模式 3.使用USB连接方式 4.使用无线调试连接方式 5.常见的问题 官网地址 使用真机运行应用 使用本地真机运行应用/服务 1.开发工具设置签名 官网应用/服务签名 1.左上角文件--项目结构-勾选自动生成签名-Sign in登录 2…

【Vue3】watch 监视 reactive 定义的数据

【Vue3】watch 监视 reactive 定义的数据 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经…

Binius-based zkVM:为Polygon AggLayer开发、FPGA加速的zkVM

1. 引言 近日&#xff0c;ZK硬件加速巨头Irreducible和Polygon团队宣布联合开发生产级的Binius-based zkVM&#xff0c;用于助力Polygon AggLayer&#xff0c;实现具有低开销、硬件加速的binary proofs。 Irreducible&#xff08;曾用名为Ulvetanna&#xff09;团队 Benjamin …

如何在 Spring Boot 中开发一个操作日志系统

文章目录 前言添加依赖配置日志存储创建实体类创建仓库接口创建AOP切面配置日志级别测试日志系统 前言 在开发企业级应用时&#xff0c;记录用户操作日志是非常重要的。这不仅能帮助开发者监控系统的行为&#xff0c;还能在出现问题时进行追踪。在这篇文章中&#xff0c;我们将…

线性代数|机器学习-P25线性规划和两人零和博弈

文章目录 0. 概述1. 线性规划问题1.1 定义1.2 举例 2. 线性规划中的对偶问题3. 最大流 - 最小割问题4. 两人零和博弈 MIT教授教学视频&#xff0c;讲得比较泛&#xff0c;需要另外学习很多知识补充 0. 概述 线性规划[LP]问题 线性规划是问题为线性求最值&#xff0c;约束也是求…

前端调试合集(包含移动端/内嵌h5)

代码内使用方法 alert/console alert和console.log作为JS最基本的调试能力&#xff0c;提供了简易版的断点 (只能断一下) 和输出 (只能输出字符串) 能力&#xff0c;可以在代码运行到预期的位置输出预期的log&#xff0c;通过对不同流程下写入alert&#xff0c;输出变量的值来…

普元EOS学习笔记-EOS的ide开发工具的介绍

前言 普元EOS开发包括低开和高开。 EOS低开&#xff0c;直接在浏览器操作即可&#xff0c;不需要编码。 EOS高开&#xff0c;需要使用EOS的ide工具&#xff0c;进行编码开发。 EOS的ide工具是普元在Eclipse基础上进行的扩展&#xff0c;添加了若干插件&#xff0c;专门用于…

Redis 7.x 系列【29】集群原理之自动故障转移

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 案例演示3. 工作原理3.1 故障检测3.2 排名3.3 延迟等待3.4 投票3.5 上位 1.…

LeetCode:对称的二叉树(C语言)

1、问题概述&#xff1a;给一个二叉树&#xff0c;看是否按轴对称 2、示例 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 3、分析 &#xff08;1&a…

MATLAB和Python零模型社会生物生成式结构化图

&#x1f3af;要点&#x1f3af;要点&#x1f3af;启发式方法无标度和前馈拓扑的网络编码&#x1f3af;随机遗传模型使用布线规则&#x1f3af;随机遗传算法测试连接组模型&#x1f3af;确定性地生成分支树和分层网络&#xff0c;同质偏好规则的联系&#x1f3af;生成随机网络节…

无涯·问知财报解读,辅助更加明智的决策

财报解读就像是给公司做一次全面的体检&#xff0c;是理解公司内部运作机制和市场表现的一把钥匙&#xff0c;能够有效帮助投资者、分析师、管理层以及所有市场参与者判断一家公司的健康程度和发展潜力。 星环科技无涯问知的财经库内置了企业年报及财经类信息&#xff0c;并对…

GateWay网关微服务定位和理论知识

微服务架构的网关在哪里&#xff1f; 概念 SPring Cloud Gateway组件的核心是一系列的过滤器&#xff0c;通过这些过滤器可以将客户端发送的请求转发&#xff08;路由&#xff09;到对应的微服务。Spring Cloud Gateway是加在整个微服务最前沿的防火墙和代理器&#xff0c;隐藏…

linux离线安装mysql8(单机版)

文章目录 一、检查服务器是否有残留mysql资源&#xff0c;有的话就全删除1.1、查询mysql已安装的相关依赖&#xff1a;1.2、查找含有MySQL的目录 二、安装2.1、上传mysql安装包到文件夹下并解压2.2、移动及重命名2.3、mysql用户2.4、配置mysql所需的my.cnf文件2.5、给my.cnf配置…

基于单片机控制的红外热释电家庭防盗报警器硬件系统设计

【摘要】 随着社会的发展和人们安全意识的提高&#xff0c;传统的家庭防盗系统不能适应现代生活中多变的环境。本文设计开发的红外热释电家庭防盗报警器能改善传统防盗系统结构复杂&#xff0c;计算繁琐、价格昂贵、监控盲区等缺陷&#xff0c;主要由单片机模块、复位电路模块、…

pycharm+pytorch2.3.1安装

成功运行 Anaconda简介 Anaconda 就是可以便捷获取包且对包能够进行管理&#xff0c;同时对环境可以统一管理的发行版本。Anaconda包含了conda、Python在内的超过180个科学包及其依赖项。 Anaconda安装 去官网地址下载 Download Anaconda Distribution | Anaconda​www.ana…

<数据集>棉花叶片病害识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;5837张 标注数量(xml文件个数)&#xff1a;5837 标注数量(txt文件个数)&#xff1a;5837 标注类别数&#xff1a;4 标注类别名称&#xff1a;[Bacterial Blight, Curl virus, Fussarium wilt, Healthy] 序号类别名…