13

我注意到如果我通过按浏览器的后退按钮返回“提问”页面,会记住标题正文部分。

此功能在我测试的所有浏览器中都可用,但在我自己的项目中的表单中不存在。

我怎样才能接近这种效果?

更新

我仍然没有任何线索,但猜猜http标头或javascript启用了某种客户端缓存?

4

4 回答 4

6

它与页面的缓存属性有关。

1)如果允许浏览器缓存你的页面,它也会记住表单字段。

2)如果不允许缓存页面,它会忘记一切。

通常,动态生成的页面属于第 2 类,因此您看不到缓存。这确实是由 HTTP 标头(尤其是 Cache-Control 和 Last-Modified,或使用 E-Tags )决定的。有关您的浏览器如何确定缓存(非常重要!)的说明,请参见例如:

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

但最简单的方法是将表单放在静态 HTML 页面上,然后您的网络服务器将处理所有事情。

于 2010-05-03T16:00:27.670 回答
4

您需要找到一种机制来设置Cache-Control您所服务的页面上的参数。

您没有说明您是如何提供网页的。但是,这里有一个 ASP 页面示例,当使用后退按钮返回页面时会导致表单内容消失(这是您当前遇到的行为):

<% 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>    

注意前 3 行,做一些小的修改......

<% 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>    

现在输入字段内容被保留。这是您试图实现的行为。根据您的特定需求和服务器应用的默认值,您可能还需要设置其他参数。

有关 Cache-Control 的更多详细信息,请访问:

ASP 中的缓存控制。与微软的大多数事情一样,它只讨论 IE。

这篇关于缓存的教程很好地介绍了几种不同 Web 服务器的示例代码,包括 PHP。

w3.org是您真正需要学习的参考资料,尤其是关于 Cache-Control 的第 14.9 节。

获得您正在寻找的行为的关键是使用正确的缓存控制参数化服务页面。

于 2010-05-03T17:38:12.020 回答
1

虽然我不能给出太多建议,但“提问”页面的 http 标头如下所示:

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

我会将其与您自己的页面/表单进行比较,尤其是任何处理缓存和过期的标题。

于 2010-05-03T16:11:40.987 回答
0

没有魔法。只需尝试以下 HTML:

<?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>

在浏览器中打开它,输入一些文本,单击链接,然后单击后退按钮,它会记住该值。在 IE8、FireFox 3.6、Chrome 4 上测试并运行。

于 2010-05-03T15:10:38.060 回答