Skip to content

运行原理

dangjinghao edited this page Nov 7, 2022 · 1 revision

本框架是如何运行的

框架会通过gin的session为用户保存其目前正在访问的站点,当用户发起请求时子路径没有显式指出由插件注册的访问域名,例如访问/index.html。这时站点就会读取存储在cookie的session数据,以知晓用户请求的路径所属哪个域名并进行反代,这是本框架实现的重要依赖之一。

反之,当用户发起请求,其请求子路径显式指出由插件注册的访问域名时,例如/example.com/index.html注意本域名必须被插件注册。框架便会修改用户session,更改其目标域名为example.com,最终使随后加载的相对于根目录的绝对路径可以被正常反代。

随后通过编写插件修改请求和响应使得用户通过访问子目录无感访问反代站点成为可能。

为什么要设置三种代理方式

本框架内置三种拓展方式,他们分别是:

  • 通过子目录显式指出反代域名反代
  • 在存有有效session情况下之久访问反代站点的路径反代。
  • 使用前缀*默认为/~/*允许用户在不修改session的情况下直接反代。

这一问题需要根据我开发过程中遇到的问题来分析。

  • 这是最容易想出来的情况,由于本框架的目的之一就是使用多目录来反代多站点,所以需要显式指出域名。
  • 在显式指出域名后,很多网站都是采用绝对路径引用资源,导致大部分资源无法被加载,所以随后引入session存储用户反代的目标站点地址。
  • 随后又发现有部分站点会引用外部域名,在上述情况下会被修改session导致随后的本站资源指向错误,无法正常加载,所以引入前缀概念,一般由插件修改响应体使用。当然似乎可以通过检查referer来自动设置,好像感觉思路写歪了多了一步
Clone this wiki locally