news 2026/5/14 15:57:54

应用层自定义URI介绍(自定义统一资源标识符,自定义scheme、自定义协议)资源定位格式、URI协议注册、注册表、xdg-open、dialect、Deep Link深度链接、OAuth回调

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
应用层自定义URI介绍(自定义统一资源标识符,自定义scheme、自定义协议)资源定位格式、URI协议注册、注册表、xdg-open、dialect、Deep Link深度链接、OAuth回调
特性URIURL
核心功能仅标识资源标识 + 定位资源(指定位置和访问方式)
是否包含位置❌ 不一定(如mailto:user@example.com无网络位置)✅ 一定包含(如http://example.com明确指向服务器)
范围更广(包含 URL 和 URN)是 URI 的子集

文章目录

  • 应用层自定义 URI 完全指南
  • 一、什么是 URI?
  • 二、什么是“应用层自定义 URI”?
  • 三、浏览器为什么能识别它们?
  • 四、URI Scheme 注册机制
    • Windows
    • macOS
    • Linux
  • 五、为什么浏览器打不开?
  • 六、数据库 URI 是怎么回事?
  • 七、URI 不一定代表“网络”
    • 本地文件
    • 邮件
    • 电话
    • App Deep Link
  • 八、应用层 URI 的核心价值
  • 九、现代应用中的典型场景
    • 1. Deep Link(深度链接)
    • 2. OAuth 回调
    • 3. IDE 协议
    • 4. 数据库连接
    • 5. 云服务 URI
  • 十、URI 与 URL 的区别
  • 十一、自定义 URI 的风险
    • 1. 任意启动应用
    • 2. 参数注入
    • 3. Deep Link 劫持
  • 十二、自定义 URI vs Universal Link
    • 自定义 URI
    • Universal Link
  • 十三、设计自定义 URI 的建议
    • Scheme 命名唯一
    • 参数结构清晰
    • 做参数校验
    • 不暴露敏感信息
  • 十四、总结

应用层自定义 URI 完全指南

在日常开发中,我们经常会看到这样的链接:

  • mailto:someone@example.com
  • tel:10086
  • weixin://
  • spotify://
  • vscode://
  • postgresql+asyncpg://user:pass@localhost/db

这些 URI(Uniform Resource Identifier,统一资源标识符)并不一定是传统 HTTP/HTTPS 链接,而是应用层自定义 URI

它们允许:

  • 浏览器启动本地应用
  • App 之间互相跳转
  • CLI / SDK 使用统一连接格式
  • 桌面应用注册协议
  • 移动端 Deep Link
  • 微服务/数据库 SDK 连接资源

很多人第一次看到:

postgresql+asyncpg://user:pass@localhost/db

都会疑惑:

为什么网络能识别这个 URL?

浏览器为什么打不开?

是谁定义这些协议的?

这篇文章会系统讲清楚。


一、什么是 URI?

URI 是:

用于唯一标识资源的一种字符串格式。

经典格式:

scheme://authority/path?query#fragment

例如:

https://example.com/api/users?id=1

其中:

部分含义
httpsscheme(协议)
example.com主机
/api/users路径
?id=1查询参数

二、什么是“应用层自定义 URI”?

所谓自定义 URI:

就是:

应用程序自己定义的 scheme。

例如:

weixin:// spotify:// vscode:// obsidian://

这些协议:

  • 不是浏览器内置网络协议
  • 不属于 TCP/IP 标准协议
  • 不一定能联网
  • 只是应用层定义的“资源定位格式”

本质上:

URI 不等于网络协议。

这一点非常关键。


三、浏览器为什么能识别它们?

因为:

操作系统支持 URI Scheme 注册机制。

例如:

mailto: tel: vscode: weixin:

应用安装时会向操作系统注册:

“当用户打开 vscode:// 时,请启动 VSCode”

于是:

vscode://file/path

会变成:

启动 VSCode → 把 URI 参数传给 VSCode → VSCode 自己解析

四、URI Scheme 注册机制

Windows

注册表:

HKEY_CLASSES_ROOT

应用会注册:

vscode weixin spotify

并绑定启动命令。

例如:

vscode://file/c:/demo/app.py

系统会执行:

Code.exe --open-url...

macOS

通过:

CFBundleURLTypes

注册。

例如:

<key>CFBundleURLSchemes</key><string>spotify</string>

Linux

通常通过:

xdg-open .desktop

进行协议绑定。


五、为什么浏览器打不开?

例如:

postgresql+asyncpg://user:pass@localhost/db

浏览器通常会:

ERR_UNKNOWN_URL_SCHEME

因为:

没有应用注册该 URI scheme。

浏览器只内置支持:

  • http
  • https
  • ftp(部分已废弃)
  • file
  • mailto
  • tel

而:

postgresql+asyncpg

只是:

Python 应用内部约定的 URI 格式。

并不是真正网络协议。


六、数据库 URI 是怎么回事?

来看:

postgresql+asyncpg://user:pass@localhost/db

这是典型 SQLAlchemy 风格 URI。

含义:

部分含义
postgresql数据库类型
asyncpgPython 驱动
user:pass用户名密码
localhost主机
db数据库名

这里:

postgresql+asyncpg

不是 IANA 注册协议。

只是:

SQLAlchemy 自己定义的解析规则。

例如:

create_async_engine("postgresql+asyncpg://...")

SQLAlchemy 内部会:

scheme="postgresql+asyncpg"

然后:

选择 PostgreSQL dialect 选择 asyncpg driver

注:
postgresql → Dialect(告诉 SQLAlchemy 用 PostgreSQL 的规则生成 SQL)
asyncpg → Driver(用 asyncpg 库实际连接 PostgreSQL 数据库)

整个过程:

  • 不经过浏览器
  • 不经过操作系统
  • 不经过网络协议栈

完全是:

Python 应用自己的字符串解析逻辑。


七、URI 不一定代表“网络”

很多人误以为:

xxx://

一定能联网。

其实不是。

例如:

本地文件

file:///tmp/demo.txt

只是本地文件。


邮件

mailto:test@example.com

只是打开邮件客户端。


电话

tel:10086

只是拨号。


App Deep Link

weixin://scanqrcode

只是启动微信。


八、应用层 URI 的核心价值

核心价值是:

用统一格式描述资源。

这样:

  • 应用之间容易集成
  • CLI/SDK 配置统一
  • 自动化工具容易解析
  • 系统可扩展

九、现代应用中的典型场景

1. Deep Link(深度链接)

移动端:

myapp://product/123

直接打开 App 某页面。


2. OAuth 回调

例如:

myapp://oauth/callback

浏览器登录后回跳 App。


3. IDE 协议

VSCode:

vscode://file/path

JetBrains:

jetbrains://

4. 数据库连接

mysql:// postgresql:// mongodb:// redis://

5. 云服务 URI

例如:

s3://bucket/file

注意:

s3://

也不是浏览器协议。

而是 AWS SDK 约定。


十、URI 与 URL 的区别

很多人混用 URI / URL。

实际上:

名称含义
URI标识资源
URL定位资源

可以理解:

URL ⊂ URI

例如:

https://example.com

既是 URI,也是 URL。

但:

mailto:test@example.com

是 URI。

不一定是 URL。


十一、自定义 URI 的风险

自定义 URI 很方便。

但也存在安全问题。


1. 任意启动应用

恶意网页可能:

<ahref="weixin://">

诱导启动应用。


2. 参数注入

例如:

myapp://open?file=...

若解析不安全:

可能导致:

  • 命令执行
  • 文件读取
  • 权限绕过

3. Deep Link 劫持

移动端多个 App 注册同一 scheme。

可能被恶意 App 抢占。

因此现代移动端越来越推荐:

  • Universal Link(iOS)
  • App Link(Android)

基于 HTTPS 域名验证。


十二、自定义 URI vs Universal Link

自定义 URI

myapp://product/1

优点:

  • 简单
  • 不需要域名

缺点:

  • 不安全
  • 容易冲突

Universal Link

https://example.com/product/1

系统验证:

example.com 属于该 App

优点:

  • 更安全
  • 更稳定
  • 用户体验更好

十三、设计自定义 URI 的建议

Scheme 命名唯一

避免:

app://

推荐:

companyapp://

参数结构清晰

推荐:

myapp://user/123/orders/456

而不是:

myapp://do?action=x&id=y

做参数校验

不要信任 URI 输入。

必须:

  • URL decode
  • 长度限制
  • 权限校验
  • 白名单验证

不暴露敏感信息

避免:

myapp://login?token=xxx

URI 可能:

  • 被日志记录
  • 被浏览器历史保存
  • 被系统审计

十四、总结

应用层自定义 URI 的本质:

用统一字符串格式描述资源与动作。

它:

  • 不一定联网
  • 不一定是标准协议
  • 不一定浏览器支持

很多 URI:

其实只是:

应用自己的解析规则。

例如:

postgresql+asyncpg://

只是:

  • SQLAlchemy
  • asyncpg
  • Python

共同约定的一种连接描述格式。

而不是互联网标准协议。

理解这一点后:

你会真正理解:

  • Deep Link
  • 数据库 URI
  • App 协议注册
  • SDK 连接字符串
  • URI Scheme
  • URL 与 URI 的区别

以及:

“互联网中的资源标识”到底是如何工作的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 15:57:49

Windows系统如何直接运行安卓应用:APK安装器深度解析

Windows系统如何直接运行安卓应用&#xff1a;APK安装器深度解析 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在Windows电脑上运行安卓应用不再是遥不可及的梦想。A…

作者头像 李华
网站建设 2026/5/14 15:54:04

抖音下载神器:3分钟掌握无水印批量下载技巧

抖音下载神器&#xff1a;3分钟掌握无水印批量下载技巧 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音批…

作者头像 李华
网站建设 2026/5/14 15:53:05

GitMem:基于Git的开发者记忆增强工具,打造可追溯的终端知识库

1. 项目概述&#xff1a;一个为开发者设计的记忆增强工具如果你和我一样&#xff0c;每天在多个Git仓库、文档、会议纪要和临时想法之间来回切换&#xff0c;那你一定理解那种“我明明记得在哪里看到过”的无力感。代码片段、配置命令、项目特定的解决方案&#xff0c;这些宝贵…

作者头像 李华
网站建设 2026/5/14 15:53:05

如何快速掌握dcm2niix医学影像转换工具:5个核心技巧实战指南

如何快速掌握dcm2niix医学影像转换工具&#xff1a;5个核心技巧实战指南 【免费下载链接】dcm2niix dcm2nii DICOM to NIfTI converter: compiled versions available from NITRC 项目地址: https://gitcode.com/gh_mirrors/dc/dcm2niix dcm2niix是一款功能强大的医学影…

作者头像 李华
网站建设 2026/5/14 15:51:10

Kubernetes日志与监控:构建可观测性体系

Kubernetes日志与监控&#xff1a;构建可观测性体系 引言 在Kubernetes环境中&#xff0c;日志和监控是运维和故障排查的关键。良好的可观测性体系能够帮助我们快速定位问题、优化性能。本文将深入探讨Kubernetes的日志收集、监控指标和追踪系统。 一、日志管理 1.1 容器日…

作者头像 李华