【问题标题】:Serve different resource depending on full URL of requesting page根据请求页面的完整 URL 提供不同的资源
【发布时间】:2017-07-14 21:49:56
【问题描述】:

假设我们有两个页面:

  1. https://www.example.com/first/firstpage.html

  2. https://www.example.com/second/secondpage.html

两者都加载资源https://www.example.com/resource.js

如果我希望为resource.js 提供服务的服务器能够根据请求来自哪个页面来提供不同版本的resource.js,那么是否有一个可靠的标头可以在其上提供请求页面的完整 URL确定(或者可能有其他方法来确定)?

我知道有一个 Origin 标头,但据我了解,这仅代表没有完整 URL 和查询字符串的域(和任何子域)。服务器有没有办法知道资源请求来自的完整 URL 和查询字符串?


如果这是不可能的,我知道在 JS 脚本标签中包含该信息很容易,如下所示:

<script src="/resource.js?origin=/first/firstpage.html"></script>

但我不想修改每个页面的脚本标签。是否有其他方法可以让页面在资源请求的查询字符串中自动包含其自己的 URL(无需使用我自己的 JS 脚本动态加载资源 - 请仅使用 HTML!),或只是任何唯一标识符,这样脚本标签就不必在每个页面上单独修改?

【问题讨论】:

    标签: html browser http-headers


    【解决方案1】:

    您可以使用 Referer 标头。

    确保您的回复使用Vary: Referer。否则,浏览器将缓存此资源,就好像引用页面 URL 无关紧要。

    不过,我恳求你不要这样做。您将创建一个问题的兔子洞,因为并非所有浏览器或代理服务器都表现良好。不管你对Vary 标头做什么,有些人会积极缓存它。

    【讨论】:

    • 好点 - 我认为我最初的想法可能有缺陷。根据我的问题的第二部分,有没有办法让浏览器自动将某种唯一标识符附加到 URL,或者以某种方式让提供资源的终端服务器能够区分来自 firstpage.html 的请求和secondpage.html?
    • @abagshaw 您需要预处理发送给客户端的 HTML 以包含要加载的 URL,或者使用 JavaScript 添加脚本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多