Làm thế nào lâu trình duyệt cache HTTP 301s?


380

Tôi đang gỡ lỗi một vấn đề với Chuyển hướng vĩnh viễn HTTP 301. Sau khi thử nghiệm nhanh, có vẻ như Safari sẽ xóa bộ nhớ cache 301s khi được khởi động lại, nhưng Firefox thì không.

Khi nào IE, Chrome, Firefox và Safari xóa bộ nhớ cache của 301s?

CẬP NHẬT: Ví dụ: nếu tôi muốn chuyển hướng example1.comđến example2.com, nhưng tôi vô tình đặt nó để chuyển hướng đến example3.com, đó là một vấn đề. Tôi có thể sửa lỗi, nhưng bất kỳ ai đã truy cập example1.comtrong thời gian đó sẽ lưu lại bộ đệm chuyển hướng không chính xác example3.comvà vì vậy họ sẽ không thể truy cập được example1.comhoặc example2.comcho đến khi bộ nhớ cache của họ bị xóa. Khi điều tra, tôi thấy rằng không có Cache-ControlExpirestiêu đề được thiết lập. Các tiêu đề cho phản hồi 301 không chính xác sẽ như thế này:

HTTP/1.1 301 Moved Permanently
Date: Wed, 27 Feb 2013 12:05:53 GMT
Server: Apache/2.2.21 (Unix) DAV/2 PHP/5.3.8
X-Powered-By: PHP/5.3.8
Location: http://example3.com/
Content-Type: text/html

Các thử nghiệm của riêng tôi cho thấy:

  • IE7, IE8, Android 2.3.4 hoàn toàn không lưu trữ bộ đệm.
  • Firefox 18.0.2, Safari 5.1.7 (trên Windows 7) và Opera 12,14 đều lưu bộ đệm và xóa bộ đệm khi khởi động lại trình duyệt.
  • Bộ nhớ cache IE10 và Chrome 25, nhưng không xóa khi khởi động lại trình duyệt, vậy khi nào chúng sẽ xóa?

7
Vui lòng cho chrome biết chúng tôi cần một lối thoát khỏi lỗ địa ngục 301 này: bug.chromium.org/p/chromium/issues/ Kẻ
BT

@BT vì sự cố ảnh hưởng đến tất cả các trình duyệt, thực sự chỉ IETF mới có thể khắc phục điều này, có thể bằng cách xác định một số thời gian chờ bắt buộc trên các bộ nhớ cache 301 không có TTL, để cuối cùng các trình duyệt sẽ xác minh lại các giả định được lưu trong bộ nhớ cache của chúng.
McGuireV10

1
Tôi đã bắt đầu một cuộc thảo luận về danh sách gửi thư của IETF về vấn đề này, nếu bất cứ ai vẫn theo dõi vấn đề này cảm thấy như đang cân nhắc: List.w3.org/Archives/Public/ietf-http-wg/2017OctDec/0363.html
McGuireV10

Câu trả lời:


299

Ít nhất hai trình duyệt - Chrome và Firefox - sẽ lưu trữ bộ chuyển hướng 301 mà không có thời hạn sử dụng .

Đó là, nó sẽ vẫn được lưu trữ miễn là bộ nhớ cache của trình duyệt có thể chứa nó. Nó sẽ bị xóa khỏi bộ đệm nếu bạn xóa thủ công bộ đệm hoặc nếu các mục trong bộ đệm được xóa để nhường chỗ cho những cái mới.

Bạn có thể xác minh điều này ít nhất trong Firefox bằng cách truy cập about:cachevà tìm nó trong bộ đệm đĩa.

Tôi không biết về hành vi của các trình duyệt khác, chẳng hạn như IE10 / IE11. Tuy nhiên, do các trình duyệt khác thực hiện lưu trữ bộ nhớ cache vô thời hạn, bạn sẽ phải đáp ứng điều này.

Trong tất cả các trình duyệt, bao gồm Chrome / Firefox, vẫn có thể ghi đè hành vi mặc định này bằng các tiêu đề, như được mô tả dưới đây:

Lưu ý: câu trả lời này đã được viết vào năm 2014 và hành vi của trình duyệt có thể thay đổi theo thời gian.

Nếu bạn không muốn chuyển hướng được lưu trữ

Bộ nhớ đệm không xác định này chỉ là bộ đệm ẩn mặc định của các trình duyệt này trong trường hợp không có tiêu đề Cache-Control. Logic là bạn đang chỉ định chuyển hướng "vĩnh viễn" và không cung cấp cho họ bất kỳ hướng dẫn bộ đệm nào khác, vì vậy họ sẽ coi nó như thể bạn muốn nó được lưu trong bộ nhớ cache vô thời hạn.

Các trình duyệt vẫn tôn trọng tiêu đề Cache-Control và hết hạn như với bất kỳ phản hồi nào khác, nếu chúng được chỉ định.

Bạn có thể thêm các tiêu đề như Cache-Control: max-age=3600hoặc Expires: Thu, 01 Dec 2014 16:00:00 GMTvào chuyển hướng 301 của bạn. Bạn thậm chí có thể thêm Cache-Control: no-cacheđể trình duyệt sẽ không được lưu trong bộ nhớ cache vĩnh viễn hoặc Cache-Control: no-storedo đó trình duyệt không thể được lưu trữ trong bộ lưu trữ tạm thời của trình duyệt.

Tuy nhiên, một sự thay thế tốt hơn theo quan điểm của tôi là sử dụng chuyển hướng 302 hoặc 307. Những điều này không ngụ ý cho các trình duyệt hoặc bộ nhớ cache rằng chúng là các chuyển hướng "vĩnh viễn" và do đó không nên lưu vào bộ nhớ cache trong sự vắng mặt của các tiêu đề Kiểm soát bộ đệm.

Đối với tôi, nó có vẻ như ban hành một chuyển hướng 301 nhưng đánh dấu nó là không lưu trữ được sẽ đi ngược lại với tinh thần của chuyển hướng 301 là gì, mặc dù nó có thể hợp lệ về mặt kỹ thuật. YMMV và bạn có thể tìm thấy các trường hợp cạnh trong đó có ý nghĩa cho việc chuyển hướng "vĩnh viễn" có giới hạn thời gian.

Nếu trước đây bạn đã ban hành chuyển hướng 301 nhưng muốn hủy thực hiện điều đó

Nếu mọi người vẫn có chuyển hướng 301 được lưu trong bộ nhớ cache trong trình duyệt của họ, họ sẽ tiếp tục được đưa đến trang đích bất kể trang nguồn có còn chuyển hướng đúng chỗ hay không. Các tùy chọn của bạn để sửa lỗi này bao gồm:

  • Giải pháp đơn giản và tốt nhất là phát hành lại một chuyển hướng 301 khác.

    Trình duyệt sẽ nhận ra rằng nó đang được chuyển trở lại với những gì trước đây nó nghĩ là một URL không được ủy quyền và điều này sẽ khiến nó tải lại URL đó một lần nữa để xác nhận rằng chuyển hướng cũ không còn ở đó.

    Chỉnh sửa: một số ý kiến ​​ném nghi ngờ về điều này, xem bên dưới.

  • Nếu bạn không có quyền kiểm soát trang web nơi mục tiêu chuyển hướng trước đó đã đến, thì bạn sẽ gặp may. Hãy thử và cầu xin chủ sở hữu trang web chuyển hướng lại cho bạn.

Ngoài ra, phòng bệnh hơn chữa bệnh - tránh chuyển hướng 301 nếu bạn không chắc chắn muốn hủy vĩnh viễn URL cũ.


18
Ngoài ra, bạn có bất kỳ tài liệu tham khảo nào cho thấy các trình duyệt xử lý các chuyển hướng vĩnh viễn theo vòng tròn bằng cách tìm nạp lại URL gốc không?
Kevin Christopher Henry

7
Chuyển hướng 301 không hoạt động, trình duyệt vẫn lưu trữ chuyển hướng 301 cũ và tôi thấy vòng lặp vô hạn
Yuriy Kolodovskyy

5
làm thế nào tôi đã làm thử nghiệm: một số thời gian trước đây tôi đã làm chuyển hướng 301 cho http://www.SOMEHOST.comtới https://www.SOMEHOST.com. Nhưng bây giờ http://www.SOMEHOST.comphải là máy chủ chính cho trang web. Vì vậy, chuyển hướng từ https đến http đã bị xóa. Như bạn thấy tôi đã thực hiện chuyển hướng 301 từ https://www.SOMEHOST.comđến http://www.SOMEHOST.com, nhưng xem vòng lặp. Trình duyệt không tải lại ...
Yuriy Kolodovskyy

8
Tôi xác nhận rằng việc chuyển hướng trở lại (với chuyển hướng PHP trong trường hợp của tôi) hoạt động hoàn hảo trên Google Chrome miễn là (rõ ràng) bạn đã xóa chuyển hướng 301 ban đầu.
Vincent Poirier

15
Tôi có thể xác nhận rằng chuyển hướng trở lại hoạt động hoàn toàn tốt. Trình duyệt thấy vòng lặp chuyển hướng làm mất hiệu lực các mục bộ đệm. Đã thử nghiệm trên IE11, Firefox 52, Safari 10, Chrome 57.
Munhitsu

258

Từ Chrome 71

Để xóa chuyển hướng vĩnh viễn, hãy truy cập chrome: // settings / clearBrowserData và từ đó chỉ xóa "hình ảnh và tệp được lưu trong bộ nhớ cache" đã xóa chuyển hướng.

Chrome 48-70

Chuyển đến chrome: // net-internals. Ở bên phải của thanh trạng thái màu đỏ trên cùng, nhấp vào mũi tên xuống để mở menu thả xuống và trong nhóm "Công cụ", chọn "Xóa bộ nhớ cache".

Kể từ phiên bản 48, đây là điều duy nhất giúp tôi xóa 301 được lưu trữ.


14
Kể từ phiên bản Chrome 54, rất tiếc là nó không hoạt động với tôi.
pwagner

4
Suy nghĩ thứ hai, tôi đã không thực sự trả lời câu hỏi thực sự , "Các trình duyệt lưu bộ nhớ cache trong bao lâu" và câu trả lời của tôi sẽ không giúp bất kỳ ai chuyển hướng một trang web công khai mà bạn có thể cần một số cách để hoàn tác vĩnh viễn 301 mà không biết có bao nhiêu trình duyệt trong tự nhiên đã lưu bộ đệm chuyển hướng - các câu trả lời khác giải quyết một phần kịch bản đó. Câu trả lời của tôi thực sự chỉ hữu ích cho các nhà phát triển hoặc các tình huống mạng nội bộ nơi bạn có thể giao tiếp với tất cả người dùng bị ảnh hưởng.
McGuireV10

1
Hoạt động trong Chrome phiên bản 68.0.3440.106 (Bản dựng chính thức)
Thum Choon Tat

12
chrome: // net-internals đã được rút ra trong Chrome 71. Phần thả xuống / Công cụ không còn nữa. Có DNS> Bộ đệm bộ giải quyết máy chủ> Xóa nút bộ đệm máy chủ, nhưng điều này không hoạt động để xóa bộ nhớ cache 301s.
t-jam

52
Trong Chrome 71, chrome: // settings / clearBrowserData và từ đó chỉ xóa "hình ảnh và tệp được lưu trong bộ nhớ cache" đã xóa chuyển hướng.
Bemmu

179

Một câu trả lời giúp những người tuyệt vọng muốn thoát khỏi bộ đệm chuyển hướng:

Chrome lưu trữ chuyển hướng 301 vô hạn (trong bộ đệm đĩa cục bộ). Để xóa bộ đệm này:

  • mở DevTools của bạn (nhấn F12)
  • trên tab Mạng kiểm tra "Tắt bộ nhớ cache" hộp kiểm
  • giữ DevTools mở và tải lại trang (nhấn F5)

Khi mọi thứ đều ổn, bạn có thể bỏ chọn "Tắt bộ đệm" và mọi thứ sẽ tiếp tục hoạt động như mong đợi.


14
Điều này hoạt động và ngay cả sau khi kích hoạt lại bộ nhớ đệm, chuyển hướng đã biến mất. CÁM ƠN!
migg

2
Có vẻ như điều này không hoạt động đối với các miền được trỏ đến 127.0.0.1 thông qua tệp máy chủ cục bộ. Có lựa chọn nào khác cho trường hợp này không?
pwagner

Không hoạt động nếu chuyển hướng, ngoài ý muốn, trỏ đến một cổng khác, như từ localhost:8000đến localhost(cổng 80). Tôi cũng đã xóa toàn bộ dữ liệu trang web / ứng dụng từ cả localhost và localhost: 8000, nhưng không giúp được gì.
Dennis98

3
Giải pháp này hoạt động trên Chrome kể từ ngày 16 tháng 11 năm 2019 phiên bản 78.0.3904.97. Các giải pháp khác không còn nữa. Sau khi bạn làm cho nó hoạt động, bạn có thể đóng các công cụ dành cho nhà phát triển và nó sẽ tiếp tục hoạt động bình thường.
Peter Wooster

Chấp nhận câu trả lời.
Aysennoussi

43

Làm cho người dùng gửi biểu mẫu bài đăng trên url đó và chuyển hướng được lưu trong bộ nhớ cache đã biến mất :)

<body onload="document.forms[0].submit()">
<form action="https://forum.pirati.cz/unreadposts.html" method="post">
    <input type="submit" value="fix" />
</form>
</body>

2
Tôi đồng ý đây là phương pháp tốt nhất mà tôi đã tìm thấy để tháo nó ra.
esjay

Không giống như các câu trả lời khác, phương pháp này phù hợp để giải quyết vấn đề của người khác mà không cần mở bảng điều khiển dành cho nhà phát triển! cảm ơn bạn
Alexey Rytikov

4
tìm nạp ('URL', {phương thức: 'POST'}) không thực hiện thủ thuật theo cách tương tự. Cảm ơn! Điều này tiết kiệm cho tôi một số đau đầu!
Calvin

Tôi không thể tin rằng đây là cách duy nhất hiệu quả với tôi (tôi đã thử tất cả các phương pháp khác trước - ngay cả bảng điều khiển tìm nạp () không thành công do chính sách bảo mật chéo trang).
dùng36388

24

301là một phản hồi có thể lưu trong bộ nhớ cache trên mỗi RFC HTTP và các trình duyệt sẽ lưu trữ bộ đệm đó tùy thuộc vào các tiêu đề bộ đệm HTTP mà bạn có trên phản hồi. Sử dụng FireBug hoặc Charles để kiểm tra các tiêu đề phản hồi để biết thời lượng chính xác mà phản hồi sẽ được lưu trong bộ nhớ cache.

Nếu bạn muốn kiểm soát thời lượng bộ đệm, bạn có thể sử dụng các tiêu đề phản hồi HTTP Cache-ControlExpiresthực hiện tương tự. Ngoài ra, nếu bạn không muốn lưu trữ 301phản hồi, hãy sử dụng các tiêu đề sau.

Cache-Control: no-store, no-cache, must-revalidate
Expires: Thu, 01 Jan 1970 00:00:00 GMT

12
Mặc dù về mặt kỹ thuật, câu trả lời của bạn không trả lời câu hỏi của người dùng và do đó không trả lời câu hỏi tôi đến đây. Khi nào các 301-un-cache 301-cache hiện có trong trình duyệt đã hết hạn cho các trình duyệt chính?
cướp

Nếu bất cứ ai vẫn quan tâm, hướng dẫn liên kết này có thể chuyển đổi bộ đệm cho 301.
Francisco Presencia

Liên kết là dành cho FF và nó không hoạt động với tôi. Đã cài đặt tiện ích mở rộng cho nhà phát triển web 1.2.5 và sử dụng FF 23.0.1
một phu nhân

Câu hỏi không được trả lời. Câu hỏi là, việc chuyển hướng sẽ được lưu trong bao lâu nếu không có ngày hết hạn được chỉ định
Dennis Flagg

21

Có một cách rất đơn giản để xóa bộ đệm của trình duyệt cho các chuyển hướng http, ví dụ: 301, 307, v.v.

Bạn có thể mở bảng điều khiển mạng trong bảng điều khiển dành cho nhà phát triển bằng chrome. Chọn cuộc gọi mạng. Nhấp chuột phải vào nó và sau đó nhấp vào Clear Browser Cache để xóa chuyển hướng được lưu trong bộ nhớ cache.

menu ngữ cảnh cuộc gọi mạng


1
Cảm ơn rât nhiều! Giải pháp đơn giản và đã làm việc! Cách này cũng sẽ làm việc trong tương lai.
sgon00

16

Đã xác nhận!! làm cho người dùng gửi yêu cầu bài đăng đến url bị ảnh hưởng và chuyển hướng được lưu trong bộ nhớ cache bị lãng quên.

Một chiến thắng nhanh chóng sẽ là nhập cái này vào bảng điều khiển trình duyệt nếu bạn có thể:

fetch('example.com/affected/link', {method: 'post'}).then(() => {})

Hữu ích nếu bạn biết trình duyệt bị ảnh hưởng (đặc biệt là trong quá trình phát triển).

Ngoài ra , nếu bạn có quyền truy cập vào trang chuyển hướng 301 trước đó, thì bạn có thể thêm tập lệnh này vào trang và bất cứ khi nào nó được truy cập, 301 được lưu trong bộ nhớ cache sẽ bị lãng quên.


Điều này tương tự như mẫu bài viết ở trên, chỉ là nó ít nỗ lực hơn.
jpswade

Điều đó đúng @jpswade
Emeke Ajeh

12

Tôi sẽ đăng câu trả lời giúp tôi:

đi tới url:

chrome://settings/clearBrowserData

nó sẽ gọi popup và sau đó ..

  • chỉ chọn : cached images and files.
  • chọn hộp thời gian: from beginning

Hoạt động trong Chrome 79!
webaholik

Làm việc trong Chrome 80, cảm ơn!
Giuse

6

như câu trả lời của @thomasrutter

Nếu trước đây bạn đã ban hành chuyển hướng 301 nhưng muốn hủy thực hiện điều đó

Nếu mọi người vẫn có chuyển hướng 301 được lưu trong bộ nhớ cache trong trình duyệt của họ, họ sẽ tiếp tục được đưa đến trang đích bất kể trang nguồn có còn chuyển hướng đúng chỗ hay không. Các tùy chọn của bạn để sửa lỗi này bao gồm:

Giải pháp đơn giản và tốt nhất là phát hành lại một chuyển hướng 301 khác.

Trình duyệt sẽ nhận ra rằng nó đang được chuyển trở lại những gì trước đây nó nghĩ là một URL đã ngừng hoạt động và điều này sẽ khiến nó tải lại URL đó một lần nữa để xác nhận rằng chuyển hướng cũ không còn ở đó.

Nếu bạn không có quyền kiểm soát trang web nơi mục tiêu chuyển hướng trước đó đã đến, thì bạn sẽ gặp may. Hãy thử và cầu xin chủ sở hữu trang web chuyển hướng lại cho bạn.

Trong thực tế, điều này có nghĩa là:

  1. a.com 301 đến b.com

  2. xóa 301 của a.com

  3. thêm b.com 301 vào a.com

Sau đó, nó hoạt động.


2
Nhưng sau đó, bạn vẫn có 301 của b.com nằm xung quanh: (- một bản sửa lỗi bẩn
BT

1
Bạn có thể xóa một chuyển hướng bằng cách phát hành 301 khác từ một trang khác không? ví dụ: ( a.com301 -> b.com) (xóa a.com301) (thêm a.com/abcdefg301 -> a.com) và buộc khách hàng xem a.com/abcdefgbằng cách nào đó?
nemec

Cảm ơn nó hoạt động! Đã thử nghiệm trên IE11, Firefox 52, Safari 10, Chrome 57
Munhitsu

Tôi đã có một tình huống muốn sử dụng cả a.com và b.com. Vì vậy, b.com 301 a.com không phải là một lựa chọn. Giải pháp của chúng tôi là chuyển sang HTTPS - chúng tôi không có chuyển hướng nào trên HTTPS
rosell.dk

6

Tôi có giải pháp đơn giản hoạt động trên tất cả các trình duyệt chính (phiên bản mới nhất), bao gồm IE, Chrome và FF

  1. Ctrl + Shift + Del
  2. -
    1. Chrome: Chọn "Lịch sử duyệt web" và "Bộ nhớ cache ..."
    2. IE: Tôi để tùy chọn mặc định "Tệp Internet tạm thời và tệp trang web", "Cookie và dữ liệu trang web", "Lịch sử"
    3. FF: "Lịch sử duyệt và tải xuống", "Cache"
  3. Nhấp vào "Xóa"
  4. Đóng và mở lại trình duyệt của bạn. Nó nên hoạt động

Bạn cũng nên đảm bảo rằng bạn không ở trên trang đang được đề cập đến, bởi vì một số trình duyệt không xóa các mục được lưu trong bộ nhớ cache khỏi các trang đang mở.
Oliver Schimmer

6

Đối với mục đích thử nghiệm (để tránh chuyển hướng được lưu trong bộ nhớ cache), mọi người có thể mở WINDOW RIÊNG TƯ MỚI : nhấp vào CTRL+SHIFT+N[nếu bạn sử dụng Mozilla, sử dụng P]


Điều này đã bị đánh giá thấp, có lẽ vì lời hứa chính của "cửa sổ riêng" không phải là VIẾT để lưu trữ, nhưng vẫn có thể ĐỌC / TÌM KIẾM chúng. NHƯNG đối với tôi trên Firefox 37.0.1 (Linux) điều này đã hoạt động và rất nhanh chóng và hữu ích. Cửa sổ riêng đang phản ánh các cài đặt hiện tại / chưa được quản lý của máy chủ web, trong khi các tab trình duyệt thông thường sử dụng chuyển hướng 301 được lưu trữ.
alfonx

alfonx: Cửa sổ riêng tư có thể không sử dụng lại bộ đệm đơn giản vì chủ sở hữu máy chủ có thể sử dụng các thành phần theo kiểu cookie tiết lộ danh tính trước đó của người dùng đó. Mặc dù tôi phải thừa nhận rằng việc sử dụng lại bộ nhớ cache có thể an toàn đối với người vợ ghét khiêu dâm.
Zdenek

6
Điều này không hoạt động nếu bạn đã có bộ nhớ cache 301. Riêng tư thực sự sẽ sử dụng chuyển hướng được lưu trữ.
jeffmcneill

1

Kiểm tra chuyển hướng của bạn bằng chế độ ẩn danh / InPrivate để khi bạn đóng trình duyệt, nó sẽ xóa bộ đệm đó và mở lại cửa sổ sẽ không chứa bộ đệm.


1

Như các câu trả lời khác cho thấy. Bộ nhớ đệm có thể không xác định trong trình duyệt. Điều này cực kỳ nguy hiểm. Vì vậy, đừng làm điều đó. Ít nhất là thêm các tiêu đề bộ đệm. Trong htaccess tôi luôn luôn làm theo cách này với bộ nhớ đệm hiện tại:

<IfModule mod_rewrite.c>
  RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
  # The E=nocache:1 sets the environment variable nocache to the value of one
  RewriteRule ^/?(.*) https://www.example.org/$1 [L,R=301,E=nocache:1]
</IfModule>


<IfModule mod_headers.c>
  ## Set the response header if the "nocache" environment variable is set
  ## in the RewriteRule above.
  Header always set Cache-Control "no-store, no-cache, must-revalidate" env=nocache

  ## Set Expires too ...
  Header always set Expires "Thu, 01 Jan 1970 00:00:00 GMT" env=nocache
</IfModule>

1

Để giải quyết vấn đề cho một địa chỉ localhost, tôi đã thay đổi số cổng mà trang web chạy bên dưới. Điều này hoạt động trên phiên bản Chrome 73.0.3683.86.


-1

Trên Google Chrome Phiên bản 79 mới nhất, bạn có thể sử dụng chrome: // net-internals và chọn trên DNS từ bảng điều khiển bên trái, sau đó nhấn nút Xóa bộ nhớ cache của máy chủ lưu trữ

Ảnh chụp màn hình của chrome mở trang mạng nội bộ


Không chắc chắn lý do tại sao điều này bị hạ cấp, http 301 là vấn đề liên quan đến bộ đệm máy chủ DNS
Mohammad Ersan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.