每月彙整: 2008 年 8 月

配置 Apache 为 XHTML 发送正确的 MIME 类型

2007 年 6 月 18 日

http://www.ibm.com/developerworks/cn/xml/x-tipapachexhtml/

本文将向您展示:如何配置 Apache 以便为支持可扩展超文本标记语言(Extensible Hypertext Markup Language,XHTML)的浏览器标记文档的媒体类型为 application/xhtml+xml,同时仍然向不支持该语言的浏览器(如 Microsoft® Internet Explorer®)发送 text/html。

当 Web 服务器向浏览器发送文档时,它会给文档加上一个响应报头作为前缀,如 清单 1 所示。此报头包含了用于告诉浏览器如何解释文档的元数据。元数据的一个最重要的部分是最后一行中的 Content-Type。它将告诉浏览器如何呈现内容。例如,浏览器用于显示 JPEG 和 GIF 的代码是不同的。最重要的是,很多浏览器用于显示 XHTML 和超文本标记语言(Hypertext Markup Language,HTML)的代码也是不同的。

清单 1. 一个典型的 HTTP 响应报头

                HTTP/1.1 200 OK
Date: Thu, 04 Jan 2007 19:39:13 GMT
Server: Apache/2
Last-Modified: Wed, 06 Sep 2006 11:19:37 GMT
ETag: "4dfce0-c4aa-26828440"
Accept-Ranges: bytes
Content-Length: 50346
Content-Style-Type: text/css
Content-Type: application/xhtml+xml

Web 服务器应该给 XHTML 文档加上媒体类型标记 application/xhtml+xml。识别此媒体类型的 Web 浏览器就会相应地将其以 strict 模式而不是 tag soup 模式运行。这使浏览器能更可靠地进行显示,对于级联样式表(Cascading Style Sheets,CSS)布局和基于文档的对象模型的 JavaScript ™ 程序,这一点尤为重要。事实上,在一些情况下同一文档能以两种不同的方式显示,取决于其处理模式是 tag soup 还是 strict。如果想要生成格式良好甚或是有效的 XHTML,则 strict 模式将会是您计划使用并希望使用的模式。

不支持 XHTML 的浏览器也能以 tag soup 模式处理格式良好的文档。结果并不完美,但可以满足一小部分使用很老的浏览器的用户需要。对于大部分使用不符合标准的 Internet Explorer 的用户来说,结果也还可以接受。但是,当前版本的 Internet Explorer(包括 6 和 7)无法识别 application/xhtml+xml 媒体类型。如果向 Internet Explorer 发送 application/xhtml+xml 文档,它将会反过来要求您保存文件,如 图 1 所示。
图 1. Internet Explorer 不知道如何处理 application/xhtml+xml
某些文件可能会损害您的计算机。如果下面的文件信息看起来可疑,或者您不完全信任其来源,请不要打开或保存此文件。文件名:a.xhtml

因此,处理 XHTML 时,要获得最大的兼容性,就需要向 Firefox、Safari、Opera 和其他符合标准的浏览器发送 application/xhtml+xml,而向 Internet Explorer 发送 text/html。在这两种情况下发送的是同一个文件。您只需在超文本传输协议(Hypertext Transfer Protocol,HTTP)的报头中更改文件的媒体类型标记即可。使用 Apache Web 服务器时,可在服务器配置文件或个人目录中的 .htaccess 文件中做此更改。

Apache 配置指令

根据默认,Apache 通过检查文件的扩展名来决定与每个文件一起发送的媒体类型。扩展名类型映射存储于 httpd/conf 目录(通常是类似 /usr/httpd/conf 或 /etc/httpd/conf 的目录)下的 mime.types 文件中。比如,清单 2 显示了 Apache 2.0 的 mime.types 文件的部分内容。

清单 2. Apache 的 mime.types

                # This file controls what Internet media types are sent to the client for
# given file extension(s).  Sending the correct media type to the client
# is important so they know how to handle the content of the file.
# Extra types can either be added here or by using an AddType directive
# in your config files. For more information about Internet media types,
# please read RFC 2045, 2046, 2047, 2048, and 2077.  The Internet media type
# registry is at <http://www.iana.org/assignments/media-types/>.

# MIME type                     Extensions
application/atom+xml            atom
application/mathematica
application/mathml+xml          mathml
application/msword              doc
application/octet-stream        bin dms lha lzh exe class so dll dmg
application/postscript          ai eps ps
application/rdf+xml             rdf
application/reginfo+xml
application/xhtml+xml           xhtml xht
application/xslt+xml            xslt
application/xml                 xml xsl
application/xml-dtd             dtd
application/xml-external-parsed-entity
application/zip                 zip
audio/mpeg                      mpga mp2 mp3
image/jpeg                      jpeg jpg jpe
image/naplps
image/png                       png
image/svg+xml                   svg
image/tiff                      tiff tif
text/html                       html htm
text/plain                      asc txt
text/sgml                       sgml sgm
text/xml
text/xml-external-parsed-entity
video/mpeg                      mpeg mpg mpe

一些更老的版本没有根据默认安装所有这些映射,并且可能事实上使用了一些十分有害的映射。尤其应该注意,对于原始 XML 文件使用 text/xml 而不是 application/xml 是一个常见的问题。

具有了这些默认的映射后,您所需要做的全部工作就是为 XHTML 文件加上 .xhtml 或 .xht 后缀,而不是 .html 后缀,之后,所有这类文件都将被作为 application/xhtml+xml 处理。这对于 Firefox、Opera 和 Safari 效果很好,但对于 Internet Explorer 却并非如此。您所需要的是一种方法,通过它可向 Internet Explorer 发送一种媒体类型而向所有其他浏览器发送另一种媒体类型。

浏览器嗅探

2007 年,可以放心假设所有非 Internet Explorer 的浏览器都能识别 application/xhtml+xml。(如果您确实希望支持很老的浏览器,则破解我下面提出的规则也很容易。)因此您就需要识别 Internet Explorer 的所有版本并将媒体类型更改为 text/html。幸运的是,Internet Explorer 在发送 HTTP 请求时可告知服务器浏览器的类型,如 清单 3 所示。

清单 3. Internet Explorer 的 HTTP 请求报头

                GET /test/a.xhtml HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, 
        application/msword, application/vnd.ms-powerpoint, */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
Host: www.xom.nu
Connection: Keep-Alive

关键在于 User-Agent 字段。虽然由于传统原因 Internet Explorer 在开始时感觉像是 Netscape,但 MSIE 字符串可将其识别为 Internet Explorer。所有版本的 Internet Explorer 在 User-Agent 字段中都包含了此字符串,而所有其他现代的浏览器都不具备此特征。

您需要配置服务器以便查看报头中的 User-Agent 字段,并向 Internet Explorer 发送 text/html,向所有其他浏览器发送 application/xhtml+xml。mod-rewrite 模块并不局限于重写 URL。它还能根据 User-Agent 更改 HTTP 响应报头。清单 4 展示了配置文件中需要放入的代码。

清单 4. 向 Internet Explorer 发送 text.html

                RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*MSIE.*
RewriteCond %{REQUEST_URI} \.xhtml$
RewriteRule .* - [T=text/html]

第一行会打开重写引擎。

第二行的第一个重写条件表明:下面的规则仅适用于 HTTP 请求报头中的 user-agent 字符串包含子字符串 MSIE 的情形。正则表达式 .*MSIE.* 实现了此功能。

第三行的第二个重写条件表明:下面的规则仅适用于浏览器请求的文件具有 .xhtml 扩展名的情形。常规的 .html 文件被作为普通的 text/html 提供给所有浏览器。

最后一行是实际的重写规则。此规则有点不太常见,因为重写并未真正更改 URL 中的任何东西。接下来,匹配整个 URL (.*) 但接着将其替换成它自己 (-)。然而,最后的 [T=text/html] 字段会把 Content-Type 报头更改为 text/html。如果同时匹配上述两个条件,则使用此规则。反之则不然。

安装规则

根据服务器设置的不同,此代码可能位于以下几个位置之一:

  • 主 httpd.conf 文件
  • httpd.conf 文件中的 VirtualHost 部分或单独的虚拟主机配置文件
  • XHTML 文件所在目录中的 .htaccess 文件

这些指导说明在 Apache 1.3 和 2.0 中应该都有效。如果您在 .htaccess 文件中使用这些规则,则似乎没什么作用,这时,确保对目录做出了如下设置以允许在主 httpd.conf 文件中进行覆盖:

<Directory /var/www/foo>
  AllowOverride FileInfo
</Directory>

Lynx

如果可以的话,您应该多支持一个不能识别 application/xhtml+xml 的浏览器:Lynx。Lynx 是一种文本模式浏览器,主要由自动化脚本和处理 shell 的 UNIX® 爱好者使用。它的市场份额很小,但是其独特的功能使它具有了足够的重要性,颇值得我们关注,但前提是不给其他用户造成不便。

幸运的是,所有 Lynx 的 user-agent 字符串都以词 “Lynx” 开头,而其他的 user-agent 字符串都不包含该词。因此,为支持 Lynx,您所要做的全部工作就是将该字符串添加到重写条件正则表达式中,如 清单 5 所示:

清单 5. 向 Lynx 发送 text.html

                RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ((.*MSIE.*)|(Lynx.*))
RewriteCond %{REQUEST_URI} \.xhtml$

RewriteRule .* - [T=text/html]

第二行中的新正则表达式匹配任何包含 MSIE 或以 Lynx 开头的字符串。如果发现另一个浏览器不能很好地处理 application/xhtml+xml,则可向其 user-agent 字符串中做类似的添加。

伪装成 Internet Explorer

一些更老版本的 Opera 和 Safari 通过在其 user-agent 字符串中包含 MSIE 将自己伪装成 Internet Explorer。但是您无需为此忧虑,原因如下:

  • 几乎已经没什么人使用那些版本了。
  • 与一些更新版本的 Safari 和 Opera 不同,那些较老的版本总的说来处理 text/html 比处理 application/xhtml+xml 的效果好。

要了解更精确的目标信息,请参阅 参考资料 中到 user-agent 字符串完整列表的链接和可供您参考的 application/xhtml+xml 浏览器支持。

结束语

XHTML 是 Web 的未来。但是,像很多其他重要的技术一样,它的采用由于得不到 Microsoft 浏览器的有力支持而受到阻碍。如本文所展示的那样,没有理由等待 Microsoft。您可以轻松地向非 Microsoft 的浏览器提供 XHTML,同时仍然告诉 Internet Explorer 将它作为 tag soup 处理。现代浏览器的访客和页面作者将完全受益于 XHTML,而受 Internet Explorer 牵制的访客则仍然可获得大部分内容。适当地设置 Multipurpose Internet Mail Extensions(MIME)媒体类型并不是向旧的浏览器提供 XHTML 所能采用的惟一途径,但它却是往正确方向上迈出的一大步。

参考资料

学习

WordPress 2.7 新特征预览

WordPress 新版本的开发进度越来越快了,可能还有好多博客还没有来得及升级到 WordPress 2.6 版 Features Planned for WordPress 2.7 这篇文章就已经开始向我们介绍 WordPress 2.7 新的特性。以下为文章的译文:
WordPress 2.6 仅仅发布了两个星期,但是已经有很多关于 WordPress 下一个版本的讨论。 WordPress 2.7 将会包含一些令人兴奋的特征,这些功能既来自原有的开发计划也有来自 IRC 上的讨论,新版本可能会在2008年底放出。

下面是一些将会在 WordPress 2.7 中出现的新的特征:

  • Comments API – 对我来说,这是最让人兴奋的功能, 它将允许开发者创建离线的留言管理应用,也就是说我们能够以此开发出一些桌面版的客户端,可以对留言进行编辑、审核、回复、删除等操作。
  • Keyboard shortcuts for comment moderation – 此功能将帮助用户迅速处理留言,用户可以自定义快捷方式。比如,按 Ctrl + S 删除垃评论,按下 Ctrl  + A 审核留言等。
  • Theme Update API – WordPress 2.5 以后的版本已经在插件管理上变得很容易,你可以自动收到插件更新提示并自动更新到最新版本。 新版的 WordPress 将会弥补主题和插件上的差距,届时我们将会看到主题更新甚至一键升级。
  • One Click Plugin Installs – 一键安装插件将使插件安装变的更加容易。这个功能通过 One Click Plugin 这个插件完成,而这个插件正是去年插件大赛的冠军。
  • WordPress core updates – 这是很多用户期待已久的应用,通过更新内核你可以轻松的升级 WordPress 到最新版本,这和 WordPress Automatic Upgrade 这个插件完成一样的功能。
  • Default Sitemaps – WordPress 2.7 将内置网站地图生成器, 可以为你的博客自动生成 Google XML sitemaps 。 Google Sitemaps Generator 目前是实现这一功能的最好选择,不过到时候这个优秀的插件可能就要退休了。
  • Admin Panel Comment Replies – 这个插件将帮助你在控制台完成留言回复。当然现在已经有很多这方面的插件,例如 WP AJax Edit CommentsBetter Comments ManagerAbsolute Comments
  • Comment Threading – 这个功能使用户直接回复留言者的留言, WordPress 现在已经有能力在不修改数据库的前提下实现留言回复。这个功能也可以通过 Brian’s Threaded Comments 插件完成。
  • Subscribe to Comments –  WordPress 团队的开发计划中还包括了一个允许订阅评论的开发计划,但是是否实现已久还在讨论中,所以可能不会出现在 WordPress 2.7 中。 当然 Subscribe to Comments 也可以完成这项任务。
  • Widgets for Dashboard and Write Box – 这项应用允许用户自由安排在控制面板和编辑器中的 widgets 以便提升效率。
  • Batch Editing of Posts – 用户可以对他们的文章进行群编辑。不过这方面的应用现在还没有一个比较详细的介绍。

WordPress 2.7 发布以后将会有很多优秀的插件退休,因为它们的功能将被直接添加到 WordPress 内核中,事实上我们本来应该更加注重 WordPress 自身的功能并让博客变得更加容易。更多的功能和新的特征请查阅 WordPress codex

QQ for Linux

腾讯公司正式发布Linux版QQ,这个特殊版本的QQ支持最新的一些Linux发行版本,包括但不仅限于以下版本:SuSE 9 或更高,Ubuntu 7.10或更高,Fedora Core 8或更高。QQ for Linux也可以在其他符合软硬件环境的Linux发行版本上运行,但是不能保证运行完全没有问题。

QQ for Linux基本界面和风格和window版本都是相同的,但是QQ for Linux目前只能提供最基本的IM聊天功能。

Linux操作系统是Windows操作平台以外最重要的个人操作系统。作为免费的开源操作系统,Linux一直以系统开放、功能强大而得到众多开发者的青睐,并成为众多企业级应用的主流操作系统之一。

百度日本域名Baidu.co.jp正式启用 任命井上俊一为百度日本总裁

百度日本分公司近日正式启用了Baidu.co.jp域名与Baidu.jp 共同提供搜索服务(中国大陆暂无法访问)。
在此之前,百度日本曾因Baidu.co.jp域名问题与该域名之前的所有者交涉,随后获得了日本政府获胜裁定,但由于一些原因,裁定后就一直没有了消 息。据记者获悉,百度日本自2008年7月10号正式获得了Baidu.co.jp域名的非物质财产所有权,自 7月31日正式启用。
百度今日宣布任命井上俊一为百度日本总裁,此任命从宣布之日起正式生效。
“井上先生在日本具有长达10年从事互联网搜索业务的经历,不仅深刻了解日本互联网和搜索引擎市场的发展状况,而且拥有广阔的国际化视野和丰富的国际化企业管理经验。他的技术和产品经验,必将为百度日本带来新的活力。”百度董事会主席兼首席执行官李彦宏表示。

井上先生1998年起在著名搜索引擎Excite日本担任首席技术官,2004年加入雅虎日本,历任搜索事业部部长、主管搜索业务的副总裁,负责雅虎日本所有的搜索产品,为雅虎在日本市场上成为市场占有率最高的搜索引擎做出了重要贡献。

“作为日本互联网搜索产业的领军人物,井上先生的加盟是百度日本业务发展迄今为止最重要的里程碑事件,极大增强了百度在日本市场上吸引更多一 流人才、提供更好的产品与服务的信心,也必将促进百度日本各项业务得到更加迅猛的发展。”百度负责国际业务的市场和商务拓展副总裁任旭阳表示。

此次Baidu.co.jp域名的正式启用更符合日本国民的日常习惯,将极大的对百度在日本市场的推进产生积极影响。日前刚有消息称百度日本总裁人选将浮出水面。记者对百度日本近日的诸多动作将保持高度关注。

Source Forge 宣布2008年度社区选择奖

SourceForge宣布了2008年度社区选择奖
最可能改变世界的项目:Linux
最佳项目、最佳企业项目和最佳教育项目皆为OpenOffice.org

最有可能成为下个10亿美元收购项目:phpMyAdmin
最佳多媒体项目:VLC
最佳游戏项目:XBMC
最佳新项目:Magento
最有可能被起诉侵犯专利的项目:Wine Is Not an Emulator
最有可能让用户被过时的行业协会为保护死亡的商业模式起诉的项目:eMule
最佳系统管理工具:phpMyAdmin
最佳开发者工具:Notepad++

搜索Cuil开张首日瘫痪 搜索界三分天下

谷歌公司几名前员工28日推出新搜索引擎Cuil,对抗老东家谷歌。Cuil创始成员说,Cuil在搜索深度和广度上均超过谷歌。 但一些网络专家对Cuil的前景持谨慎态度。“Cuil”一词源于古爱尔兰语,发音同英文单词“cool”,意为“求知”。Cuil黑色主页上说,它覆盖 的网页超过1200亿个。Cuil公司设在美国加利福尼亚州门洛帕克市,由风险资本投资者筹资3300万美元组建。

首日“瘫痪”
Cuil“开张”第一天“生意火暴”,吸引了众多网民前来“捧场”。28日上线当天由于访问量过多,导致Cuil服务器一度陷入瘫痪状态,一部分访问者输入关键词搜索后,网页上显示“访问量过大,暂无结果”的字样。

四大天王

Cuil由Googlebase前首席技术官安娜·帕特森(上图)与她的丈夫科斯泰罗联手创办,他们的两位亲密助手拉塞尔·帕威尔和路易斯·蒙尼尔同样也曾是谷歌的资深员工。

帕特森来头最大,她在此前曾一手建立起功能强劲的搜索引擎Recall,并在2004年被谷歌连人带网站高价收购。2006年,更喜欢独自高飞的帕特森辞职,并开始创建Cuil。而协助IBM构建新型搜索引擎WebFountain的丈夫科斯泰罗也成为她最有力的帮手。

拉塞尔·帕威尔是大型搜索目录TeraGoogle前工程师。路易斯·蒙尼尔是早期搜索引擎AltaVista的首席技术官,曾是协助构建eBay搜索引擎的业界老将。

三分天下

目前的搜索界仍处于“三分天下”的状况。在英国,谷歌6月占有的份额为82%,雅虎和微软分别为5%和4%。在美国,谷歌5月份拥有62%的份额,雅虎和 微软分别以21%和8.5%的份额紧随其后。Cuil还将面临eoma、Vivisimo、Snap等竞争对手的挑战。

酷点

数据库

Cuil索引数据库包含1200亿个网页,至少3倍于谷歌。按照帕特森的说法,谷歌常常忽略访问量小或默默无名的网页。

Google表示能浏览1万亿个网页链接,但考虑到部分网页内容相似或影响搜索结果质量,因而没有把它们全部编入索引,仍自称拥有最大的索引数据库。

搜索显示

Cuil的搜索结果以更杂志化的方式排列,结果页面上将显示更多图片和工具条,用户可以点击工具条了解更多与搜索关键字相关的内容。搜索排名方式专注于分析网页内容。

Google显示传统的条块状文字链接,但提供新闻、视频、本地、图片等专门搜索服务,以网页受欢迎程度进行排名。

隐私权

Cuil称最大特色在于,它希望通过承诺不保留用户搜索历史和上网行为的信息来吸引用户。

Google以及其他搜索引擎都保留用户资料,这些引起了隐私权保护机构的强烈不满。

中文服务

Cuil开通初期阶段,将主要搜索和分析美国英语网页。今年晚些时候将使欧洲各大语种用户也能用上Cuil服务。目前没有中文网页。

Google中文页面新增生活搜索服务,可以在房屋、工作、餐饮、票务和电影等方面进行专门搜寻。