English 中文(简体)
使用Content: application/xhtml+xml提供网页会出现哪些问题?
原标题:
  • 时间:2008-12-09 00:03:20
  •  标签:

最近开始,我的一些新网页(XHTML 1.1)被设置为对请求头Accept进行正则表达式,并在用户代理接受XML的情况下发送正确的HTTP响应头(Firefox和Safari支持)。

IE(或任何其他不接受它的浏览器)只会收到纯文本/HTML内容类型。

谷歌机器人(或其他任何搜索机器人)会有任何问题吗?是否存在我已经检查过的任何负面影响?您认为这个头部嗅探器对性能会产生很大影响吗?

最佳回答

我使用内容协商来在application/xhtml+xmltext/html之间进行切换,就像您描述的那样,没有注意到搜索机器人的任何问题。严格来说,您应该考虑接受标头中的q值,该值指示用户代理对每个内容类型的偏好。如果用户代理更喜欢接受text/html但愿意接受application/xhtml+xml作为备选,则为了最大安全性,您应该将页面作为text/html提供。

问题回答

内容协商(以及向不同的用户代理提供不同的内容/头文件)的一个问题是代理服务器。考虑以下情况;我在Netscape 4时代遇到过这个问题,并一直对服务器端探测感到害羞。

用户A使用Firefox下载您的页面,并获得XHTML/XML内容类型。用户的ISP在用户和您的站点之间有代理服务器,因此该页面现在被缓存。

用户B与同一ISP,使用Internet Explorer请求您的页面。请求先到达代理,代理说“嘿,我有那个页面,给你,格式为application/xhtml+xml”。用户B被提示下载该文件(因为IE会下载任何作为application/xhtml+xml发送的内容)。

您可以通过使用“变量头”解决此特定问题,如本文所述的 456 Berea Street 文章。我也假设代理服务器对于自动检测这些东西已经变得更加智能。

这里是HTML/XHTML中“CF”开始潜入的地方。当您使用内容协商向一组用户代理提供application/xhtml+xml,并向另一组用户代理提供text/html时,您依赖于服务器和用户之间的所有代理都表现良好。

即使全世界的代理服务器都聪明到可以识别Vary标头(实际上它们并不能),您仍然必须应对全球的计算机管理员。世界上有很多聪明、有才能和专注的IT专业人员。但也有更多不那么聪明的人,他们整天双击安装程序,认为“互联网”就是他们菜单中那个蓝色的E。配置不当的代理仍可能不正确地缓存页面和标头,让您运气不佳。

唯一真正的问题是,如果您的页面包含无效代码,浏览器将显示xml解析错误,而在text / html中,它们至少会显示可查看的内容。

除非您想嵌入SVG或正在对页面进行XML处理,否则发送XML实际上没有任何好处。

问题是你需要将标记限制为 HTML 和 XHTML 的子集。

  • You can t use XHTML features (namespaces, self-closing syntax on all elements), because they will break in HTML (e.g. <script/> is unclosed to text/html parser and will kill document up to next </script>).
  • You can t use XML serializer, because it could break text/html mode (may use XML-only features mentioned in previous point, may add tagname prefixes (PHP DOM sometimes does <default:h1>). <script> is CDATA in HTML, but XML serializer may output <script>if (a &amp;&amp; b)</script>).
  • You can t use HTML s compact syntax (implied tags, optional quotes), because it won t parse as XML.
  • It s risky to use use HTML tools (including most template engines), because they don t care about well-formedness (a single unescaped & in href or <br> will completely break XML, and make your site appear to work only in IE!)

我已经测试了我基于 XML 的网站的索引。即使我使用了 application/xml MIME 类型,它也被索引了,但它似乎被解析为 HTML(谷歌没有索引在 <[CDATA[ ]]> 部分中的文本)。

由于IE不支持xhtml作为application/xhtml+xml,获得跨浏览器支持的唯一方法是使用内容协商。根据Web Devout的说法,由于通配符的误用,内容协商很难,其中Web浏览器声称支持存在的每种内容类型! Safari和Konquer支持xhtml,但仅通过通配符暗示此支持,而IE不支持此支持,但也暗示支持。

W3C建议只向HTTP Accept头文件明确声明支持的浏览器发送xhtml,并忽略那些没有明确声明支持的浏览器。但请注意,头文件并不总是可靠的,这已知会导致缓存问题。即使您可以让这个工作,维护两个相似但不同版本仍会很麻烦。

鉴于所有这些问题,当你的工具和库允许时,我支持放弃使用xhtml。





相关问题
热门标签