Skip to content

CORS 代理配置 ​

部分平台在浏览器环境下受同源策略限制,需要经过一个中间服务器(CORS 代理)转发请求。

为什么需要 ​

思源的运行环境分两类:

环境是否有 CORS 限制
Node 环境(桌面端 Electron):Windows、Linux、macOS无限制
纯浏览器环境:Docker 版、Android、iOS、浏览器访问有限制

浏览器有 CORS 限制是 Web 标准的要求,为了安全。插件有些平台的部分接口会触碰到它,于是需要一层代理:先把请求发给中间服务器(后端环境,本身不受 CORS 限制),由它转发并把结果返回。

Docker 版与浏览器访问必须配置

受 CORS 策略限制,Docker 版本以及 Android、iOS、浏览器等环境必须设置 CORS 代理,否则大部分平台无法使用。桌面端通常不需要。

代理的三种形态 ​

插件按配置字段区分走哪条通路:

形态对应配置项能力
cors-anywhere(自建通用代理)跨域代理地址支持绕过受限请求头、请求体支持 FormData
Cloudflare Workers跨域代理地址同上,部署成本低
内置中间件代理(旧版通路)中间件地址仅支持字符串请求体,不支持 FormData

图片上传必须用前两种

图片上传依赖 FormData,而旧版中间件只支持字符串请求体。因此带图发布必须使用 cors-anywhere 或 Cloudflare Workers 部署的通用代理。

为什么没有现成的公共代理地址 ​

插件不内置通用代理地址,这不是遗漏,而是有意为之:

  • 通用代理需要转发全部请求内容,包括各平台凭据。集中到一个公共地址,等于把所有用户的凭据都经过同一个服务。
  • 带宽与请求量成本高。一旦对外共享,很容易被滥用而耗尽额度甚至被封,结果反而是所有人都用不了。

因此通用代理请按下文自行部署一份。配套的服务端部署源码也未公开分发,需要时发邮件索取即可(见各方式的说明)。


方式一:cors-anywhere(自建通用代理) ​

这是最通用的方案,也是最早支持的一条通路:部署一个 cors-anywhere 服务,把地址填进「跨域代理地址」。

源码获取 ​

插件配套的服务端部署源码未公开分发。需要时请发邮件到 youweics@163.com 索取,说明用途即可。

部署要点 ​

  1. 准备一台有 Node 环境的服务器。
  2. 部署 cors-anywhere 服务(或等价的自建通用代理),监听一个端口。
  3. 在浏览器打开该地址确认服务可访问。
  4. 把地址填进插件的「跨域代理地址」——带协议(https:// 或 http://)、不含末尾斜杠。

不要使用来源不明的公共代理

公共代理能看到你发出的全部请求内容,包括平台凭据。务必使用自己部署或可信来源的代理。


方式二:Cloudflare Workers ​

只需要一个自己的域名,适合没有常驻服务器的场景。

  1. 注册并登录 Cloudflare。

  2. 解压部署包,安装依赖:

    bash
    npm i -g pnpm
    pnpm install
  3. 部署:

    bash
    pnpm deploy

    过程中会要求登录 Cloudflare 账号。

  4. 在 Dashboard → Workers 和 Pages 里找到刚创建的 Worker:

    在 Workers 和 Pages 里找到创建的 Worker

  5. 进入该项目,切到触发器页签,添加自定义域,指向你自己的域名(注意配置 CNAME 解析):

    在触发器页签添加自定义域

  6. 等待生效后,把该域名填进插件的「跨域代理地址」。

部署源码同样请邮件到 youweics@163.com 索取。


方式三:内置中间件代理 ​

插件内置的共享代理地址:https://api.terwer.space/api/middleware,对应配置里的「中间件地址」。

这条通路受较多限制:

  • 不支持绕过浏览器拒绝的请求头(如 origin、referer)
  • 请求体只支持字符串,不支持 FormData 等二进制格式
  • 只能代理 API 请求,不能代理普通网页

因此它无法解决图片上传,也走不通 Telegraph 这类需要 FormData 的平台。其余大部分不含图片的场景仍可用。

共享额度

这条通路由作者提供,请求量有限(历史上按「10 万次/天、1000 次/10 分钟」限制,且为所有人共享)。为保证可用性与稳定性,建议按下文自行部署方式一或方式二。


填写位置 ​

  • 平台级:设置 → 账号设置 → 对应平台的配置页 → 跨域代理地址
  • 全局:设置 → 偏好设置

常见问题 ​

填了代理地址仍然失败 ​

  1. 先在浏览器直接打开代理地址,确认服务本身可访问。
  2. 确认地址带协议且不含末尾斜杠。
  3. 代理部署在本机时,注意 Docker 版思源里的 localhost 指向容器自身,需要改用宿主机地址。

图片上传失败,但文本发布正常 ​

说明当前走的是方式三(内置中间件),它不支持 FormData。请改用方式一或方式二,并把地址填进「跨域代理地址」。

部署源码在哪里 ​

未公开分发。请发邮件到 youweics@163.com 索取,说明用途。

桌面端也需要吗 ​

通常不需要。桌面端是 Node 环境,没有 CORS 限制。个别平台因自身策略需要走代理时,插件会在配置页提示。

以 GPL-3.0 许可发布