如何在Google Chrome上更改接受标头?

时间:2013-09-18 10:29:33

标签: php header xhtml mime-types

如果我向浏览器发送无效(根据XHTML标准)标记,我想看到一个错误。我使用google chrome作为浏览器,apache作为服务器,php作为脚本语言。我用这样的行创建了一个脚本:

header('Content-type:  application/xhtml+xml');

$content = <<< XHTML
<!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">
 <head>
   <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
   <title>XHTML</title>
 </head>
 <BODY>
   <P>Lorem ipsum dolor sit amet...</P>
 </BODY>
</html>
XHTML;

echo $content;

由于大写字母BODY,它应该是不正确的。 但是我得到了正确的结果,因为我看到google chrome接受了这样的mime-types:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

所以它将结果解释为text/html,一切都很好。

我想让这个文件无效。如何从text/html的已接受标头中删除google chrome?或者我错了什么?

UPD 当我删除关闭BODY标记时,我可以看到错误。似乎浏览器不关心这样的小错误。

2 个答案:

答案 0 :(得分:3)

你误解了这个问题。

  • accept标头告诉服务器HTML和XHTML同样是首选。
  • 您的脚本完全忽略接受标头并发送XHTML内容类型
  • XML解析器不会在格式正确的文档上抛出解析错误,即使它们无效
  • 当前的浏览器(据我所知,我有一段时间没有尝试过)会回到HTML解析器,如果他们得到格式不正确的XHTML(因为告诉最终用户页面作者做了类型是,99/100次,无益)。

如果要检测有效性错误,请使用validator(用于检测它们的工具),而不是浏览器(用于呈现网页并从作者错误中恢复的工具)。

答案 1 :(得分:0)

  

所以它将结果解释为text / html,一切都很好。

     

我想让这个文件无效。我如何从google chrome中接受的标题中删除text / html?或者我错了什么?

虽然浏览器会在Accept标题中发送多种内容类型,但服务器仍然可以在响应中选择其中一种。

这是通过在响应中设置Content-Type标题(正如您所做)

来完成的
header('Content-Type: application/xhtml+xml');

这告诉浏览器响应是XHTML文档。您没有机会影响浏览器验证过程。

似乎chrome过于宽容并接受大写的<BODY>