Html 那么';s窗体是否还记得以前的输入值?

Html 那么';s窗体是否还记得以前的输入值?,html,forms,webbrowser-control,browser-cache,Html,Forms,Webbrowser Control,Browser Cache,我注意到,如果我通过按浏览器的后退按钮返回到提问页面,则会记住标题或正文部分 此功能在我测试的所有浏览器中都可用,但在我自己的项目中的表单中不存在 我怎样才能达到这种效果 更新 我仍然没有任何线索,但我猜某种由http头或javascript启用的客户端缓存是没有魔力的。只需尝试以下HTML: <?xml version="1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://ww

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

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

我怎样才能达到这种效果

更新


我仍然没有任何线索,但我猜某种由http头或javascript启用的客户端缓存是没有魔力的。只需尝试以下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上测试和使用。

这与页面的缓存属性有关

1) 如果允许浏览器缓存页面,它还将记住表单字段

2) 如果不允许缓存页面,它将忘记所有内容

通常,动态生成的页面属于类别2,因此您看不到缓存。 这确实是由HTTP头(尤其是缓存控制和上次修改)或使用E标记确定的 )。有关浏览器如何确定缓存(非平凡!)的说明,请参见示例:


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

虽然我不能给出太多建议,“提问”页面的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

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

您需要找到一种机制来设置所服务页面上的
缓存控制参数

您没有指明如何为网页提供服务。但是,下面是一个ASP页面的示例 使用“后退”按钮返回页面时,会导致表单内容消失(这是 您当前正在经历的行为):


测试页
在此框中键入一些文本,然后单击“上一步”按钮:

当你回来时,你键入的文本将消失。
注意上面的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>    

测试页
在此框中键入一些文本,然后单击“上一步”按钮:

当你回来时,你键入的文本仍将在那里
现在,输入字段内容被保留。 这就是你想要达到的行为。那里 根据您的具体情况,可能还需要设置其他参数 需要和服务器应用的默认值

有关缓存控制的更多详细信息,请访问:

。与微软的大多数产品一样,它只是 讨论IE

关于的本教程提供了几个不同web服务器的示例代码,包括PHP

你的推荐信是什么 确实需要学习,特别是关于缓存控制的第14.9节

获得成功的关键
您要查找的行为是在使用正确的缓存控件参数化服务页面中。

此功能通常由您的浏览器处理。那么为什么我自己的项目在同一浏览器中不存在此功能?不同的目的一定会发生。如果您在提供页面服务的服务器软件中包含相关信息,人们可能会告诉您如何配置服务器以提供正确的缓存相关http头。对于这类事情,每台服务器都有自己的配置……如果您想完全不依赖于缓存,即让表单数据保存下来,甚至可以转到另一个页面,然后再转到您的页面,一旦触发某个输入字段的onchange事件,就可以将数据存储在cookie或服务器端会话中。加载表单时,您只需将默认值设置为存储的值。我看不出表单有什么特殊之处,您能解释一下它为什么工作吗?这可能是因为它是在本地文件系统上没有Web服务器的情况下查看的。@user198729:
“它与页面的缓存属性有关。”
请参阅
wump
的答案(目前接受的答案)我无法将表单放在静态HTML页面上,我不知道为什么
缓存控件
会自动设置为“无存储、无缓存、必须重新验证、后检查=0、预检查=0
,并且
Pragma`设置为
无缓存
。缓存控件设置为动态页面的那些值,因为(通常)您希望用户每次都能看到一个新生成的页面,以确保他看到最新的信息。如果没有,您可以从脚本中提供一个不同的缓存控件头。更具体地说,我需要知道生成页面所使用的语言。@wump:是否有关于web浏览器如何预填充输入值的标准规范?或者我没有设置任何标题信息,似乎我的web服务器自动为我添加了缓存策略,这不是我想要的。
<% 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>