Tôi đã tìm kiếm trên Web về câu hỏi này nhưng không tìm thấy gì:
Logic của nút quay lại là gì? Điều gì đang xảy ra khi chúng ta nhấn nút quay lại trên trình duyệt Web?
Tôi thực sự muốn hiểu thêm về điều đó.
Cảm ơn bạn.
Tôi đã tìm kiếm trên Web về câu hỏi này nhưng không tìm thấy gì:
Logic của nút quay lại là gì? Điều gì đang xảy ra khi chúng ta nhấn nút quay lại trên trình duyệt Web?
Tôi thực sự muốn hiểu thêm về điều đó.
Cảm ơn bạn.
Câu trả lời:
Trình duyệt web của bạn giữ một ngăn xếp (hoặc danh sách, nếu bạn muốn) các trang web mà bạn đã truy cập trong cửa sổ đó. Giả sử trang chủ của bạn là google.com và từ đó bạn truy cập một vài trang web khác: youtube.com, yahoo.com và cnn.com. Khi truy cập trang cuối cùng, danh sách sẽ giống như sau:
google.com -> youtube.com -> yahoo.com -> cnn.com
^
|
current page
Khi bạn nhấn nút Quay lại, trình duyệt sẽ đưa bạn trở lại trang trước trong danh sách, như sau:
google.com -> youtube.com -> yahoo.com -> cnn.com
^
|
current page
Tại thời điểm này, bạn có thể nhấn Quay lại một lần nữa để đưa bạn đến youtube.com hoặc bạn có thể nhấn Chuyển tiếp để đưa bạn đến cnn.com một lần nữa. Giả sử bạn nhấn Quay lại lần thứ hai:
google.com -> youtube.com -> yahoo.com -> cnn.com
^
|
current page
Nếu bây giờ bạn truy cập, chẳng hạn, abc.com, danh sách sẽ thay đổi thành như thế này:
google.com -> youtube.com -> abc.com
^
|
current page
Lưu ý rằng cả yahoo.com và cnn.com đều không có trong danh sách. Điều này là do bạn đã đi một con đường mới. Trình duyệt chỉ duy trì danh sách các trang bạn đã truy cập để đến vị trí hiện tại chứ không phải lịch sử của mọi trang bạn đã từng đến. Trình duyệt cũng không biết gì về cấu trúc của trang web bạn đang truy cập, điều này có thể dẫn đến một số hành vi đáng ngạc nhiên.
Bạn đang ở trên một trang web mua sắm (ví dụ ngắn gọn là ne.com) có các danh mục và danh mục phụ của sản phẩm để duyệt qua. Nhà thiết kế trang web đã chu đáo cung cấp các đường dẫn gần đầu cửa sổ để cho phép bạn điều hướng qua các danh mục. Bạn bắt đầu từ trang trên cùng của trang web, nhấp vào Phần cứng, sau đó nhấp vào Bộ nhớ. Danh sách bây giờ trông như thế này:
google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem
^
|
current page
Bạn muốn quay lại danh mục Phần cứng, vì vậy bạn sử dụng breadcrumbs để chuyển đến danh mục chính thay vì sử dụng nút Quay lại. Bây giờ danh sách trình duyệt trông như thế này:
google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem -> ne.com/hw
^
|
current page
Theo cấu trúc trang web, bạn đã lùi lại (tăng một cấp), nhưng với trình duyệt, bạn đã tiến lên vì bạn đã nhấp vào một liên kết. Bất cứ khi nào bạn nhấp vào một liên kết hoặc nhập một URL vào thanh địa chỉ, bạn sẽ tiếp tục theo như trình duyệt có liên quan, cho dù liên kết đó có đưa bạn đến trang mà bạn đã từng đến hay không.
Cuối cùng, bạn muốn quay lại trang web chính (ne.com). Bạn có thể sử dụng breadcrumbs, nhưng lần này bạn nhấp vào nút Quay lại - rõ ràng là nó sẽ nâng bạn lên một cấp, phải không? Nhưng nó sẽ đưa bạn đến đâu?
Ban đầu, nó khiến nhiều người dùng bối rối (bao gồm cả bản thân tôi, khi tôi tình cờ làm chính xác điều này) rằng nó khiến bạn "xuống" một cấp độ, quay trở lại danh mục Bộ nhớ. Nhìn vào danh sách các trang, thật dễ dàng hiểu tại sao:
google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem -> ne.com/hw
^
|
current page
Để quay lại trang chính chỉ bằng cách sử dụng nút Quay lại sẽ cần thêm hai lần nhấn nữa, đưa bạn "quay lại" danh mục Phần cứng và cuối cùng là trang chính. Đối với các lập trình viên chúng tôi có vẻ quá rõ ràng về những gì đang xảy ra, nhưng điều đó khiến người dùng thường xuyên phải ngạc nhiên vì họ không nhận ra rằng trình duyệt không biết gì về cấu trúc phân cấp của bất kỳ trang web nào mà họ xuất hiện.
Sẽ thật tuyệt nếu các trình duyệt cho phép các nhà thiết kế trang web lập trình nút Quay lại để làm điều hiển nhiên (đưa bạn lên một cấp độ) thay vì bất cứ điều gì hiện tại?
Chỉnh sửa: Một người bình luận đã hỏi liệu trình duyệt có tải lại trang hay chỉ hiển thị trang ra khỏi bộ nhớ cache cục bộ.
Câu trả lơi con phụ thuộc vao nhiêu thư. Các nhà thiết kế trang web có thể chỉ định liệu trình duyệt có nên lưu trang vào bộ nhớ cache hay không. Đối với các trang được đặt là không được lưu trong bộ nhớ cache, trình duyệt sẽ tải lại trang từ máy chủ khi bạn nhấn Quay lại, như thể đây là lần đầu tiên bạn truy cập trang đó. Đối với các trang được lưu trong bộ nhớ cache, trình duyệt sẽ hiển thị nó ra khỏi bộ nhớ cache, nhanh hơn nhiều.
Tôi thích nghĩ về nó như là đưa ra lại yêu cầu cuối cùng của tôi. Nếu bạn thực hiện một GET đơn giản, nó có thể sẽ trả về giống như lần trước (trừ nội dung động). Nếu bạn đã thực hiện ĐĂNG, bạn sẽ gửi lại biểu mẫu (sau khi xác nhận) đến máy chủ.
Ý tưởng cơ bản là quay lại trang cuối cùng hoặc phân chia trang web hợp lý.
Nhìn vào Gmail, bạn sẽ thấy nếu bạn thực hiện tìm kiếm và nhấp vào một thư, sau đó nhấn nút quay lại, nó sẽ đưa bạn trở lại tìm kiếm mà bạn đã thực hiện.
Khi bạn nhấp vào nó trong hầu hết các trình duyệt, nó sẽ gửi lại yêu cầu http cuối cùng hoặc sẽ tải một bộ nhớ cache nếu trình duyệt lưu trữ các trang web.
Tôi nghĩ cách dễ nhất để giải thích điều này là bằng mã giả:
class Page:
String url, ...
Page previous, next # implements a doubly-linked list
class History:
Page current # current page
void back():
if current.previous == null:
return
current = current.previous
refresh()
void forward():
if current.next == null:
return
current = current.next
refresh()
void loadPage(Page newPage):
newPage.previous = current
current.next = newPage # remove all the future pages
current = current.next
display(current)
Là một devoloper, bạn nên đảm bảo rằng ứng dụng web của mình hoạt động bất kể trình duyệt xử lý nút Quay lại như thế nào :-) Nó có gửi lại yêu cầu không? Yêu cầu mới có giống với yêu cầu cũ hay nó khác biệt theo bất kỳ cách nào? Trình duyệt sẽ yêu cầu người dùng xác nhận ĐĂNG lại? Phần tử nào của trang sẽ được yêu cầu lại và phần tử nào được tải từ bộ nhớ cache? Trình duyệt có tôn trọng các tiêu đề kiểm soát bộ nhớ cache của tôi không?
Câu trả lời cho những câu hỏi này phụ thuộc vào kiểu dáng, phiên bản của trình duyệt và cài đặt của người dùng. Thiết kế phần mềm cho bạn để tất cả những điều này không còn quan trọng nữa.
Xin lỗi vì câu trả lời không trực tiếp lắm, nhưng có một số câu trả lời thẳng thắn ở đây rồi.
trình duyệt luôn lưu trữ các trang để ghi nhớ và khi chúng tôi nhấn nút quay lại, nó không gửi yêu cầu đến máy chủ cho trang trước đó thay vào đó nó chỉ thấy bộ nhớ cache của nó nơi lưu trữ các trang và nó tuân theo quy tắc LIFO, đó là lý do tại sao nó cung cấp cho chúng tôi trang đó đầu tiên khi nhấn nút quay lại mà chúng tôi đã mở ở trang cuối cùng
Trình duyệt tải trang được xem lần cuối trước trang hiện tại và sau đó chạy theo bất kỳ chuyển hướng nào có thể xảy ra?
Tôi dường như đã bỏ lỡ điểm của câu hỏi.