【Java】URL(Uniform Resource Locator)

URL

URL 的通用结构

URL 是协议驱动的资源定位符。URL 的标准格式如下:

text 复制代码
<协议>://<主机>:<端口>/<路径>?<查询字符串>

示例
解析
作用
特性
格式
URL 通用结构
协议

Scheme
主机

域名/IP
端口

Port
路径

Path
查询字符串

Query String
https / jdbc:mysql / ftp
通过 DNS 与 IP 互相转换
区分同一主机上的不同程序
带有层次结构,精准定位资源
键值对格式:key1=val1&key2=val2

数据库连接中的 URL

很多后端开发者第一次意识到 URL 的普适性,是通过 JDBC 的连接字符串:

text 复制代码
jdbc:mysql://127.0.0.1:3306/javacode?characterEncoding=utf8&useSSL=false

这个字符串完美契合了 URL 的通用结构:

组成部分 解析值 技术含义
协议 jdbc:mysql 告诉程序使用 JDBC 桥接驱动,并指明子协议是 MySQL
主机 127.0.0.1 数据库所在服务器地址(本机回环地址)
端口 3306 MySQL 服务的默认监听端口
路径 /javacode 定位到名为 javacode 的数据库实例
查询字符串 characterEncoding=utf8&useSSL=false 附带连接参数:强制 UTF-8 编码,并禁用 SSL 连接

搜索引擎的复杂查询

以在 Google 搜索 java 时生成的 URL 为例:

text 复制代码
https://www.google.com/search?q=java&sca_esv=31f75f21cab977db&hl=zh_CN&sxsrf=...&source=hp&ei=...
组成部分 解析值 技术含义
协议 https 采用 SSL/TLS 加密的 HTTP 协议,保证数据传输安全
主机 www.google.com Google 搜索服务的域名,通过 DNS 解析为真实 IP 地址
端口 未显式显示(默认 443 HTTPS 的标准端口,浏览器会自动补全并连接该端口
路径 /search 指向 Google 服务器上处理搜索请求的入口点(类似 Servlet/Controller 的映射路径)
查询字符串 q=java&sca_esv=...&hl=zh_CN&... 键值对集合,包含用户搜索词(q=java)、界面语言(hl=zh_CN)、会话追踪 ID 等十余个参数,各参数之间用 & 分隔

补充说明hl=zh_CN 这个参数告诉 Google 服务器,用户偏好中文(中国大陆)界面的搜索结果,这是通过查询字符串灵活控制资源表现的典型例子。

URL 编码

为什么需要编码?

URL 中允许使用的字符是有限的(如字母、数字、-_.~ 等)。如果参数值里包含了保留字符(如 : / ? & = 等)或非 ASCII 字符(如中文),就必须进行转换,否则会破坏 URL 的结构。这就产生了 URL 编码,也叫百分号编码。规则是:

  • 对于非 ASCII 字符(如汉字),先用 UTF-8 编码得到字节序列,再把每个字节转为 % 加上两位十六进制数。
  • 对于 ASCII 中的保留字符,同样用 % 加十六进制替代。

服务器对 URL 的处理全流程:
服务端处理


用户在浏览器输入

或用程序构建URL
包含特殊字符

或非ASCII字符?
进行URL编码

采用UTF-8字符集为主
直接发送请求
服务器接收请求
按 & 分割查询字符串
对 key=value 部分

进行 URL 解码
得到原始参数

传递到业务逻辑

整个流转过程,编码与解码必须匹配。常见的问题是双端编解码不一致(如客户端用 GBK 对中文编码,服务器用 UTF-8 解码),导致中文乱码

编码规则对照表

字符 用途 URL 中直接出现? 编码结果
q 普通字母 ✅ 可以 q
& 分隔多个参数 ❌ 会被误解析 %26
= 分隔键和值 ❌ 会被误解析 %3D
空格 空格 ❌ 可能中断链接 %20+
中文 ❌ 非 ASCII %E4%B8%AD
/ 路径分隔符 ❌ 在查询值中需转义 %2F

查询字符串关键参数

参数 含义
q java 核心查询词 。所有复杂参数中,只有 q 是你的搜索意图。
hl zh_CN 界面语言偏好,这里是简体中文。
source hp 流量来源标识,hp 代表首页。Google 用它统计用户行为。
oq java 在搜索框中输入的原始关键词。
sclient gws-wiz 内部客户端类型标识。

其余参数(sca_esv, ei, ved 等)主要用于安全校验、会话跟踪、广告归因等技术目的,普通用户无需关注。

URL 解析过程

一次完整的 URL 解析,其实就是:

  1. 确认使用什么协议找到资源的传送方式。
  2. 通过 DNS 将域名解析成 IP,找到网络中唯一的主机。
  3. 通过端口号,在这台主机上锁定具体服务程序。
  4. 通过路径,让服务程序知道你要访问哪类资源。
  5. 通过查询字符串,告诉服务程序关于这个资源的具体要求。
  6. 在这个过程中,整个 URL 只能使用 ASCII 和安全字符,其余字符必须通过百分号编码"伪装"成符合规范的形式。
相关推荐
右耳朵猫AI3 分钟前
JavaScript技术周刊 2026年第20周
开发语言·javascript·ecmascript
摇滚侠19 分钟前
浏览器调试工具 检查元素 谷歌模拟器 控制台 断点调试
java·html
心之伊始33 分钟前
Spring Boot 接入 MCP 实战:用 Spring AI 调用本地工具的最小闭环
java·spring boot·agent·spring ai·mcp
basketball61635 分钟前
Go 语言从入门到进阶:5. 玩转Go函数
开发语言·后端·golang
Refrain_zc39 分钟前
无触摸屏场景下的蓝牙交互:Android 纯按键蓝牙扫描配对与 A2DP/Headset 连接
java·蓝牙
多彩电脑40 分钟前
Kivy如何自定义事件
开发语言·python
java_cj40 分钟前
LangChain初入门 - 简化LLM开发难度的利器
开发语言·python·langchain
计算机安禾42 分钟前
【算法设计与分析】第29篇:启发式与元启发式搜索方法综述
java·数据库·算法
DIY源码阁43 分钟前
JavaSwing学生选课系统 - MySQL版
java·数据库·mysql·eclipse