HTTP由浅入深

文章目录

      • 概述
        • 特点
        • URL
      • HTTP 与 HTTPS
        • 概述
        • HTTP 工作原理
        • HTTPS 的作用
        • 区别总结
      • 请求报文
        • 请求行
        • 常见请求方法
        • 请求头
        • 请求体
          • Content-Type 详解
          • 常见场景 Content-Type 对应关系
      • 响应报文
        • 响应行
          • 状态码详解
            • 1xx:信息响应(Informational)
            • 2xx:成功(Success)
            • 3xx:重定向(Redirection)
            • 4xx:客户端错误(Client Error)
            • 5xx:服务器错误(Server Error)
        • 响应头
            • 常见响应头字段
        • 响应体
      • 参考文章

概述

超文本传输协议(HTTP, Hypertext Transfer Protocol) 是一种用于传输超媒体文档(例如 HTML)的应用层协议。它最初被设计用于 Web 浏览器与 Web 服务器之间的通信,但也广泛应用于其他客户端与服务器的交互。

HTTP 遵循经典的[客户端-服务器(Client-Server)模型:客户端发起请求,服务器处理并返回响应。HTTP 是一种无状态协议,即服务器在两个请求之间不保留任何状态信息。

特点
  1. 简单快速:客户端向服务器请求服务时,仅需发送请求方法和路径。常用的方法有 GET、HEAD、POST 等。由于协议本身结构简单,HTTP 服务器实现轻量,通信速度较快。
  2. 灵活:HTTP 允许传输任意类型的数据,通过 Content-Type 头来标识传输的数据类型。
  3. 无连接:HTTP 的无连接性指每次请求完成后,客户端与服务器的连接就会断开。这种方式有助于节省服务器资源,提升处理效率。
  4. 无状态:HTTP 协议本身不记录请求之间的状态信息。如果需要在多个请求之间保留用户状态,通常通过 Cookie、Session、Token 等机制实现。无状态的好处是服务器响应更快,但也带来了开发上的额外工作。
  5. 支持 B/S 和 C/S 模式:HTTP 既可用于浏览器/服务器(Browser/Server)架构,也适用于客户端/服务器(Client/Server)通信,因而应用广泛。
URL

HTTP 使用统一资源标识符(URI, Uniform Resource Identifier)来标识和定位资源。**URL(Uniform Resource Locator,统一资源定位符)**是 URI 的一种形式,包含了访问某个资源所需的完整信息。

下面通过一个新的 URL 示例来说明其组成部分:

https://example.com:8443/docs/tutorial/index.html?user=alice&lang=zh#section2

这个 URL 可以分为以下几个部分:

  1. 协议(Scheme)https
    指明使用的协议是 HTTPS,即 HTTP 的加密版本,保障数据的安全性。
  2. 域名(Host)example.com
    表示服务器的地址,既可以是域名也可以是 IP 地址。
  3. 端口(Port):8443
    指定服务器监听的端口号。若省略此部分,将使用协议的默认端口(HTTPS 默认为 443)。
  4. 路径(Path)/docs/tutorial/
    表示服务器上资源的目录结构,也称为虚拟目录。
  5. 文件名(File)index.html
    表示请求的具体资源文件,若省略则通常由服务器返回默认首页文件。
  6. 查询参数(Query)?user=alice&lang=zh
    用于向服务器传递额外信息。多个参数通过 & 分隔,键值对之间用 = 连接。
  7. 锚点(Fragment)#section2
    表示页面中的某个位置(例如跳转到 HTML 的某个 id),不会参与服务器通信,仅由前端解析处理。

HTTP 与 HTTPS

概述

HTTP(Hypertext Transfer Protocol,超文本传输协议)
用于从 Web 服务器传输超文本(如 HTML 文件、图片、视频等)到客户端浏览器,是一种基于 TCP/IP 的请求-响应协议,默认端口为 80

HTTPS(Hypertext Transfer Protocol Secure,超文本传输安全协议)
是 HTTP 的安全版本,在 HTTP 的基础上增加了 SSL/TLS 加密机制,提供数据加密、完整性校验和身份验证,默认端口为 443

HTTP 工作原理

HTTP 使用“客户端 - 服务器”模型工作:

  1. 客户端发起请求:浏览器等客户端向服务器发起 HTTP 请求;
  2. 服务器处理请求:服务器解析请求、读取资源或处理业务逻辑;
  3. 服务器返回响应:返回 HTML 页面、图片、JSON 数据等内容;
  4. 客户端渲染页面:浏览器接收响应并渲染出完整页面。

常见的 Web 服务器有:ApacheNginxIIS(Internet Information Services) 等。

HTTP 的三个特性:

  • 无连接:每次请求/响应后即断开连接;
  • 无状态:服务器不保存任何关于客户端的会话状态;
  • 媒体独立:只要客户端和服务器能识别 MIME 类型,任何格式的数据都可通过 HTTP 传输。
HTTPS 的作用

HTTPS 通过 SSL/TLS 协议 提供如下安全保障:

  • 加密传输:防止数据被第三方窃听;
  • 数据完整性:防止传输过程中的数据被篡改;
  • 身份验证:确保数据是从真实的服务器发出的。

HTTPS 的信任依赖于操作系统中预装的 CA(证书颁发机构)

  • 浏览器需要信任 CA;
  • 服务器必须使用有效的证书;
  • 证书必须匹配访问的域名;
  • 协议加密过程必须完整并有效。
区别总结
对比维度HTTPHTTPS
是否加密明文传输SSL/TLS 加密传输
端口号80443
安全性不安全,易被监听或篡改安全,具备加密、认证与完整性校验功能
证书要求无需证书需部署 SSL 证书
性能较快,无加密开销稍慢,有加解密过程
SEO 影响可能被降权更受搜索引擎优待
浏览器提示显示“不安全”显示“安全锁”
成本免费需购买或申请 SSL 证书
适用场景非敏感信息传输场景(如新闻博客)涉及隐私或敏感信息(如电商、登录等)

请求报文

HTTP 请求报文由三部分组成:

  1. 请求行(Request Line)

  2. 请求头(Request Header)

  3. 请求体(Request Body,可选)

    请求报文示例

GET / HTTP/1.1                 # 请求方法为GET,请求首页(/),使用HTTP/1.1协议
Host: baidu.com               # 指定目标主机(域名)
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/124.0.6367.60# 浏览器类型和操作系统信息
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8# 客户端可接收的内容类型
Accept-Encoding: gzip, deflate, br# 支持的内容压缩编码方式(节省带宽)
Accept-Language: zh-CN,zh;q=0.9# 客户端可接受的语言
Connection: keep-alive        # 表示使用长连接,保持 TCP 连接不断开
Cookie: BIDUPSID=...; BAIDUID=...; ...# 携带的 Cookie,用于身份识别、会话保持等
请求行

格式如下:

请求方法 请求资源路径 协议版本

示例:

POST /chapter17/user.html HTTP/1.1

常见请求方法
方法说明
GET请求数据附在 URL 中;不安全,有长度限制;无请求体
POST数据放在请求体中;适用于表单提交、上传等场景
HEAD只请求响应头,不返回实体内容
PUT用于更新或上传资源
DELETE请求服务器删除资源
OPTIONS返回服务器支持的请求方法
TRACE回显服务器收到的请求(用于测试和诊断)
CONNECT用于建立网络隧道(主要用于 HTTPS)
请求头

请求头用于描述客户端环境和请求内容,常见字段如下:

Header 字段说明
Host请求主机名
User-Agent客户端软件信息
Accept可接受的内容类型
Content-Type请求体数据类型
Content-Length请求体的字节长度
Cookie客户端存储的 cookie 数据
Referer发起请求的源页面地址
请求体

请求体通常包含实际发送的数据,仅 POST、PUT 等方法使用。GET 方法没有请求体。

Content-Type 详解

Content-Type 指定了请求体中数据的类型。以下是常见类型说明:

Content-Type说明
text/plain纯文本格式
text/htmlHTML 格式
text/cssCSS 格式
text/javascriptJavaScript 格式
image/gifGIF 图片
image/jpegJPEG 图片
image/pngPNG 图片
application/x-www-form-urlencoded表单默认格式,key=value&key2=value2
application/jsonJSON 格式,常用于 API 请求
multipart/form-data用于表单上传文件
text/xml以 XML 格式提交数据
application/octet-stream任意二进制数据流,如文件下载/上传
常见场景 Content-Type 对应关系
场景请求方法Content-Type
普通表单提交POSTapplication/x-www-form-urlencoded
上传文件POSTmultipart/form-data
提交 JSON 数据POSTapplication/json
REST 接口 PUT 请求PUTapplication/json 或其他格式
下载文件GETapplication/octet-stream

响应报文

HTTP 响应报文由三部分组成:

  1. 响应行(Status Line)
  2. 响应头(Response Header)
  3. 响应体(Response Body)

响应报文示例

HTTP/2 200 OK                    # 响应协议版本为HTTP/2,状态码200表示请求成功
Server: JSP3/2.0.14              # 服务器软件及版本信息
Date: Fri, 16 May 2025 07:59:09 GMT  # 响应生成时间(GMT格式)
Content-Type: text/javascript; charset=utf-8# 响应内容的类型为JavaScript,字符编码为utf-8
Expires: Mon, 16 Sep 2024 07:12:27 GMT# 资源过期时间(一般用于缓存)
Last-Modified: Thu, 12 Sep 2024 08:43:04 GMT# 资源最后修改时间
Etag: "63487d8c50e44137f8b6ce2a04407f8f"# 资源的唯一标识(方便缓存和验证)
Cache-Control: max-age=31536000# 缓存控制,表示资源最大缓存时间为31536000秒(1年)
Age: 621073                     # 资源在缓存中已经存在的秒数
Accept-Ranges: bytes            # 支持客户端的范围请求(断点续传)
Content-Md5: Y0h9jFDkQTf4ts4qBEB/jw==# 响应内容的MD5校验值(完整性校验)
X-Cache-Status: HIT             # 缓存命中,表示资源来自缓存
Timing-Allow-Origin: *          # 允许任何源访问资源加载时间数据(用于性能分析)
Access-Control-Allow-Origin: * # 允许跨域访问,任何域都可以访问此资源
// 以下是响应体示例(JavaScript代码)
define("@baidu/aging-tools-pc/dist/index",["san","tslib"],function(n,t){function e(n){if(o[n])return o[n].exports;var t=o[n]={i:n,l:!1,exports:{}};return i[n].call(t.exports,t,t.exports,e),t.l=!0,t.exports}// 省略后续代码
})
响应行

格式如下:

HTTP/协议版本 状态码 状态描述

示例:

HTTP/1.1 200 OK

状态码详解

HTTP 状态码由 3 位数字组成,第一个数字表示响应的类别:

1xx:信息响应(Informational)
  • 100 Continue:继续请求
  • 101 Switching Protocols:切换协议
2xx:成功(Success)
  • 200 OK:请求成功
  • 204 No Content:请求成功但无响应体,常用于无需页面刷新的请求
  • 206 Partial Content:部分内容响应,用于支持范围请求(Content-Range)
3xx:重定向(Redirection)
  • 301 Moved Permanently:永久重定向
  • 302 Found:临时重定向
  • 303 See Other:重定向到另一个地址,要求使用 GET 请求
  • 307 Temporary Redirect:临时重定向,不会更改请求方法(如 POST 不变)
  • 304 Not Modified:资源未修改,使用缓存(与条件请求有关)
4xx:客户端错误(Client Error)
  • 400 Bad Request:语法错误,服务器无法理解
  • 401 Unauthorized:未授权,需要身份验证(需带 WWW-Authenticate 响应头)
  • 403 Forbidden:服务器拒绝请求
  • 404 Not Found:请求资源不存在
  • 415 Unsupported Media Type:请求类型不支持
5xx:服务器错误(Server Error)
  • 500 Internal Server Error:服务器内部错误
  • 503 Service Unavailable:服务器暂时无法处理请求
响应头

响应头是由服务器返回的键值对,用于说明响应信息及控制客户端行为。

常见响应头字段
字段名描述
Location重定向地址,需与 3xx 状态码搭配使用
Content-Type响应体的数据类型,如 text/html;charset=UTF-8
Content-Disposition文件下载方式,如 attachment;filename=xx.zip
Set-Cookie设置客户端 Cookie
Content-Encoding响应体的压缩方式,如 gzip
Content-Length响应体的字节长度
Refresh定时刷新页面,如 3;url=http://example.com
Server服务器信息,如 Apache-Coyote/1.1(可配置)
Last-Modified响应资源的最后修改时间
Cache-Control缓存控制,如 privatepublicno-cachemax-age=秒数no-store
响应体

响应体是服务器真正发送给客户端的“正文”内容,通常为 HTML 页面、JSON 数据、图片或其他资源。

浏览器将响应体加载到内存后,进行解析、渲染并展示页面内容。

参考文章

  1. http中文文档(https://developer.mozilla.org/zh-CN/docs/Web/HTTP)
  2. HTTP/HTTPS 简介(https://www.runoob.com/http/http-intro.html)
  3. Http协议详解(深入理解)(https://blog.csdn.net/weixin_38087538/article/details/82838762)

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

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

相关文章

Redis淘汰策略

Redis有八种淘汰策略 noeviction :不进行淘汰,直接报错。allkeys-lru :随机淘汰最久未使用的键。volatile-lru :从设置了过期时间的键中,随机淘汰最久未使用的键。allkeys-random :随机淘汰某个键。volati…

Maven打包SpringBoot项目,因包含SpringBootTest单元测试和Java预览版特性导致打包失败

SpringBoot启用Java预览版特性&#xff08;无测试类&#xff09; 在pom.xml文件中加入以下配置表示启用Java预览版 <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration>…

Makefile快速入门

简介‌&#xff1a; ‌ Makefile‌ 是一种用于自动化构建和管理软件项目的工具文件&#xff0c;通常与 make 命令配合使用。它通过定义‌规则‌&#xff08;rules&#xff09;来指定如何从源文件生成目标文件&#xff08;如可执行程序或库&#xff09;&#xff0c;并自动…

RISC-V 开发板 MUSE Pi Pro OpenCV结合Gstreamer实时显示CSI摄像头

视频讲解&#xff1a;RISC-V 开发板 MUSE Pi Pro OpenCV结合Gstreamer实时显示CSI摄像头_哔哩哔哩_bilibili RISC-V 开发板 MUSE Pi Pro OpenCV结合Gstreamer实时显示CSI摄像头 安装opencv相关库 sudo apt install libopencv-dev python3 python3-opencv 测试使用的CSI摄像头…

如何用JAVA手写一个Tomcat

一、初步理解Tomcat Tomcat是什么&#xff1f; Tomcat 是一个开源的 轻量级 Java Web 应用服务器&#xff0c;核心功能是 运行 Servlet/JSP。 Tomcat的核心功能&#xff1f; Servlet 容器&#xff1a;负责加载、实例化、调用和销毁 Servlet。 HTTP 服务器&#xff1a;监听端口…

短剧系统开发与抖音生态融合:短视频时代的新风口与商业机遇

在短视频内容井喷的时代&#xff0c;“短剧”作为一种新兴内容形态&#xff0c;正以惊人的速度抢占用户注意力。抖音、快手等平台日均播放量破亿的短剧作品&#xff0c;不仅催生了新的内容创作风口&#xff0c;更推动了短剧系统开发的巨大市场需求。本文将深度解析短剧系统开发…

《云原生安全攻防》-- K8s日志审计:从攻击溯源到安全实时告警

当K8s集群遭受入侵时&#xff0c;安全管理员可以通过审计日志进行攻击溯源&#xff0c;通过分析攻击痕迹&#xff0c;我们可以找到攻击者的入侵行为&#xff0c;还原攻击者的攻击路径&#xff0c;以便修复安全问题。 在本节课程中&#xff0c;我们将介绍如何配置K8s审计日志&am…

3dczml时间动态图型场景

在cesium中我们了可以使用czml数据来生成可以随时间变化而变化的物体. 首先导入czml数据 设置时间范围 id: "point" //物体在什么时间范围可用 availability:"2012-08-04T16:00:00Z/2012-08-04T16:05:00Z"position:{ //设置物体的起始时间 epoch:"…

超小多模态视觉语言模型MiniMind-V 训练

简述 MiniMind-V 是一个超适合初学者的项目&#xff0c;让你用普通电脑就能训一个能看图说话的 AI。训练过程就像教小孩&#xff1a;先准备好图文材料&#xff08;数据集&#xff09;&#xff0c;教它基础知识&#xff08;预训练&#xff09;&#xff0c;再教具体技能&#xf…

01-jenkins学习之旅-window-下载-安装-安装后设置向导

1 jenkins简介 百度百科介绍&#xff1a;Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。 [1] Jenkins官网地址 翻译&…

VPLC (VPLCnext) K8S

前序 在接触Virtual PLCnext Control的时候&#xff0c;我想过好几次如何将它运行在k8s上&#xff0c;由于对k8s的熟悉程度不够&#xff0c;跌跌撞撞尝试了很久&#xff0c;终于把vPLC部署在单机版的k8s上了。&#xff08;此教程仅为demo阶段&#xff0c;此教程仅为demo阶段&a…

OPC Client第5讲(wxwidgets):初始界面的事件处理;按照配置文件初始化界面的内容

接上一讲&#xff0c;即实现下述界面的事件处理代码&#xff1b;并且按照配置文件初始化界面的内容&#xff08;三、&#xff09; 事件处理的基础知识&#xff0c;见下述链接五、 OPC Client第3讲&#xff08;wxwidgets&#xff09;&#xff1a;wxFormBuilder&#xff1b;基础…

从乳制品行业转型看智能化升级新机遇——兼谈R²AIN SUITE的赋能实践

一、市场现状&#xff1a;乳制品行业迎来智能化转型关键期 中国乳制品行业在经历高速增长与深度调整后&#xff0c;已进入以"安全、效率、创新"为核心的新发展阶段。根据施耐德电气白皮书数据显示&#xff0c;2019年乳制品合格率达99.8%[1]&#xff0c;液态奶占据77…

[20250522]目前市场上主流AI开发板及算法盒子的芯片配置、架构及支持的AI推理框架的详细梳理

目前市场上主流AI开发板及算法盒子的芯片配置、架构及支持的AI推理框架的详细梳理

【Golang笔记03】error、panic、fatal错误处理学习笔记

Golang笔记&#xff1a;错误处理学习笔记 一、进阶学习 1.1、错误&#xff08;异常处理&#xff09; Go语言中也有和Java中的异常处理相关的机制&#xff0c;不过&#xff0c;在Go里面不叫异常&#xff0c;而是叫做&#xff1a;错误。错误分为三类&#xff0c;分别是&#x…

Python可视化设计原则

在数据驱动的时代&#xff0c;可视化不仅是结果的呈现方式&#xff0c;更是数据故事的核心载体。Python凭借其丰富的生态库&#xff08;Matplotlib/Seaborn/Plotly等&#xff09;&#xff0c;已成为数据可视化领域的主力工具。但工具只是起点&#xff0c;真正让图表产生价值的&…

​​WPF入门与XAML基础:从零开始构建你的第一个WPF应用​

从零开始构建你的第一个WPF应用​ 1.什么是WPF&#xff1f;​​2.开发环境搭建​​2.1 安装Visual Studio​​2.2 创建第一个WPF项目​​ 3. WPF项目结构解析​​​​3.1 MainWindow.xaml​​3.2 MainWindow.xaml.cs​​ 4. XAML基础语法​​4.1 属性赋值方式​​4.2 命名空间&…

电子电气架构 --- 下一代汽车电子电气架构中的连接性

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…

学习日记-day13-5.22

完成目标&#xff1a; 知识点&#xff1a; 1.抽象注意事项 知识点 核心内容 重点 抽象类实例化限制 抽象类不能直接实例化对象&#xff0c;只能创建非抽象子类的对象 尝试实例化抽象类会触发编译错误 抽象方法与抽象类关系 抽象类不一定包含抽象方法&#xff0c;但含…

华硕无畏Pro14 2025,打造舒适办公新体验

在快节奏、高效率的现代办公环境中&#xff0c;一台得心应手的笔记本无疑是每位职场人士的“第二大脑”与核心生产力工具。它不仅需要承载日常工作的繁杂事务&#xff0c;更要在关键时刻稳定输出&#xff0c;助力我们从容应对各种挑战。 洞悉此需求&#xff0c;华硕推出了全新…