在HttpServletResponse和Html标签中设置标头是一样的吗?

时间:2011-06-10 09:06:25

标签: java

HttpServletResponse中,setHeader()方法的调用与我们在html <head>代码中设置的值相同吗?

Java代码:

response.setHeader("Pragma", "no-cache");

response.setIntHeader("Expires", -1);

HTML:

<HTML><HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
</HEAD><BODY>
</BODY>
</HTML>

它们都是一样的吗?

2 个答案:

答案 0 :(得分:5)

没有

与HTML文档中的META标记不同,HttpServletResponse方法设置的HTTP响应标头可以由网络中的任何节点(客户端和服务器之间存在的节点)进行解释和操作。通常这些是代理,它们不会对HTML文档的内容感到烦恼。这些元素可以作用于这些头的原因是HTTP响应头不仅适用于客户端(浏览器),还适用于任何中间人; HTTP规范允许中间人解释标题。

如果您希望网络中的所有元素都遵循您打算设置的缓存标头(在HTML文档中),则指定HTTP响应标头(使用HttpServletResponse对象)。所有中间人都应遵守这些标题。

只有浏览器倾向于对META标记起作用,因为它们只解析HTML文档;换句话说,META标签将确定浏览器本地缓存的文档到期设置,而不是代理缓存。

相关资源

  1. Caching Tutorial for Web Authors and Webmasters。请参阅HTML Meta Tags vs. HTTP Headers
  2. 部分
  3. Caching in HTTP。直接来自HTTP 1.1规范。此处指定了客户端,源服务器和中介的行为。
  4. Meta data in the HTML 4.01 Specification。 HTML规范明确指出 HTTP服务器可能使用http-equiv属性指定的属性名称在HTTP响应中创建[RFC822]样式的标头。服务器似乎不遵守这一点,因为“可能”一词表示这是一个可选功能。

答案 1 :(得分:1)

不,

HTTP标头是RFC 2616标头,因此当客户端从服务器获得响应时,它会首先转换这些HTTP响应标头。

HTML数据只是HTTP消息中的enity body,只有重新解释器(例如浏览器)才能翻译它。