簡體   English   中英

瀏覽器“記住”一個臨時重定向一段時間。 我可以防止嗎?

[英]Browser “remembers” a temporary redirect for a while. Can I prevent that?

我的 nginx 網站受 IP 范圍保護,我需要在現場或通過 vpn 登錄才能看到它:

geo $external_ip {
  192.168.0.0/16 0;
}
…
if ($external_ip) {
  return 302 https://www.different-site.com/info_explaining_to_log_in_via_vpn ;
}
…
# Normal location config for website

現在我訪問我的網站,但我忘記了通過 VPN 登錄。 所以我被重定向到信息頁面,該頁面很好地告訴我為什么我無法訪問該站點並且我必須啟動我的 VPN 客戶端。

我這樣做。 現在我再次將 URL 重新輸入到我的網站,但瀏覽器似乎記住了重定向並不斷返回信息頁面。

如果我使用 307 狀態碼,也會發生同樣的情況。

過了一會兒,瀏覽器似乎忘記了重定向並再次按照我的預期運行並向我顯示我的網站。

如果我簡單地返回 403 也會發生同樣的情況,從而有效地丟棄了我的信息頁面。 我這樣做是因為我認為這可能是一些緩存語句。 而且默認的 nginx 403 頁面似乎也被瀏覽器記住了。

有沒有辦法讓瀏覽器在每次嘗試時都嘗試重新加載原始站點? 我覺得我錯過了一個重要的難題。

Output $ curl -I https://different-site.com/

HTTP/2 302

server: nginx/1.10.3 (Ubuntu)
date: Mon, 11 May 2020 20:07:54 GMT
content-type: text/html
content-length: 170
location: different-site.com/info_explaining_to_log_in_via_vpn
pragma: no-cache
cache-control: no-cache

更多信息:該問題僅存在於最初打開連接而沒有安裝 vpn 的瀏覽器中。 啟動vpn成功后運行任何其他瀏覽器或curl。

更多信息 (2):我目前假設我的瀏覽器保持連接處於活動狀態,即使啟動 VPN 也會重復使用。 這樣,nginx 仍然看到舊的公共 IP 並拒絕訪問,直到原始連接終止。 根據https://serverfault.com/questions/775617/force-nginx-to-close-connection ,除非我完全禁用keepalive,否則我無法終止連接服務器端,這是出於性能原因我不想要的。 所以看起來沒有前進的道路。 我的下一個想法是在 nginx(haproxy?)前面放一些東西,這可以根據 url 確定連接關閉。

禁用緩存響應標頭是否有幫助?

add_header cache-control no-cache always;
add_header Last-Modified  "" always;
etag off;
if_modified_since off;

在我將其更改為 302 之前,當我的服務器最初發送 301 之前,我遇到過這個問題。您還可以使用 chrome://net-internals/#dns 清除 Chrome 的 DNS 緩存,或者在瀏覽器中嘗試私有/隱身 window . Firefox/Chrome 開發工具可讓您禁用緩存,如果您重新加載 URL,則應選擇新的位置 header:

在此處輸入圖像描述

嘗試Cache-Control: no-store代替。

no-cache的文檔中:

響應可以由任何緩存存儲,即使響應通常是不可緩存的。 但是,存儲的響應必須始終在使用之前先通過源服務器的驗證,因此,您不能將 no-cache 與 immutable 結合使用。 如果您不想將響應存儲在任何緩存中,請改用 no-store。 該指令在阻止緩存存儲您的響應方面無效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM