想做个专门代理短链接的小玩具, 之前在 URLCheck 那篇文章里面说过, 短链接的隐私问题可以用代理分流来缓解. 但是没有代理怎么办呢? IP 之外的信息如何剥离? 访问一个链接并不需要多完整的 User-Agent. 短链接就算只是 30x 实现的, 访问也得跑到浏览器里面, 送给它一堆客户端标头, 这是不必要的.

我对短链接的看法一直是中立的, 谁都可以用, 我也在用, 不要妨碍我选择不用就行了. 有时原文被到处复制和保存之后, 作者实际上就是失去了对原文的控制. 这在网上倒也无所谓, 如果不能要求删除, 那我就会用短链接把重要的东西包在里面, 在我想要的时候随时让它失效.

这里表达的意图是: 原文包含的只是短链接, 我只为现在我写的和引用过的文字以及这条链接负责, 如果失效, 就说明短链接被我主动删除了, 链接背后的东西也不再是解释本文的必要内容.

毕竟所有外链都不受第一来源控制, 费尽心思加外链中间页的目的除了获得分析数据, 也在声明链接归属和预防有些不稳定外链指向什么不该指向的东西, 这个 "门" 可以被人常开, 但没有门就变成自己的问题.

我建议所有网络出版物, 在对外链产生疑虑的时候使用完全受第一方作者控制的短链接来包装一遍, 也要尽量避免使用那些不必要的外链, 或者去使用存档快照来确保未来的任何时刻访客看到的外链内容都是和自己当前一致的. 出版物重新分发次数越多, 作者对其保留的解释权就越弱, 被其他人重新解释和演绎的概率就越大, 网络方便了内容出版也方便了这个传播过程.

这可能也是网络时代的网络作家才会有的特有问题, 传统出版物哪里有什么超链接可以用, 只有逼仄的脚注, 网络出版更没有 DOI 这种东西来统一外部引用.

PS: 短链接这种用途对于链接本身删除和链接指向内容的删除应该是要区分 HTTP:404 和 HTTP:410 才合理.

Reply to this note

Please Login to reply.

Discussion

做好了: un.cx.ms

用法就是直接插入到白名单 URL 的域名之前, 将原始域名作为路径, un.cx.ms 作为域名直接访问.

比如原始 URL 是: https://example.com/track?url=123456

附加之后就是: https://un.cx.ms/example.com/track?url=123456

自动覆盖客户端请求的标头:

* Accept-Language

* User-Agent

自动删除客户端请求的标头:

* DNT

* Sec-GPC

* Cookie

* If-None-Match

* Origin

* Referer

* Sec-CH-UA

* Sec-CH-UA-Architecture

* Sec-CH-UA-Bitness

* Sec-CH-UA-Full-Version-List

* Sec-CH-UA-Mobile

* Sec-CH-UA-Model

* Sec-CH-UA-Platform

* Sec-CH-UA-Platform-Version

自动删除服务端响应的标头:

* Accept-CH

* ETag

* Set-Cookie

除此之外被代理的当然也包括客户端 IP.

至于怎么让客户端自动附加, 可以用一些修改请求标头的浏览器扩展, 或者 AdGuard 的 $urltransform 修饰符, Android 上可以用 URLCheck.

主要提供演示, 自己从头造一个非常简单, 所以示例服务只对我自己保证 SLA, 没有用户协议也没有隐私协议 :bili_doge:

DNT 的问题是它俩至今没有在市占率第一的某浏览器中默认启用, 而 Sec-GPC 更是没有被支持, 所以会主动启用的用户, 反而是给客户端添加了一个特征, 不得不说现实很讽刺. 我甚至敢暴论一下: 开启 DNT 的用户可能比用 Firefox 的用户还要少, 而带有 Sec-GPC 这个标头的用户要么是 Firefox 用户要么就是 AdGuard 本机客户端用户. :bili_fantastic:

继续删除客户端请求标头:

* Sec-CH-UA-Arch

* Sec-CH-UA-Form-Factors

* Sec-CH-UA-Full-Version

* Sec-CH-UA-WoW64

新增和覆盖响应标头:

* X-Robots-Tag

* Referrer-Policy

* Clear-Site-Data

* Permissions-Policy

* Content-Security-Policy

* X-Content-Type-Options

* X-Frame-Options

* Cross-Origin-Opener-Policy

删除响应标头:

* Access-Control-Allow-Credentials

* Access-Control-Allow-Headers

* Access-Control-Allow-Methods

* Access-Control-Allow-Origin

* Access-Control-Expose-Headers

* Access-Control-Max-Age

* Access-Control-Request-Headers

* Access-Control-Request-Method

* X-XSS-Protection