Acid2が壊れていた件
著
今週は、IE8の内部ビルドがAcid2がパスしたとのニュースで盛り上がったわけですが。
- IEBlog : Internet Explorer 8 and Acid2: A Milestone
- IE 8: On the Path to Web Standards Compliance - ACID 2 Test Pass Complete
ところが実は、そのAcid2テスト自体が有効に機能する状態にはなかったとかいう件。齋藤さんがIE 8 - Acid2 testで言及されていましたが、その後The Web Standards Projectにおいてどこがどうおかしくて不調だったのか調べてみると楽しいでしょう
と書かれていたのに釣られ、ちょっと書いておきます。
僕自身はWeb Standards Project(WaSP)の一員でありながらサイトの運用にコミットしているわけではないのだけど、伝え聞いた話によれば、今回発生していた事象の原因はWordPressにある模様。
ブラウザがリクエストしたリソースがWebサーバ上に存在しなかった際、一般的には404という「Not Found」を意味するステータスコードをレスポンス・ヘッダの中で指定します。ところが、WordPressを利用していて、キャッシュ機能を有効にしていると、たとえ存在しないリソースへのリクエストであったとしても、ステータスコードにリクエスト成功を意味する200が指定される場合があるらしいのです(あくまでも伝聞だし、WordPressに詳しいわけでもないので断言はしないでおく)。そうなってしまうと、Acid2: The Guided TourのRow 4-5で解説されている
<object data="http://www.webstandards.org/404/" type="text/html">
このobject要素が指定するオブジェクトデータが実在することになってしまい、つまりAcid2において意図されたフォールバック機能が働かず、子要素の
<object type="image/png" data="data:image/png;...">ERROR</object>
が解釈/表示されないことになってしまうという。現在は既にWordPressの設定変更(/404/はキャッシュさせないようにする)は終わっていて、以後この問題は発生していないっぽい。
Bug 289480 – Mozilla doesn't pass the acid2 (acid 2) testにあるコメント(#170)によれば、少なくとも12月18日時点では問題が無かったとのこと。そして冒頭リンクしたIEBlogの記事が公開されたのは19日であり、その中でAcid2を「先週」パスしたとある(Channel9のインタビュー動画でもChrisは先週と発言している)から、画面キャプチャが取得されたのは12月10〜14日のあいだのハズ。これらの情報を基に考えるなら、Acid2が壊れていたことが発覚したからといって、IE8がAcid2をパスした際の画面キャプチャは偽物とする説の信憑性は低いと思われます。
今回のような事態が二度と起こらぬよう、HixieのThe Second Acid Testのように別のURLを指定すべきとの意見もあるようですが……個人的にはWaSPドメインのリソースを指定しておいたほうがまだ安心(謎)できるような気が。