0

HTML<link>要素は、ドキュメントに CSS スタイルシートを含めるために最も頻繁に使用されます。典型的な使用法は次のようになります。

    <link rel="stylesheet" href="/style.css" />

応答本文にタグを含める代わりに、サーバーはLink代わりに HTTP ヘッダーを使用してスタイルシートを指定することができます。

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Link: </style.css>; rel=stylesheet

<!doctype html>
<html>
  <head><title>Example</title></head>
  <body>Hello!</body>
</html>

提案された HTML Imports 機能の仕様 ( WC3 ワーキング ドラフト) は、要素に重要な新機能を追加し<link>ます: 複数のスクリプト、スタイル、およびテンプレートを含む可能性がある別の HTML ドキュメントからすべてのリソースを一度にインポートする機能です。典型的な使用法は次のようになります。

    <link rel="import" href="/components.html" />

Link私の期待は、次のような場合に、スタイルと同じ方法でヘッダーを使用して HTML インポートを指定することも可能であるということでした:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Link: </components.html>; rel=import

<!doctype html>
<html>
  <head><title>Example</title></head>
  <body><ex-warm-welcome>Hello!</ex-warm-welcome></body>
</html>

ただし、作業草案の仕様では、<link>要素について明示的に言及しているだけです。Linkヘッダーを参照しません。また<link>、各インポートに要素を関連付ける必要があると思われる言語を使用しています。

各ドキュメントにはインポート リンク リストがあり、各アイテムはリンク、リンク要素、場所、URL で構成されます。

スタイルシート リンクがサポートしていない属性を<link rel="import" ... />サポートしていることがわかります。asyncヘッダーでこれを指定することはできませんが、これがオプションの属性であることを考えると、これによってサポートが完全に妨げられることはないと思います。

ヘッダーを使用して HTML インポートを指定することは可能Linkですか? 決定の根拠となる根拠への言及を歓迎します。

4

1 に答える 1

0

いいえ。

RFC 5988: Web Linkingによると、ヘッダーは要素Linkと意味的に同等であると想定されています。<link>

5.  The Link Header Field

   The Link entity-header field provides a means for serialising one or
   more links in HTTP headers.  It is semantically equivalent to the
   <LINK> element in HTML, as well as the atom:link feed-level element
   in Atom [RFC4287].

ただし、linkHTML5 仕様 ( W3C 勧告) の「要素」セクションはこれと矛盾しているようで、セマンティクスが異なってもよいと明示的に述べています。

サポートされている場合、 HTTPLink:ヘッダーは、HTTP メッセージで指定された順序で、ドキュメント内のリンクの前にあると想定する必要があります。これらのヘッダーは、関連する仕様で指定された規則に従って処理されます。[HTTP] [ウェブリンク]

注: HTTP Link: ヘッダーでの関係タイプの登録は、HTML リンク タイプとは異なるため、それらのセマンティクスは同じ名前の HTML タイプとは異なる場合があります。

RFC 5988 は「提案された標準」( rfc-editor.orgの情報) にすぎず、HTML5 仕様で参照されていますが、その参照は明示的に「非規範的」とマークされています。HTML4 仕様自体を参照するだけです。LinkHTML5 仕様が完全な標準であり、より最近のものであることを考えると、RFC よりも関連性が高く、この場合ヘッダーが機能するとは思わないでしょう。しかし、このすべての弁護はひとまず脇に置いて、実際にテストしてみましょう。

それぞれの方法で HTML インポートを指定しようとするページを提供する単純なノード サーバーを次に示します。

require('http').createServer(function(request, response) {
  switch (request.url) {
    case '/inline.html':
      response.writeHead(200, {
        'Content-Type': 'text/html',
      });
      response.write('<!doctype html><html><head>');
      response.write('<link rel="import" href="/import.html" />');
      break;

    case '/header.html':
      response.writeHead(200, {
        'Content-Type': 'text/html',
        'Link': '</import.html>; rel=import'
      });
      response.write('<!doctype html><html><head>');
      break;

    case '/import.html':
      response.writeHead(200, {
        'Content-Type': 'text/html',
      });
      response.write('<!doctype html><html><head>');
      response.write('<script>console.log("imported!")</script>');
      break;

    default:
      response.writeHead(404);
  }

  response.end();
}).listen(8080);

Chrome でアクセスする/inline.htmlと、「imported!」と表示されます。期待どおりにコンソールにログインしました。しかし、私が訪問する/header.htmlと、何も見えません。したがって、決定的な答えはノーのLinkようです。仕様と実装の両方が、ヘッダーでの HTML インポートの宣言をサポートしていません。

健全性チェックにより、このテストの非常に誤った前提が明らかになりました: Chrome は現在、スタイルシートのヘッダーさえサポートしていませんLink! 現在デフォルトで HTML インポートをサポートしている唯一のブラウザ エンジンであるため、結論は正しいですが、テスト自体は実際には意図した動作に光を当てることはありませんでした。

于 2016-01-13T20:06:09.410 に答える