跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

JavaWeb 基础:动静态 Web、URL 与 HTTP 协议

Web 服务的基础知识,对比了静态 Web 与动态 Web 的实现流程及区别。详细介绍了 URL 统一资源定位符的结构,包括协议、主机、端口、路径、参数和锚点,并解释了百分号编码的作用与规则。同时阐述了 HTTP 超文本传输协议的请求与响应机制,涉及无状态特性、Cookie 与 Session 的应用,以及请求头和响应头的常用字段含义。

奶糖兔发布于 2026/4/6更新于 2026/10/23108 浏览

Web

Web 是在互联网上,用浏览器访问的一种信息服务。可以简单理解成,打开一个网络链接,展示的一个个网页,就是 Web。

Web 有动态 Web 和静态 Web:

  • 静态 Web:是指开发者提前写好 Web 网页(HTML),所有人看到的网页内容都是一样的 Web。早期的 Web 是静态 Web,是使用 HTML 将网页内容写好放在服务器中,所有人访问网页,都是看到这个 HTML 的内容。静态 Web 的特点是所有人看到相同的内容,网页内容、数据都是写在 HTML 里,不与数据库交互。静态 Web 的业务流程大致如下:
    • Web 开发者编写好 HTML,保存到服务器某目录。
    • 用户从浏览器打开网页,比如 www.xxxx.com/index.html。
    • 服务器接受到请求,从文件目录中找到这个 index.html 文件,发送给用户。
    • 用户浏览器接收到 HTML,渲染成网页展示给用户。
  • 动态 Web:是指开发者并非提前写好 Web 网页,而是在用户访问时,动态生成网页 HTML 内容,每个人看到的网页内容都是不一样的 Web。现代 Web 几乎都是动态 Web,每个人看到的 Web 内容都可能不一样,比如有自己的用户昵称和头像,每个人看到的商品内容都不同。动态 Web 一般会与数据库交互,在生成网页 HTML 时,从数据库获取数据,动态拼接生成 HTML 内容。动态 Web 的业务流程大致如下:
    • Web 开发者无需预先编写好 HTML,而是编写生成 HTML 的模版程序。
    • 用户从浏览器打开网页,比如 www.xxx.com/index.php?user=qiangzi。
    • 服务器接受到请求,从数据库查询 user=qiangzi 的头像、昵称等信息,返回给后端程序。
    • 后端程序结合数据库数据,动态拼接生成 HTML,发送给用户。
    • 用户浏览器接收到 HTML,渲染成网页展示给用户。

上述动态 Web 的业务流程,为后端程序的动态 Web。实际上,还有一种前端程序实现的动态 Web:服务器接受到请求,只需要发送给用户一个空 body 的 HTML。浏览器接收到这个 HTML,会拉取 JS 代码,而 JS 代码会从 API 里获取数据库数据。最后,浏览器会执行 JS 代码,将数据处理,动态生成 HTML,渲染并展示给用户。

URL

URL 全称 Uniform Resource Locator 统一资源定位符,是指在互联网上的任意资源,比如一个网页(HTML)、一张图片、一个视频,都可以有一个全网唯一的定位符,这个就是 URL。即使是我们自己目前电脑上的任意一个文件,只要我们开放外网 IP,打开防火墙,使用一个 web 服务器,就可以用 URL 访问到。

HTTP URL

我们最常见的 URL 是 HTTP 或 HTTPS 协议的网络链接,比如:https://www.baidu.com:443/source/index.html?id=123&name=user#md。这个 URL 包含这几部分:

  1. https://:这是协议,代表 URL 采用的是 HTTPS 协议。
  2. www.baidu.com:这是域名/主机 IP,代表互联网上的某台计算机。
  3. 443:这是端口号,代表这台计算机的网络端口号。端口号可以不写,如果是 HTTPS 协议,默认是用 443 端口号。如果是 HTTP 协议,默认是 80 端口号。端口号或主机 IP 与域名之间,用冒号 : 分隔。
  4. /source/index.html:这是路径,代表要获取计算机上这个路径的文件。在静态 web 时代,这个路径一般代表计算机上的真实存在的路径文件,而动态 web 时代,可能这个路径并不对应服务器计算机硬盘上的真实文件,而是由服务器端程序根据路由规则动态生成内容返回给客户端。因此,现代看到的很多网页,都不是以 .html 结尾的路径,而是类似 /home/user 这种非文件后缀结尾的路径。
  5. id=123&name=user:这是参数,由键值对组成,多个键值对之间用 & 隔开。路径和参数之间,用问号 ? 分隔。参数用于向服务器传递参数,以便动态生成对应的资源。参数又被称为查询字符串,随请求发送给服务器,有长度限制。
  6. #md:这是定位符,一般用于 HTML 标记锚点的元素 ID,与 CSS ID 选择器相同。定位符不会发送给服务器,仅在浏览器本地用于定位页面的元素。

其他 URL 协议

除了 HTTP 和 HTTPS 协议的 URL,还有其他协议的 URL,常见的比如:

  1. file:// 协议,用于访问计算机本地文件,格式通常是:file:///Users/zhongziqiang/Downloads/工作业绩总结.pdf,即协议 file://、路径 /Users/zhongziqiang/Downloads/工作业绩总结.pdf。
  2. ftp:// 协议,即文件传输协议,用于在客户端和服务器之间传输文件。格式通常为 ftp://ftp.example.com/software/readme.txt。在浏览器地址栏输入 ftp 协议的 URL 时,需要注意,下拉选择通过 ftp 原始的方式打开,否则很容易被浏览器当做搜索的关键词打开搜索界面。
  3. ftps://或者sftp:// 协议,是 FTP 的加密版本,更安全。与 FTP 关系就像 HTTP 与 HTTPS 一样。
  4. rtmp:// 协议,是实时流协议,用于流媒体传输,用于看在线直播或者播放流媒体视频时,可能会用到的协议。
  5. mailto: 协议、tel: 协议、sms 协议、facetime 协议等,用于打开计算机的邮件、电话、短信或者 facetime 应用。注意这些协议没有双斜杠 //。
  6. weixin:// 协议、whatapp:// 协议…:用于打开相关 APP 应用,称为 URL Scheme,用于在应用之间进行跳转

URL 中的百分比编码

需要注意,URL 编码只允许使用 ASCII 码字符集中的字母、数字和部分字符,如果路径或者参数中包含非 ASCII 字符如中文、空格或者其他特殊字符,比如保留字符(/用来分隔路径、?用来分隔路径与查询参数等),需要进行百分号编码。在浏览器 URL 输入框输入 URL,会自动进行百分号编码进行请求,但是为了方便用户查看,渲染时可能还是会展示原来的字符。

百分比编码是将非 ASCII 码字符、特殊字符转换成几个安全的,只由 ASCII 字符组成的格式,以便在网络中安全传输。

百分比编码规则:一个待转换字符(非 ASCII 码字符、特殊字符)被替换成一个或多个百分号 %后面跟两个十六进制数字,这两个十六进制数字表示该字符在 ASCII 编码中的数值。

  • 对于 ASCII 码字符:直接转换其为 ASCII 码中的数值。比如空格,在 ASCII 码中码点为 32,对应十六进制为 20,则转换为 %20。例如,一个 URL 为 https://www.baidu.com/?id=%20ab,代表 https://www.baidu.com/?id= ab。
  • 对于非 ASCII 码字符:会将该字符按照某种编码集(一般是 UTF-8)转换为字节,然后将每个字节按照上述规则进行百分比编码。比如字符'我'在 UTF-8 字符编码中使用 3 个字节存储,其十六进制表示为:E6 88 91,转换为 %E6%88%91。例如,在浏览器输入 https://www.baidu.com/?id=我 时,浏览器会请求 URL 为 https://www.baidu.com/?id=%E6%88%91

总结:百分号编码的本质是一种'转义'机制。它把有特殊含义或无法直接传输的字符,用 %加上两个十六进制数字代替,从而保证 URL 的语法正确性和数据的完整性。在浏览器地址栏看到的那些 %E5%BC%A0之类的乱码,其实就是经过编码的中文或特殊符号。

HTTP

HTTP 全称 Hypertext Transfer Protocol,即超文本传输协议。'超文本'是指 HTTP 最初发明是用来传输 HTML 文档的,而 HTML 即为超文本标记语言。'传输协议'是指 HTTP 本身是一个应用层的传输协议,即一个标准。

HTTP 最初发明是为了做 HTML 传输,但是发展至今,已经成为了互联网最流行的传输协议,不仅可以传输 HTML 等文档、文件,还被用来作为 API 应用程序接口。

请求与响应

HTTP 采用客户端 - 服务器模式,每次客户端发送请求(request),服务器做一次响应(response)。

HTTP 的服务器是无状态的,即每次请求,服务器并不会记录客户端的信息,服务器处理完一个客户端请求后,同一个客户端再次请求,在服务器看来,就跟从来没有响应过请求一样。但是,随着技术的发展,cookie 和 session 技术,可以让服务器'有记忆'。具体来说,服务器响应请求时,会在服务器内存里生成一个记录 session,并给这个客户端赋予 cookie,浏览器会存储 cookie,在下次请求时,连同 cookie 带上去。服务器可以通过 cookie,识别到这个是上次某个请求的客户端。

请求头

HTTP 请求头包含请求行和 Header,请求行固定格式为:请求方法 请求路径和参数 HTTP 版本,比如:GET /all?keyword=%E4%BB%80%E4%B9%88%E6%98%AFURL%EF%BC%9F&from_source=webtop_search&spm_id_from=333.1007&search_source=3 HTTP/1.1

  • 请求方法:最常见的请求方法为 GET 和 POST,还有其他请求方法如 PUT、DELETE、PATCH、HEAD、OPTIONS 方法。
  • 请求路径和参数:是 URL 中的路径和参数。
  • HTTP 版本:固定为 HTTP/ 加版本号。

HTTP 请求头中的 Header 是键值对,只有 Host 要求必须传递,而其他 Header 如 User-Agent、Accept、Connection 等非必须传递的 Header。此外,Header 可灵活扩展,只要客户端和服务器约定的参数,都可以通过 Header 进行传递。常见的 HTTP 请求头如下:

  • Host:是 URL 中的域名或者 IP,及端口号,在 HTTP/1.1 是必须要传递的头部信息。比如 Host: www.example.com:8080。
  • Connection:是控制网络连接的选项。如 Connection: Keep-Alive 表示保持连接以便后续请求复用,Connection: Close 表示完成后关闭连接。
  • Accept-Language:表示希望获得的资源内容的语言,比如 zh-CN(代表中国大陆的简体中文)、zh-TW(代表台湾地区的繁体中文),一般用于支持国际化的 Web 服务。
  • Accept:告知服务器客户端能够处理的内容类型(MIME 类型,由 主类型/子类型 组成),服务器可根据此返回合适的格式。比如 text/html 表示 HTML 文档,application/json 表示 JSON 数据、image/jpeg 表示 JPEG 图片、audio/mpeg 表示 MP3 音频。
  • Content-Type:告知服务器客户端发送请求的请求体 body 的内容类型(MIME 类型),在 POST、PUT 等携带请求体的方法中必须使用。
  • User-Agent:表示发起请求的客户端软件、操作系统、版本的信息,服务器可根据此优化响应,比如更具不同的浏览器返回不同的页面。例如 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36。

请求头是使用 ASCII 码的字符,这也是为什么 HTTP 协议的 URL 如果含有非 ASCII 码的字符需要被百分比编码转义的原因之一。

请求头后是请求体,在 POST、PUT 等携带请求体的方法时,需要带请求体。

由此可见,HTTP 请求,可以有很多方式向服务器传递参数,包括 Query 参数、Header 请求头、Body 请求体。

  • Query 参数:是指 HTTP URL 中的路径?后的键值对,比如 URL https://search.bilibili.com/all?vt=15612243&keyword=%E4%BB%80%E4%B9%88%E6%98%AFURL%EF%BC%9F&from_source=webtop_search&spm_id_from=333.1007&search_source=3 中,Query 查询参数有 vt、keyword、from_source、spm_id_from、search_source 等 5 个参数。
  • Header 请求头:服务器和客户端可以约定自定义 Header 请求头参数。
  • Body 请求体:Body 请求体中可以传输任意 MIME 类型的文件,在 POST、PUT 等携带请求体的方法中使用。

响应头

HTTP 响应头包含响应行(状态行)和 Header,响应行固定格式为:HTTP 版本 状态码 原因短语,比如:HTTP/1.1 200 OK

  • HTTP 版本:固定为 HTTP/ 加版本号,表示服务器使用的 HTTP 协议版本。
  • 状态码:三位数字,表示请求的处理结果。比如 200 代表成功,5XX 代表服务器问题。
  • 原因短语:代表对状态码的简单文本描述,是与状态码一一对应的文本,比如 200 时为 0K。

HTTP 响应头中的 Header 是键值对,与请求头 Header 相似,响应头帮助客户端(如浏览器)正确解析、缓存、安全处理服务器返回的资源。常见的 HTTP 响应头如下:

  • Date:服务器响应生成的日期时间,是必须要传递的头部信息。
  • Content-Type:指定响应体的媒体类型(如 text/html; charset=utf-8)。
  • Content-Length:响应体的大小(字节数)。
  • Location:在重定向响应(3xx)中指定新的资源地址。

目录

  1. Web
  2. URL
  3. HTTP URL
  4. 其他 URL 协议
  5. URL 中的百分比编码
  6. HTTP
  7. 请求与响应
  8. 请求头
  9. 响应头

更多推荐文章

查看全部
  • Stable Diffusion WebUI 本地部署指南:CUDA 与 PyTorch 环境配置
  • Neo4j Desktop 2 安装与基础使用
  • FPGA 实现 OV5640 摄像头视频图像显示
  • GitHub Copilot Agent 模式实战经验与配置建议
  • Stable Diffusion AI 绘画环境搭建与使用指南
  • ComfyUI-Manager 实战指南:插件与模型的高效管理
  • AI 绘画在商业设计中的应用与版权探讨
  • AI 网络技术编程测试:从理论到实践
  • Linux 基础指令详解
  • 基于 Python 与 Spotlight 的拼车司机推荐系统设计
  • 时序数据库 Apache IoTDB 基于 Kubernetes 的部署运维指南
  • Windows NVM 使用指南:多版本 Node.js 管理
  • AirSim 无人机仿真入门:实现无人机的起飞与降落
  • Python 实现 SLAM+AI Agent 机器人自主导航最小原型
  • Linux 命名管道(FIFO)跨进程通信:原理与实战
  • 字符串算法基础:暴力搜索、KMP 与编辑距离
  • OpenClaw是什么:一文看懂AI智能体的能力与风险
  • TCP 协议详解:报文格式、三次握手、滑动窗口与拥塞控制
  • SQL Copilot 搭建实战:利用 AI 助手提升 SQL 编写效率
  • 汽车雷达多径场景下的幽灵目标检测技术解析

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online