是否可以在 HTML 中強制快取腳本檔案?
例如,給定一個腳本 balise <script src="https://example-server.com/external/widget.js" type="text/javascript" async></script>,它將出現在head網站的每個頁面中。
是否可以僅從服務器獲取一次,但無論如何都可以在每個頁面上執行它?
我的目標是能夠使用腳本中的內容https://example-server.com/external/widget.js而不是 HTML 的其余部分來處理它。我想在不增加服務器容量的情況下向客戶端提供腳本。
免責宣告:https ://example-sever.com不存在,這里是為了有效的 URI。
正如@KooiInc 指出的那樣,瀏覽器會自動處理檔案快取。
但我的問題仍然存在,URIhttps://example-server.com/external/widget.js重定向到https://cdn.net/assets/widget-{fingerprints}.js快取。但是第一個 URI 沒有被快取。
回答@Tejas Sarade 問題:
https://example-server.com/external/widget.js 的標頭
General >
Request URL: https://example-server.com/external/widget.js
Request Method: GET
Status Code: 302 Found
Referrer Policy: strict-origin-when-cross-origin
Responses Headers >
Cache-Control: no-cache
Connection: keep-alive
Content-Type: text/javascript; charset=utf-8
Location: https://cdn.net/assets/widget-{fingerprints}.js
Referrer-Policy: strict-origin-when-cross-origin
...
https://cdn.net/assets/widget-{fingerprints}.js 的標頭
General >
Request URL: https://cdn.net/assets/widget-{fingerprints}.js
Request Method: GET
Status Code: 200 (from disk cache)
Referrer Policy: strict-origin-when-cross-origin
Response Headers >
Cache-Control: no-cache
Connection: keep-alive
Content-Type: text/javascript; charset=utf-8
...
x-cache: Hit from cloudfront
...
編輯:
一點背景關系。因為我認為問題可能與 rails 資產管道和/或我的 CDN 配置有關。
我在 rails 上使用 ruby??,而不是直接通過assets路由提供我的資產,我決定重定向到assets_url我的控制器中以完美控制我的路由。(我的控制器要復雜得多,我只是在寫相關部分)
class WidgetsController < ApplicationController
WIDGET_FILE_NAME = 'widget'
def index
respond_to do |format|
format.js { redirect_to asset_url(WIDGET_FILE_NAME) }
end
end
end
在我的routes.rb檔案中
scope :external do
resources :widget, only: [:index], controller: :widgets
end
因此我可以使用端點 GEThttps://example-server.com/external/widget.js而不是 GEThttps://example-server.com/assets/widget.js
uj5u.com熱心網友回復:
這就說得通了。
根據 HTTP 協議,除非回應標頭指明,否則默認情況下不會快取 302 回應。
cache-control: max-age=in_seconds或者Expires: specific_date
https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
或者,您可以只使用 301 重定向,瀏覽器默認快取這些重定向,除非回應標頭指示不快取。
如何設定回應頭或更改型別或重定向取決于您使用的服務器型別。
uj5u.com熱心網友回復:
您可以使用查詢字串創建動態網址
<script>document.write('<script src="/myJavascript.js?dev=' Math.floor(Math.random() * 100) '"\><\/script>');</script>
這樣瀏覽器會將腳本加載為新檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/388335.html
標籤:javascript html 红宝石轨道 缓存
