github.com/ipfans/trojan-go@v0.11.0/docs/content/developer/url.md (about) 1 --- 2 title: "URL方案(草案)" 3 draft: false 4 weight: 200 5 --- 6 7 ## Changelog 8 9 - encryption 格式修改为 ss;method:password 10 11 ## 概述 12 13 感谢 @DuckSoft @StudentMain @phlinhng 对 Trojan-Go URL 方案的讨论和贡献。**目前 URL 方案为草案,需要更多的实践和讨论。** 14 15 Trojan-Go**客户端**可以接受URL,以定位服务器资源。原则如下: 16 17 - 遵守 URL 格式规范 18 19 - 保证人类可读,对机器友好 20 21 - URL 的作用,是定位 Trojan-Go 节点资源,方便资源分享 22 23 需要注意,基于人类可读性的考虑,禁止将 base64 等编码数据嵌入 URL 中。首先, base64 编码不能保证传输安全,其意义在于在 ASCII 信道传输非 ASCII 数据。其次,如果需要保证分享 URL 时的传输安全,请对明文 URL 进行加密,而不是修改 URL 格式。 24 25 ## 格式 26 27 基本格式如下,`$()` 代表此处需要 `encodeURIComponent`。 28 29 ```text 30 trojan-go:// 31 $(trojan-password) 32 @ 33 trojan-host 34 : 35 port 36 /? 37 sni=$(tls-sni.com)& 38 type=$(original|ws|h2|h2+ws)& 39 host=$(websocket-host.com)& 40 path=$(/websocket/path)& 41 encryption=$(ss;aes-256-gcm;ss-password)& 42 plugin=$(...) 43 #$(descriptive-text) 44 ``` 45 46 例如 47 48 ```text 49 trojan-go://password1234@google.com/?sni=microsoft.com&type=ws&host=youtube.com&path=%2Fgo&encryption=ss%3Baes-256-gcm%3Afuckgfw 50 ``` 51 52 由于 Trojan-Go 兼容 Trojan,所以对于 Trojan 的 URL 方案 53 54 ```text 55 trojan://password@remote_host:remote_port 56 ``` 57 58 可以兼容接受。它等价于 59 60 ```text 61 trojan-go://password@remote_host:remote_port 62 ``` 63 64 需要注意的是,一旦服务器使用了非Trojan兼容的功能,必须使用```trojan-go://```定位服务器。这样设计的目的是使得 Trojan-Go 的 URL 不会被 Trojan 错误接受,避免污染 Trojan 用户的 URL 分享。同时,Trojan-Go 确保可以兼容接受 Trojan 的 URL。 65 66 ## 详述 67 68 注意:所有参数名和常数字符串均区分大小写。 69 70 ### `trojan-password` 71 72 Trojan 的密码。 73 不可省略,不能为空字符串,不建议含有非 ASCII 可打印字符。 74 必须使用 `encodeURIComponent` 编码。 75 76 ### `trojan-host` 77 78 节点 IP / 域名。 79 不可省略,不能为空字符串。 80 IPv6 地址必须扩方括号。 81 IDN 域名(如“百度.cn”)必须使用 `xn--xxxxxx` 格式。 82 83 ### `port` 84 85 节点端口。 86 省略时默认为 `443`。 87 必须取 `[1,65535]` 中的整数。 88 89 ### `tls`或`allowInsecure` 90 91 没有这个字段。 92 TLS 默认一直启用,除非有传输插件禁用它。 93 TLS 认证必须开启。无法使用根CA校验服务器身份的节点,不适合分享。 94 95 ### `sni` 96 97 自定义 TLS 的 SNI。 98 省略时默认与 `trojan-host` 同值。不得为空字符串。 99 100 必须使用 `encodeURIComponent` 编码。 101 102 ### `type` 103 104 传输类型。 105 省略时默认为 `original`,但不可为空字符串。 106 目前可选值只有 `original` 和 `ws`,未来可能会有 `h2`、`h2+ws` 等取值。 107 108 当取值为 `original` 时,使用原始 Trojan 传输方式,无法方便通过 CDN。 109 当取值为 `ws` 时,使用 Websocket over TLS 传输。 110 111 ### `host` 112 113 自定义 HTTP `Host` 头。 114 可以省略,省略时值同 `trojan-host`。 115 可以为空字符串,但可能带来非预期情形。 116 117 警告:若你的端口非标准端口(不是 80 / 443),RFC 标准规定 `Host` 应在主机名后附上端口号,例如 `example.com:44333`。至于是否遵守,请自行斟酌。 118 119 必须使用 `encodeURIComponent` 编码。 120 121 ### `path` 122 123 当传输类型 `type` 取 `ws`、`h2`、`h2+ws` 时,此项有效。 124 不可省略,不可为空。 125 必须以 `/` 开头。 126 可以使用 URL 中的 `&` `#` `?` 等字符,但应当是合法的 URL 路径。 127 128 必须使用 `encodeURIComponent` 编码。 129 130 ### `mux` 131 132 没有这个字段。 133 当前服务器默认一直支持 `mux`。 134 启用 `mux` 与否各有利弊,应由客户端决定自己是否启用。URL的作用,是定位服务器资源,而不是规定用户使用偏好。 135 136 ### `encryption` 137 138 用于保证 Trojan 流量密码学安全的加密层。 139 可省略,默认为 `none`,即不使用加密。 140 不可以为空字符串。 141 142 必须使用 encodeURIComponent 编码。 143 144 使用 Shadowsocks 算法进行流量加密时,其格式为: 145 146 ```text 147 ss;method:password 148 ``` 149 150 其中 ss 是固定内容,method 是加密方法,必须为下列之一: 151 152 - `aes-128-gcm` 153 - `aes-256-gcm` 154 - `chacha20-ietf-poly1305` 155 156 其中的 `password` 是 Shadowsocks 的密码,不得为空字符串。 157 `password` 中若包含分号,不需要进行转义。 158 `password` 应为英文可打印 ASCII 字符。 159 160 其他加密方案待定。 161 162 ### `plugin` 163 164 额外的插件选项。本字段保留。 165 可省略,但不可以为空字符串。 166 167 ### URL Fragment (# 后内容) 168 169 节点说明。 170 不建议省略,不建议为空字符串。 171 172 必须使用 `encodeURIComponent` 编码。