已将 HTTP 头输出到客户端浏览器。任何对 HTTP 头的修改都必须在输出页内容之前进行

2010年07月02日 01:35 by:lao8

修改asp代码时发生以下错误提示:

  1. Response 对象 错误 'ASP 0156 : 80004005'
  2. HTTP 头错误
  3. .....
  4. 已将 HTTP 头输出到客户端浏览器。任何对 HTTP 头的修改都必须在输出页内容之前进行。

为了防止用户点浏览器上的后退按钮而重复提交评论,我在提交的asp页面上加入了以下代码:

  1. <%
  2. Response.Buffer=false
  3. Response.Expires=0
  4. Response.ExpiresAbsolute = Now() - 1
  5. Response.AddHeader "Pragma","No-Cache"
  6. Response.AddHeader "Cache-Control","Private"
  7. Response.CacheControl = "No-Cache"
  8. %>

结果就出现了“Response 对象 错误 'ASP 0156 : 80004005' ”,“已将 HTTP 头输出到客户端浏览器。任何对 HTTP 头的修改都必须在输出页内容之前进行。”这样的错误提示,当然也提示错误所在的行,后来经排查发现是因为设置了Response.Buffer=false ,但是在<html>标签后有response.cookies语句从而导致了程序冲突。

出现以上错误的解决方法是:把要写入cookes的语句移到html标签前面执行。

例如:

  1. <%
  2. @LANGUAGE="VBSCRIPT" CODEPAGE="936"
  3.  Response.Buffer=false
  4.  Response.Expires=0
  5.  Response.ExpiresAbsolute = Now() - 1
  6.  Response.AddHeader "Pragma","No-Cache"
  7.  Response.AddHeader "Cache-Control","Private"
  8.  Response.CacheControl = "No-Cache"
  9.  response.Charset= "gb2312"
  10. response.cookies("test") = "test"  '把response.cookies在html代码之前执行就不会出错啦
  11. %>
  12. <html>
  13. <head><title>测试</title></head>
  14. <body>
  15. 这样就不会出错啦<br>
  16. 如果你非要把response.cookies在这里执行那么就改为Response.Buffer=true
  17. </body>
  18. </html>