2010-05-01 35 views
13

tôi đã nhận thấy rằng Tiêu đề hoặc Body phần được nhớ đến nếu tôi quay trở lại Hỏi Câu hỏi trang bằng cách nhấn Trở lại nút của trình duyệt của tôi.Biểu mẫu của SO ghi nhớ các giá trị đầu vào trước đó như thế nào?

Tính năng này có sẵn trong tất cả các trình duyệt tôi đã thử nghiệm, nhưng không tồn tại đối với các biểu mẫu trong các dự án của riêng tôi.

Làm cách nào để tiếp cận hiệu ứng đó?

CẬP NHẬT

tôi vẫn không có bất cứ mối nào, nhưng đoán nó rằng một số loại bộ nhớ cache client được kích hoạt bởi http header hoặc javascript?

+8

Tính năng này thường được trình duyệt của bạn xử lý. –

+7

Vậy tại sao tính năng này không tồn tại cho dự án của riêng tôi trong cùng một trình duyệt? Một cái gì đó khác nhau phải xảy ra theo mục đích. – user198729

+0

mọi người có thể cho bạn biết cách định cấu hình máy chủ của bạn để cung cấp tiêu đề http liên quan đến bộ nhớ cache phù hợp, nếu bạn đưa thông tin vào phần mềm máy chủ đang phục vụ các trang. Mỗi máy chủ có cấu hình riêng cho những thứ đó .... – vkraemer

Trả lời

6

Nó phải làm với các thuộc tính bộ nhớ đệm của trang của bạn.

1) Nếu trình duyệt được phép lưu vào bộ nhớ cache trang của bạn, nó cũng sẽ ghi nhớ các trường biểu mẫu.

2) Nếu không được phép lưu trang, nó sẽ quên mọi thứ.

Thông thường, các trang được tạo động rơi vào danh mục 2, do đó bạn không thấy bộ nhớ đệm. Điều này thực sự được xác định bởi tiêu đề HTTP (đặc biệt là Cache-Control và Last-Modified, hoặc sử dụng E-Tags ). Đối với một lời giải thích về cách trình duyệt của bạn xác định bộ nhớ đệm (! Không tầm thường), xem ví dụ:

http://www.webscalingblog.com/performance/caching-http-headers-last-modified-and-etag.html

Nhưng dễ nhất là đặt các hình thức trên một trang HTML tĩnh, sau đó máy chủ web của bạn sẽ xử lý tất cả mọi thứ.

+0

Tôi không thể đặt biểu mẫu trên trang HTML tĩnh, và tôi không Không biết tại sao 'cache-control' được đặt tự động thành' \t không lưu trữ, không có bộ nhớ cache, phải xác nhận lại, kiểm tra sau = 0, kiểm tra trước = 0' và 'Pragma' được đặt thành' không- bộ nhớ cache'. – user198729

+0

bộ nhớ cache kiểm soát được đặt thành các giá trị đó cho các trang động vì (thường) bạn muốn người dùng xem một trang mới được tạo mỗi lần, để đảm bảo rằng anh ta thấy thông tin mới nhất. Nếu không, bạn có thể cung cấp một tiêu đề Cache-Control khác từ tập lệnh của bạn. Để cụ thể hơn, tôi cần biết ngôn ngữ bạn sử dụng để tạo trang. – wump

+0

@wump: có thông số chuẩn nào về cách trình duyệt web nên điền trước các giá trị đầu vào không? Hay các trình duyệt đang thực hiện điều này "như họ cảm thấy"? –

0

Không có phép thuật. Chỉ cần thử HTML sau:

<?xml version="1.0"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Test</title> 
</head> 
<body> 
    <input type="text" name="title" value="" /> 
    <a href="http://www.google.com">Google</a> 
</body> 
</html> 

Mở nó trong trình duyệt, nhập một số văn bản, nhấp vào liên kết và sau đó nút Quay lại và nó sẽ nhớ giá trị. Đã thử nghiệm và làm việc trên IE8, FireFox 3.6, Chrome 4.

+2

Tôi không thấy bất cứ điều gì đặc biệt trong đó, bạn có thể giải thích tại sao nó hoạt động không? – user198729

+1

Điều này có thể hoạt động vì nó được xem mà không có máy chủ web, trên hệ thống tệp cục bộ. –

+0

@ user198729: '" Nó có liên quan đến các thuộc tính của bộ đệm trong trang của bạn. "' Thấy câu trả lời của 'wump' (câu trả lời hiện đang được chấp nhận) –

1

Trong khi tôi có thể không thực sự cung cấp cho nhiều adivce, các tiêu đề http của trang "Ask Câu hỏi" trông như thế này:

HTTP/1.1 200 OK 
Cache-Control: private 
Content-Type: text/html; charset=utf-8 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Server: Microsoft-IIS/7.5 
Set-Cookie: [EDITED AWAY} 
Date: Mon, 03 May 2010 16:04:44 GMT 
Content-Length: 4800 

tôi muốn so sánh với các trang riêng/hình thức của bạn, đặc biệt là bất kỳ tiêu đề xử lý bộ nhớ đệm và hết hạn.

+0

Tôi không đặt bất kỳ thông tin tiêu đề nào, dường như máy chủ web của tôi tự động thêm chính sách bộ nhớ cache cho tôi, đó không phải là những gì tôi mong muốn. – user198729

4

Bạn cần tìm một cơ chế để đặt thông số Cache-Control trên các trang bạn phân phối.

Bạn không cho biết cách bạn đang phân phát các trang web. Nhưng, đây là một ví dụ về một trang ASP làm cho nội dung hình thức biến mất khi trở về một trang bằng cách sử dụng nút quay lại (đây là hành vi mà bạn đang trải qua):

<% Response.CacheControl = "no-cache" %>  
<% Response.AddHeader "Pragma", "no-cache" %>  
<% Response.Expires = -1 %>  
<HTML>  
<HEAD>  
<TITLE>Test page</TITLE>  
</HEAD>  
<BODY>  
Type some text into this box, click SO followed by the BACK button: 
<input type="text" name="title" value="" /> 
<a href="http://www.stackoverflow.com">SO</a>  
<p>  
When you get back the text you typed will be gone. 
</BODY>  
</HTML>  

Note top 3 dòng, thực hiện một vài sửa đổi nhỏ ...

<% Response.CacheControl = "private" %>  
<HTML>  
<HEAD>  
<TITLE>Test page</TITLE>  
</HEAD>  
<BODY>  
Type some text into this box, click SO followed by the BACK button: 
<input type="text" name="title" value="" /> 
<a href="http://www.stackoverflow.com">SO</a>  
<p>  
When you get back the text you typed will still be there 
</BODY>  
</HTML>  

Bây giờ nội dung của trường nhập được duy trì. Đây là hành vi bạn đang cố gắng đạt được. Có có thể là thông số bổ sung bạn cần đặt quá tùy thuộc vào nhu cầu cụ thể của bạn và các giá trị mặc định được máy chủ của bạn áp dụng.

Chi tiết bổ sung về Bộ nhớ cache có sẵn tại:

Cache Control in ASP. Giống như hầu hết mọi thứ của Microsoft, chỉ có thảo luận về IE.

Hướng dẫn này trên Caching cung cấp một giới thiệu tốt với mã ví dụ cho một số máy chủ web khác nhau, bao gồm PHP.

w3.org là tài liệu tham khảo bạn thực sự cần nghiên cứu, đặc biệt là phần 14.9 về Kiểm soát bộ nhớ cache.

Chìa khóa để nhận được hành vi bạn đang tìm kiếm đang ở trong các trang phân phối với tham số điều khiển bộ nhớ cache chính xác.

Các vấn đề liên quan