计算机网络 -- HTTP 协议详解

  根据以往的内容我们可以得知,大多数网络协议一共有五层标准,今天我们将 探索 应用层的 HTTP 协议。

一 什么是HTTP协议

   协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。

   HTTP 协议 ,全称超文本传输协议 ,顾名思义,他是一种规范了 超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器 的协议

   HTTP协议有众多版本,目前使用 最多的是 HTTP/1.1 版本 ,其它版本我们不做解释。

 (其实目前我们使用最多的是 HTTPS 协议,但其实就是HTTP 加上了加密和认证机制,底层还是HTTP协议,因此我们也不做太多解释,只讲HTTP)

二 Web服务器,浏览器,代理服务器

       当我们打开浏览器,在地址栏中输入网址,然后我们就看到了网页。 原理是怎样的呢?

  实际上我们输入网址后,我们的浏览器给Web服务器发送了一个Request 请求, Web服务器接到Request 后进行处理,生成相应的 Response,然后发送给浏览器, 浏览器解析 Response 中的HTML,提取出网页资源,这样我们就看到了网页,过程如下图所示:

  我们的浏览器就是一个客户端,Request 请求就是请求服务器给予客户端资源,response服务器给我们的资源。

  当然,我们的 Request 有可能是经过了代理服务器,最后才到达Web服务器的。

过程如下图所示:

 代理服务器就是网络信息的中转站,有什么功能呢?

  1. 提高访问速度, 大多数的代理服务器都有缓存功能,代理服务器被众多用户使用,当申请频率较高的资源(网页)时,可以直接从代理服务器返回Response。

  2. 突破限制, 也就是翻墙了。

  3. 隐藏身份。(这两点我们以后再讲)

 三 URL详解

3.1 URL的概念(网址)

  URL(Uniform Resource Locator)是统一资源定位符,用于在互联网上标识和定位资源的地址。‌每个资源在互联网上都有一个唯一的URL,它包含了访问该资源所需的所有信息,如协议、服务器地址、端口号、路径和文件名等‌。

3.2 URL的组成部分

URL的组成部分

  1. 协议(Protocol)‌:指定了资源访问所使用的传输协议,如HTTP、HTTPS、FTP等。例如,  http://   表示通过HTTP协议访问资源‌。
  2. 主机(Host)‌: 资源的服务器地址,可以是域名或IP地址。例如  www.baidu.com‌。
  3. 端口(Port)‌:指定服务器上特定服务的端口号,默认端口通常是80。例如,8080表示使用8080端口‌。
  4. 路径(Path)‌:指定资源在服务器上的具体位置。例如,/Public/linux/表示资源位于服务器的Public/linux目录下‌。
  5. 查询字符串(Query String)‌:附加在URL末尾,用于传递参数给服务器。例如,?param=value‌。
  6. 锚点(Anchor)‌:用于页面内的定位,通常以#符号后跟一个标识符表示。例如,#section1

3.3 URL的格式和语法

URL的一般语法格式为:

  protocol://hostname[:port]/path/[:parameters][?query]#fragment

其中,带方括号的部分是可选的。例如:

   https://www.baidu.com/Public/linux/?fr=aladdin#23

  在这个例子中,https是协议,www.baidu.com是主机名,端口号默认省略(HTTP默认端口80),/Public/linux/是路径,?fr=aladdin是查询字符串,#23是锚点‌。

3.4 URL的应用场景和重要性

  URL在互联网中起着至关重要的作用,它不仅方便用户通过浏览器访问特定的网页或资源,也为开发者提供了一种标准的方式来定位和引用资源。通过URL,可以建立与服务器上具体资源的映射关系,实现资源的访问和交互‌。

四 HTTP的工作原理

HTTP 协议基于客户端-服务器模型,遵循请求-响应的循环:

  1.   客户端发起连接: 客户端(例如浏览器)向服务器发送一个 TCP 连接请求,指定服务器的 IP 地址和端口号(HTTP 默认端口号为 80,HTTPS 默认端口号为 443)。
  2.   服务器接受连接: 服务器接受客户端的连接请求,建立 TCP 连接。
  3.   客户端发送请求: 客户端通过已建立的 TCP 连接向服务器发送 HTTP 请求消息。请求消息包含请求方法、URL、HTTP 版本、请求头和可选的请求体。
  4.   服务器处理请求: 服务器接收并解析客户端的 HTTP 请求,根据请求内容执行相应的操作,例如读取文件、查询数据库、运行程序等。
  5.   服务器返回响应: 服务器处理完请求后,向客户端返回 HTTP 响应消息。响应消息包含状态码、HTTP 版本、响应头和可选的响应体。
  6.   连接关闭(可选): 在 HTTP/1.0 中,连接通常在一次请求-响应后关闭。HTTP/1.1 引入了持久连接,允许在单个 TCP 连接上发送多个请求和响应,提高了效率。HTTP/2 和 HTTP/3 进一步增强了连接管理,允许多路复用,进一步提升性能。

五 HTTP 请求组成

HTTP 请求由几个关键部分组成,共同决定了服务器如何处理请求:

5.1 请求方法

请求方法 (Method): 指示要执行的操作类型。以下是常用的 HTTP 方法以及它们在增删改查中的应用:

  1. GET: 用于查询资源。它应该只用于检索数据,不应有任何副作用。请求参数通常附加在 URL 中。例如:GET /users?id=1。
  2. POST: 用于增加新资源或提交数据。请求数据包含在请求体中,可以是各种格式,例如表单数据、JSON 等。例如:POST /users (提交新用户数据)。
  3. PUT: 用于改更新现有资源。它要求客户端提供完整的资源表示。通常用于更新整个资源。例如:PUT /users/1 (更新 ID 为 1 的用户)。
  4. PATCH: 用于改更新现有资源的部分内容。它只提供需要修改的字段,比 PUT 更高效。例如:PATCH /users/1 (更新 ID 为 1 的用户的某些字段)。
  5. DELETE: 用于删除资源。例如:DELETE /users/1 (删除 ID 为 1 的用户)HEAD: 类似于 GET,但只返回响应头,不返回响应体。用于检查资源是否存在或获取元数据。
  6. OPTIONS: 用于查询服务器支持的 HTTP 方法。例如:OPTIONS /users。
  7. CONNECT: 用于建立到服务器的隧道连接,通常用于代理服务器。
  8. TRACE: 用于诊断,客户端可以查看服务器收到的请求。

5.2 其它组成

1. URL (Uniform Resource Locator): 指定要访问的资源位置。

2. HTTP 版本: 指定使用的 HTTP 协议版本,例如 HTTP/1.1、HTTP/2 或 HTTP/3。

3. 请求头 (Headers): 包含额外的元数据,例如客户端信息、可接受的编码格式、缓存控制等。一些常见的请求头包括:

  1. User-Agent: 标识客户端(例如浏览器)的类型和版本。
  2. Accept: 指定客户端可接受的响应内容类型。
  3. Content-Type: 指定请求体的数据类型。
  4. Authorization: 用于身份验证。
  5. f-Modified-Since: 用于条件请求,仅当资源在指定日期之后修改过才返回。

4.请求体 (Body): 可选部分,包含要发送的数据,例如表单数据、JSON 数据等。通常用于 POST、PUT 和 PATCH 请求。

六  HTTP 响应

服务器在收到请求后返回一个 HTTP 响应,包含以下部分:

6.1 状态码

状态码 (Status Code): 指示请求的结果。状态码分为五类:

 1. 1xx (信息性): 表示请求已接收,继续处理。例如:100 Continue

 2. 2xx (成功): 表示请求成功。

  1. 200 OK: 请求成功。
  2. 201 Created: 资源已创建。
  3. 204 No Content: 请求成功,但没有响应体。

  3.3xx (重定向): 表示需要进一步操作以完成请求。

  1. 301 Moved Permanently: 资源永久移动到新位置。
  2. 302 Found: 资源临时移动到新位置。
  3. 304 Not Modified: 资源未修改,客户端可以使用缓存版本。

 4. 4xx (客户端错误): 表示客户端请求有误。

  1. 400 Bad Request: 请求语法错误。
  2. 401 Unauthorized: 未授权。
  3. 403 Forbidden: 禁止访问。
  4. 404 Not Found: 资源未找到。
  5. 405 Method Not Allowed: 请求方法不被允许。

 5. 5xx (服务器错误): 表示服务器端发生错误。

  1. 500 Internal Server Error: 服务器内部错误。
  2. 502 Bad Gateway: 网关错误。
  3. 503 Service Unavailable: 服务不可用。

6.2 其它组成

1.HTTP 版本: 指定使用的 HTTP 协议版本。

2.响应头 (Headers): 包含额外的元数据,例如内容类型、内容长度、缓存控制等。一些常见的响应头包括:

  1. Content-Type: 指定响应体的数据类型。
  2. Content-Length: 指定响应体的长度。
  3. Cache-Control: 指定缓存策略。
  4. Set-Cookie: 设置 Cookie。

3.响应体 (Body): 包含服务器返回的数据,例如 HTML 页面、JSON 数据等。

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

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

相关文章

算法【Java】—— 动态规划之斐波那契数列模型

动态规划 动态规划的思路一共有五个步骤: 状态表示:由经验和题目要求得出,这个确实有点抽象,下面的题目会带大家慢慢感受状态标识状态转移方程初始化:避免越界访问 dp 表,所以在进行填表之前我们要预先填…

kafka使用指南

文章目录 前言特点架构一、zookeeper安装配置二、kafka安装配置三、快去试一下吧!下一章:kafka命令之分区接入创建删除 前言 随着大数据时代的到来,高吞吐量的分布式发布订阅消息系统kafka得到了极大的应用,它具有高吞吐量、 特点 高吞吐量…

Windows 服务器中用户的分类

Windows 服务器中用户的分类 本地用户(只能在本地登录)如果你的服务器升级为域成员服务器,即刻失去本地服务。 漫游用户(域用户就是漫游用户,可用在域内的任何一个设备上、且在权限允许的范围内进行登录和资源使用。 …

基于YOLO11/v10/v8/v5深度学习的建筑墙面损伤检测系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 👍感谢小伙伴们点赞、关注! 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

Sublime Text 的PHP格式化插件phpfmt 的 setting 配置参数说明

phpfmt.sublime-settings 是 Sublime Text 中 phpfmt 插件的配置文件,用于定义代码格式化的各种参数。以下是一些常见的配置参数及其说明: 1、version 指定配置文件的版本,根据 phpfmt 插件的版本,此值可能有所不同。 2、php_b…

Oracle视频基础1.2.1练习

1.2.1 需求: 完整格式查看所有用户进程判断oracle启动状态 连接sqlplus不登陆 以sysdba身份登陆,通过登陆信息判断oracle启动状态 启动数据库,查系统全局区动态组件表 使用shell,启动监听然后返回sql ps -ef sqlplus /nolog con…

Ajax学习

目录 一、是什么 二、jQuery.ajax 三、初实现 四、再实现 五、应用 一、是什么 AJAX:Asynchronous JavaScript and XML(异步的JavaScript和XML) 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术 应用&#…

音频中sample rate是什么意思?

‌sample rate‌在数字信号处理中,指的是‌采样频率‌,即每秒钟从连续信号中抽取的样本数量。采样频率越高,信号的还原度越高,但同时也会增加计算负担和存储需求‌。 实际应用场景 在音频处理中,设置合适的采样率可以…

RabbitMQ客户端应用开发实战

这一章节我们将快速完成RabbitMQ客户端基础功能的开发实战。 一、回顾RabbitMQ基础概念 这个RabbitMQ的核心组件,是进行应用开发的基础。 二、RabbitMQ基础编程模型 RabbitMQ提供了很多种主流编程语言的客户端支持。这里我们只分析Java语言的客户端。 上一章节提…

【光交换器件】

一、ROADM ROADM节点通常由波长选择开关(WSS)和其他模块组成。 ROADM分类 光网络交叉能力分类 Colorless(波长无关) Directionless(方向无关) Contentionless(竞争无关) Flexi-G…

docker的安装配置与基本简单命令

目录 1.docker简介 2.docker安装 2.1使用root用户登陆 更新yum源 2.2安装依赖 2.3设置yum源 更新yum源索引 2.4安装docker 2.5启动并且设置开机自启动 2.6验证安装是否成功 2.7配置docker加速器 2.8重启docker服务 3.docker简单使用 3.1下载镜像 3.2列出…

第72期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

Fx-LMS 单片机

功能:主动降噪控制器 开发板连接麦克风,通过ADC或其他方式采集声音信号。采集到的声音信号经过开发板内置的Fx-LIIS主动降噪算法处理,生成反向声波信号,并通过DAC输出至扬声器进行播放。通过反向声波与原声波叠加,达到…

web前端3D旋转相册(附完整代码)

效果图 当鼠标移动到目标时&#xff0c;外层的图片会张开&#xff0c;外面的图片修改透明度为0.5达到想要的效果。 完整代码 HTML部分 这里用的是绝对路径&#xff0c;一般建议使用相对路径&#xff08;..代表上一级&#xff0c;.代表当前文件夹&#xff09; <!DOCTYPE …

新老项目不同node版本,使用nvm控制node版本切换(mac、window)

window系统电脑的链接&#xff1a;https://blog.csdn.net/qq_40269801/article/details/136450961 以下是mac版本的操作方式&#xff1a; 1、打开终端 克隆 NVM 仓库&#xff1a; git clone https://github.com/nvm-sh/nvm.git ~/.nvm 2、运行安装脚本&#xff1a; cd ~/.n…

2024双11买什么东西比较好?2024年双十一必买清单大全!

2024年双十一到底哪些东西值得入手&#xff1f;今天总结了超全双十一值得入手的单品汇总&#xff01;随着一年一度的双十一购物狂欢节临近&#xff0c;各大电商平台纷纷推出各种促销活动&#xff0c;吸引了无数消费者的关注。在这场全民参与的购物盛宴中&#xff0c;如何在众多…

vi —— 终端中的编辑器

目标 vi 简介打开和新建文件三种工作模式常用命令分屏命令常用命令速查图 01. vi 简介 1.1 学习 vi 的目的 在工作中&#xff0c;要对 服务器 上的文件进行 简单 的修改&#xff0c;可以使用 ssh 远程登录到服务器上&#xff0c;并且使用 vi 进行快速的编辑即可常见需要修改…

安装fpm,解决*.deb=> *.rpm

要从生成 .deb 包转换为 .rpm 包&#xff0c;可以按照以下步骤修改打包脚本 1. 使用 fpm 工具 fpm 是一个强大的跨平台打包工具&#xff0c;可以将 .deb 包重新打包成 .rpm&#xff0c;也可以直接从源文件打包成 .rpm。 安装 fpm sudo apt-get install ruby-dev sudo gem in…

web文件包含include

php伪协议 在 PHP 中&#xff0c;伪协议&#xff08;Pseudo Protocols&#xff09; 也被称为 流包装器&#xff0c;这些伪协议以 php:// 开头&#xff0c;后面跟着一些参数&#xff0c;用于指定 要执行的操作 或 需要访问的资源。 伪协议表明这些协议并不是一个 真实的外部协议…

QChart中柱形图的简单使用并实现【Qt】

预备工作 如果qt没下载去下载一个&#xff0c;下载太慢了可以试试它[点击跳转]  (https://blog.csdn.net/qq_19319481/article/details/131655379)。   如果已经下载了qt发现自己的组件中没有QCharts&#xff0c;可以去试试它点击跳转。 都搞定了以后在pro文件里面添加QT …