概要

Webmentionは、自分のサイトで他のURLについて言及した際、そのURLに通知を送るためのシンプルな仕組みです。受信側の視点では、他のサイトから自分のURLが言及されたとき、その通知を受け取るためのリクエスト手段となります。

著者の注記

この節は規範的なものではありません。

本仕様は W3CIndieWeb コミュニティから寄稿されました。Webmentionの歴史や発展については IndieWeb wiki にさらに情報があります。

この文書の位置付け

この節は、本書が公開された時点でのその位置付けについて説明します。他の文書が本書に取って代わる場合もあり得ます。現時点での W3C の公開文書および本技術レポートの最新版については、W3C 技術レポート一覧(https://www.w3.org/TR/)をご参照ください。

この文書は Social Web Working Group により勧告として公開されました。本書についてコメントがある場合は、 public-socialweb@w3.org購読アーカイブ)までお送りください。すべてのご意見を歓迎します。

ワーキンググループの 実装レポート もご覧ください。

本文書は W3C のメンバーやソフトウェア開発者、その他 W3C のグループや関係者によってレビューされ、W3C のディレクターにより勧告として承認されています。これは安定した文書であり、参考情報や他の文書からの引用に利用できます。 W3C は仕様の普及と相互運用性の推進のために勧告を作成しています。これによりWebの機能性と相互運用性が向上します。

この文書は 2004年2月5日 W3C 特許ポリシー の下で作成されました。 W3C はグループ成果物に関連する 特許開示の公開リスト を管理しています。また、そのページには特許開示の方法も記載されています。何らかの特許情報に関して 必須クレーム を含むと考える場合、その情報は W3C特許ポリシー第6節 に則り開示しなければなりません。

W3C は、この勧告で規定される機能がFetchの変更によって影響を受けないと予想しています。

本書は 2015年9月1日版 W3C プロセス文書 に準拠し作成されています。

1. はじめに

Webmentionは、あるURLが別のURLにリンクしていることを通知する仕組みです。たとえば、Aliceが自身のブログに興味深い投稿を書きます。Bobが自分のサイトにその投稿への応答を書き、Aliceの元の投稿へリンクします。Bobの公開用ソフトウェアはAliceに対してWebmentionを送り、彼女の記事に返信があったことを通知します。Aliceのソフトウェアは元の投稿にその返信をコメントとして表示できます。

Webmentionの送信はブログ投稿に限らず、さまざまな種類のコンテンツや応答に利用できます。たとえば、応答がイベントへのRSVPであったり、誰かが別の投稿を「いいね」したことの表明であったり、別の投稿の「ブックマーク」であったりすることがあります。Webmentionは異なるウェブサイト間でこれらの相互作用を可能にし、分散型ソーシャルウェブを実現します。

1.1 Social Web ワーキンググループ

この節は規範的ではありません。

Webmentionは、Social Web ワーキンググループが作成しているいくつかの関連仕様の一つです。代替アプローチや補完的なプロトコルに興味がある実装者は、まず概要文書[social-web-protocols]を読むことを推奨します。

1.2 背景

この節は規範的ではありません。

Webmention仕様は、[Pingback]仕様の簡略化版として始まりました。PingbackがsourceおよびtargetのURLをXML-RPCペイロードで送信することを要求していたのに対し、Webmentionはそれをフォームエンコードされたペイロードに簡略化しました。これによりHTMLフォームで簡単に使え、フォームエンコードされたペイロードを扱うツールが多いため取り扱いが容易になり、XML-RPCを通じてシステムの他の部分のコードを誤って露出してしまう脆弱性も回避されます。

その後Webmentionは、送信と検証の詳細をより明確に規定し、ソースドキュメントが更新または削除されたときの通知送信にも対応するよう拡張されました。詳細はIndieWeb wikiの Webmention FAQ を参照してください。

1.3 概要

この節は規範的ではありません。

典型的なWebmentionの流れは次のとおりです:

  1. Aliceが自身のサイトに興味深いコンテンツを投稿する(そのサイトはWebmentionを受け取る設定になっている)。
  2. Bobはそのコンテンツを見て、自分のサイトでそれについてコメントし、Aliceの元の投稿へリンクする。
  3. Webmentionを使い、Bobの公開ソフトウェアが自動的にBobの投稿のURLからAliceのサーバーに通知を送る(Aliceの投稿がリンクされたことを知らせる)。
  4. Aliceの公開ソフトウェアは、Bobの投稿が実際にAliceの投稿を言及しているかを検証し、その情報を自サイトに反映する。

1.4 プロトコル概要

この節は規範的ではありません。

Webmentionは、ソースURLからターゲットURLへ「言及があった」ことを通知するために送信されます。

  1. ユーザーAaronが自分のブログに投稿を書く。
  2. ユーザーBarnabyが自分のブログに、Aaronの投稿へのリンクを含む投稿を書く。
  3. 投稿を公開すると(つまりURLが付与されると)、Barnabyのサーバーは公開処理の一環でAaronの投稿への言及を検出する。
  4. BarnabyのサーバーはAaronの投稿に対してWebmentionのディスカバリを実行し、そのWebmentionエンドポイントを見つける(見つからない場合は処理を停止)。
  5. Barnabyのサーバーは次の内容でAaronの投稿のWebmentionエンドポイントに通知を送信する:
    • source を Barnabyの投稿のパーマリンクに設定する
    • target を Aaronの投稿のパーマリンクに設定する
  6. AaronのサーバーがWebmentionを受け取る。
  7. AaronのサーバーはWebmention内のtargetがAaronのブログ上の有効なパーマリンクであることを検証する(無効なら処理を停止)。
  8. AaronのサーバーはWebmention内のsource(リダイレクトを追跡した後に取得)を検証し、それが実際にtargetへのハイパーリンクを含んでいることを確認する(含んでいなければ処理を停止)。

2. 適合性

本書中のキーワード "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", " SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", および "OPTIONAL" は [RFC2119] に記載されたとおり解釈されます。

2.1 適合クラス

Webmentionの実装は、送信者(senders)または受信者(receivers)のいずれかです。本節では両者の適合基準を説明します。

以下に既知のWebmention実装のタイプを列挙します。

送信者(Senders)

Webmention SenderはWebmentionを送信する実装です。SenderがWebmentionを送信するためには、まず受信者がアクセス可能なURL上にドキュメントが存在する必要があります。

Webmention送信者の適合基準は Sending Webmentions に記述されています。

以下は既知のWebmention送信者の例です。

受信者(Receivers)

Webmention Receiverは、受信者のWebmentionエンドポイントが公開されている1つ以上のターゲットURLに対してWebmentionを受け取る実装です。Webmentionを受け取るためには、ReceiverのWebmentionエンドポイントを示すURLが存在する必要があります。そのURLはReceiverの実装の一部とは見なされず、まったく異なるシステムやドメインに存在する場合があります。

Webmention受信者の適合基準は Receiving Webmentions に記述されています。

以下は既知のWebmention受信者の例です。

2.2 テストスイートとレポート

実装レポートは http://webmention.net/implementation-reports/ に提出してください。手順は当該URLに記載されています。実装レポートのテンプレートは webmention.rocks にあるテストを参照しています。

webmention.rocks は実装をライブテストするための多くのテストケースを提供します。実装開発中にエラー発生時の詳細なレスポンスを得られるため有用です。

3. Webmention プロトコル

この仕様は、HTMLおよびHTTPのリンク関係のために [HTML5] で定義された link rel レジストリを使用します。

3.1 Webmention の送信

3.1.1 ターゲットに言及するソース文書を作成する

Webmentionは、ソースURLからターゲットURLへ「言及があった」ことを通知するために送信されます。Webmentionを送信する前に、送信元となるソースURL(多くの場合ブログ投稿だが任意の種類のコンテンツでも良い)が存在している必要があります。

たとえば、https://waterpigs.example/post-by-barnaby のURLは、Aaronの投稿へのリンクを含む次のようなHTMLを含んでいるかもしれません。

Example 1
<!doctype html>
<html>
  <body>
    <a href="https://aaronpk.example/post-by-aaron">This is a great post</a>
  </body>
</html>

3.1.2 送信者が受信者のWebmentionエンドポイントを検出する

送信者は MUST ターゲットURLを取得(およびリダイレクトを追跡[FETCH])し、rel値が webmention のHTTP Linkヘッダー[RFC5988] をチェックしなければなりません。ドキュメントのコンテンツタイプがHTMLであれば、送信者は <link> および <a> 要素で rel="webmention" を探す必要があります。これらが複数存在する場合は、最初のHTTP Linkヘッダーが優先され、次にドキュメント順で最初の <link> または <a> が選ばれます。送信者はこれら3つのオプションすべてをサポートし、この順序でフォールバックすることが MUST です。

エンドポイントは相対URLであり得ます。その場合、送信者は MUST target URL に対して相対解決を行わなければなりません([URL] に従う)。

エンドポイントはクエリストリングパラメータを含んでいる場合があり、その場合それらはクエリ文字列パラメータとして保持され、Webmentionリクエスト送信時にPOST本文パラメータとして送ってはならない(MUST NOT)ことに注意してください。

送信者は最初にHTTP HEADリクエスト[RFC7231]を行い、Linkヘッダーを確認してからGETリクエストに進んでもよい(MAY)。

Example 2
GET /post-by-aaron HTTP/1.1
Host: aaronpk.example
HTTP/1.1 200 OK
Link: <http://aaronpk.example/webmention-endpoint>; rel="webmention"

<html>
<head>
...
<link href="http://aaronpk.example/webmention-endpoint" rel="webmention" />
...
</head>
<body>
....
<a href="http://aaronpk.example/webmention-endpoint" rel="webmention">webmention</a>
...
</body>
</html>

送信者はターゲットURL取得時に使用するHTTP User Agentヘッダーをカスタマイズして、受信者に対してこのリクエストがWebmentionディスカバリの一環であることを示してもよい(MAY)。その場合、User Agent文字列に "Webmention" を含めることが推奨されます。これにより、なぜディスカバリリクエストが行われたのかを調べたい人への手がかりになります。

3.1.3 送信者が受信者に通知する

送信者は MUST x-www-form-urlencoded [HTML5] 形式で source および target パラメータをWebmentionエンドポイントへPOSTしなければなりません。ここで source はリンクを含む送信者のページのURL、target はリンクされているページのURLです。

WebmentionエンドポイントのURLにクエリ文字列パラメータが含まれている場合、それらのクエリ文字列パラメータは保持され、POST本文として送信してはならない(MUST NOT)ことに注意してください。

Webmentionエンドポイントはリクエストを検証・処理し、HTTPステータスコードを返します。多くの場合 202 Accepted または 201 Created が返され、リクエストがキューに入り非同期で処理されていることを示します(DoS攻撃防止のため)。もしレスポンスコードが201であれば、Locationヘッダーにリクエストの状態を監視するためのURLが含まれます。

任意の 2xx レスポンスコードは成功とみなされるべきです(MUST)。

Example 3
POST /webmention-endpoint HTTP/1.1
Host: aaronpk.example
Content-Type: application/x-www-form-urlencoded

source=https://waterpigs.example/post-by-barnaby&
target=https://aaronpk.example/post-by-aaron


HTTP/1.1 202 Accepted

3.1.4 更新された投稿に対するWebmentionの送信

ソースURLが更新された場合、送信者は以前に送信したWebmentionを再送信することを SHOULD 推奨します(文書から削除された可能性のあるURLへの再送も含む)。また、URLに新しく現れたリンクに対してもWebmentionを送信することを SHOULD 推奨します。

これにより、Webmentionの受信者はソースドキュメントの表示を更新したり、彼らのURLを言及している投稿が更新されたことを通知したりできます。

投稿が更新された際にWebmentionを送信する場合、送信者は各ターゲットURLのWebmentionエンドポイントを再度ディスカバリすることを MUST 要求します(ターゲットがWebmentionエンドポイントを更新している可能性があるため)。

もしソースURLのページ上にソースへのレスポンスが表示されている(例:コメントとして)なら、送信者はそれをソースURLの更新として扱い、以前に送信したWebmentionを再送信することを SHOULD 推奨します。

3.1.5 削除された投稿に対するWebmentionの送信

ソースURLが削除された場合、送信者はそのURLに対して SHOULD HTTP 410 Gone ステータスコードを返すべきであり、削除された投稿の「墓碑(tombstone)」表現を表示することを SHOULD 推奨します。通常は投稿内のプロパティの値を空にする、あるいは主要コンテンツ(例:投稿の name や content)を "Deleted" に置き換えるなどの手法です。送信者はその後、そのドキュメントに対して以前に送信された全てのWebmentionを再送信することを SHOULD 推奨します。

これにより、受信者が以前受け取ったWebmentionをコメント等として表示していた場合、削除をサポートする受信者はそれを表示から除外できます。一方、更新のみをサポートする受信者に対しては合理的なフォールバックを提供します。

3.2 Webmention の受信

source および target パラメータを含むPOSTリクエストを受け取ったら、受信者はパラメータを検証することを SHOULD 推奨します(下記 Request Verification を参照)。その後、DoS攻撃を防ぐためにリクエストをキュー化して非同期に処理することを SHOULD 推奨します。リクエストへの応答は、受信者の処理方法に応じて3通りあります。

もし受信者が送信者がステータス確認に使えるステータスページを作成する場合、受信者は MUST HTTP 201 Created で応答し、Location ヘッダーにステータスURLを含めなければなりません。レスポンスボディはコンテンツを含めてもよい(MAY)。

Example 4
HTTP/1.1 201 Created
Location: http://aaronpk.example/webmention/DEhB9Jme

受信者がリクエストを非同期に処理するがステータスURLを返さない場合、受信者は MUST HTTP 202 Accepted で応答しなければなりません。レスポンスボディはコンテンツを含めてもよく(MAY)、その場合は人間向けの可読な応答が推奨されます。

Example 5
HTTP/1.1 202 Accepted

受信者が検証ステップを同期的に実行して処理する場合(推奨されない)、成功時には MUST 200 OK で応答しなければなりません。

3.2.1 リクエストの検証

受信者は MUST sourcetarget が有効なURLであること([URL])および受信者がサポートするスキームであることを確認しなければなりません(一般的には http または https を確認することになります)。

受信者は、もしソースURLがターゲットURLと同一である場合、そのリクエストを拒否しなければなりません(MUST)。

受信者は、target がWebmentionを受け付けられる有効なリソースであるかを同期的にチェックすることを SHOULD 推奨します。不正なWebmentionを詳細検証の前に拒否するためです。「有効なリソース」の定義は受信者次第です。たとえば、ある受信者は複数ドメインのWebmentionを受け入れるかもしれませんし、別の受信者はエンドポイントと同一ドメイン上のみ受け入れるかもしれません。

ターゲットURLにフラグメント識別子が含まれている場合、受信者がどのURLをWebmention受信対象とするかを制限するならば、チェック時にはそのフラグメントを無視することを SHOULD 推奨します。

3.2.2 Webmention の検証

Webmentionの検証は、DoS(サービス拒否)攻撃を防ぐために非同期で処理することを SHOULD 推奨します。

受信者がWebmentionを何らかの方法で利用する場合(投稿上のコメントとして表示する、"like" カウンタを増やす、投稿者に通知する等)、受信者はソースに対してHTTP GETリクエストを行い、HTTPリダイレクトを追跡して(追跡するリダイレクト数を制限することを SHOULD 推奨)ターゲットを実際に言及していることを確認しなければなりません(MUST)。受信者は受け入れ可能なコンテンツタイプの優先を示すためにHTTP Acceptヘッダーを含めることを SHOULD 推奨します。

受信者は、メディアタイプごとのルールを使ってソースドキュメントがターゲットURLを言及しているかを判断することを SHOULD 推奨します。たとえば[HTML5]ドキュメントでは、受信者は <a href="*"><img href="*"><video src="*"> 等のリンクを探すべきです。JSON([RFC7159])ドキュメントでは、プロパティの値がURLと完全一致するものを探すべきです。プレーンテキストの場合は文字列検索でURLを探します。他のコンテンツタイプについては実装者の裁量で扱えます。ソースドキュメントは、Webmentionが有効と見なされるために提供されたtarget URLと正確に一致している必要があります(MUST)。

この時点で、受信者はソースページから取得したコンテンツをターゲットページや他のページに公開してもよく(MAY)、ソースから取得したその他のデータと併せて表示できます。たとえば、受信者はソースの内容を投稿のコメントとして表示したり、類似のWebmentionを送信した人の一覧に投稿者のプロフィール写真を表示したりすることがあります。

Note

ソースページのコンテンツを再公開する際は、その可視性を意図せず変更してしまわないよう注意が必要です。たとえば、ソースドキュメントが限定的な閲覧者向けに設定されている場合、再公開したコンテンツが一般公開されないように配慮すべきです。ソースドキュメントが認証で制限されているか、受信者が同じファイアウォール内にいるためにしかアクセスできない場合もあります。

3.2.3 エラー応答

送信者側の問題によりWebmentionが成功しなかった場合、受信者は MUST 400 Bad Request を返すべきであり、レスポンスボディにエラーの説明を含めてもよい(MAY)。

GETリクエストをソースに行う前に同期的に返し得る、送信者関連の可能なエラー:

  • 指定された target URL が見つからない。
  • 指定された target URL がWebmentionを受け付けない。
  • source URL が不正な形式、またはサポートされないスキームである(例:mailto: リンク)

ソースURLの内容を取得した後に発生し得る送信者関連の可能なエラー:

  • source URL が見つからない。
  • source URL に target URL へのリンクが含まれていない。

Webmentionが受信者サーバー側のエラーにより成功しなかった場合、受信者は SHOULD 500 Internal Server Error を返し、レスポンスボディにエラーの説明を含めてもよい(MAY)。

3.2.4 既存のWebmentionの更新

もし受信者が過去に同じ sourcetarget の組み合わせでWebmentionを受け取っていた場合、

  • 両方の検証ステップが成功したなら、受信者は既存のWebmentionについてソースから取得したデータを更新することを SHOULD 推奨します。
    • Webmentionの実装が更新をサポートする場合(いわゆる "Webmention update implementation")、受信者はソースの主要オブジェクトのプロパティからのデータ更新をサポートしなければなりません(MUST)。例:ページの [h-entry] のプロパティ。
      • Webmentionの更新実装は、主要オブジェクトの子や他の子孫オブジェクト(例:ページ内のコメントh-entry)からのデータ更新を MAY サポートしてもよいです。注意:これをサポートする実装は、[Salmention] 拡張に従って扱うことを検討してもよいでしょう。
  • もしソースに対するGETで 410 Gone を受け取った場合、または 200 OK を受け取ったがソース上に target の言及が見つからなかった場合、受信者は既存のWebmentionを削除するか、削除済みとしてマークすることを SHOULD 推奨します。
  • Webmentionの処理は冪等であるべきです(SHOULD)。つまり、同じ sourcetarget に対してコンテンツに変化がないまま複数回Webmentionを受け取っても、複数の返信として表示されるべきではありません。

4. セキュリティに関する考慮事項

4.1 悪用防止

4.2 GET リクエストの制限

Webmentionプロトコルは、送信者がGET(またはHEAD)リクエストで受信者のエンドポイントを検出し、続いて受信者が送信者のWebページにGETリクエストしてリンクを検証することに依存しています。これは、送信者が受信者に任意のURLへGETリクエストをさせることが可能となり、DoS攻撃のベクトルとなる可能性があります。

受信者はリンク検証時に最初にHTTP HEADリクエストを行ってもよく、コンテンツタイプや長さ、その他HTTPヘッダーの内容を見てからGETリクエストを行うか判断できます。

受信者はリダイレクト追跡回数に上限を設けるべきです。例えば上限を20回にし、送信元がリダイレクトし続けた場合でもリダイレクトループで詰まらないようにします。

受信者は未検証ソースURLの取得データ量や時間にも上限を設けるべきです。例:ソースURLが5秒以内に応答しなければ失敗とみなす。あるいは最大1MBまで取得し、それ以上は読み込まないようにする(通常HTMLやJSONページはその範囲内)。

4.3 localhost へのWebmention送信回避

送信者が受信者のWebmentionエンドポイントを検出する際、エンドポイントがlocalhostや他のループバックアドレスである正当な理由はほとんどありません。送信者のlocalhost上に認証のいらないサービスがあると、悪意あるWebmention受信者が任意のPOSTリクエストを自分自身へ送らせるようなエンドポイントを作ることも可能になります。

ディスカバリ時、送信者がエンドポイントがlocalhostまたはループバックIP(127.0.0.0/8)であることを検知した場合、そのエンドポイントへWebmentionを送信すべきではありません

4.4 クロスサイトリクエストフォージェリ(CSRF)

この仕様では、Webmentionリクエストに追加のヘッダーやパラメータ(認証ヘッダーやセッションクッキー等)が含まれる場合の特別な扱いを定めていません。ただし、Webmentionエンドポイントが追加ヘッダー付きのリクエストも受け付ける場合、CSRF(クロスサイトリクエストフォージェリ)攻撃への対策を推奨します。一つの方法として、WebmentionエンドポイントのクエリパラメータにCSRFトークンを含め、送信者がディスカバリ時にそのトークンを取得できるようにするやり方があります。

例えば、ターゲットURLが下記のようなWebmentionエンドポイント(CSRFトークン付き)を示すことができます:

Example 6
GET /post-by-aaron HTTP/1.1
Host: aaronpk.example
HTTP/1.1 200 OK
Link: <http://aaronpk.example/webmention?csrf=Q0NTVhYjI0NTVkNDA3M>; rel="webmention"

Webmentionエンドポイントはリクエスト処理時に最初にこのCSRFトークンの正当性を検証できます。

4.5 保護リソースへのアクセス制限

攻撃者が任意のURLを指すWebmentionエンドポイントを広告することが可能です。そのため、ファイアウォールの内側や、本来なら保護されたリソースにアクセスできるサーバー上にWebmention送信ソフトを設置する際は、攻撃者に内部サーバーへのPOSTリクエストを行わせるリスクがあることに注意してください。これを防ぐため、下記のいずれかの対策を推奨します:

4.6 セキュリティとプライバシーのレビュー

以下の質問は「Self-Review Questionnaire: Security and Privacy」([security-privacy-questionnaire])に沿って、この仕様におけるセキュリティとプライバシー上の考慮事項を示します。

この仕様は個人を特定できる情報を扱いますか?
Webmentionに関わる唯一の個人特定情報は source と target のURLです。
この仕様は高価値データを扱いますか?
いいえ、認証やその他の資格情報は関与しません。
この仕様はoriginに持続的な新しい状態を導入しますか?
いいえ
この仕様はWeb上に持続的なクロスオリジン状態を公開しますか?
Webmention受信者は、Webmentionリクエスト情報をもつ一時的なリソースを作成することがあります。
この仕様は他のオリジンが現在持たないデータへのアクセスを公開しますか?
いいえ
この仕様は新しいスクリプト実行/ロード機構を有効にしますか?
いいえ
この仕様はoriginにユーザ位置情報へのアクセスを許可しますか?
いいえ
この仕様はoriginにユーザ端末のセンサーへのアクセスを許可しますか?
いいえ
この仕様はoriginにユーザ計算環境の側面へのアクセスを許可しますか?
いいえ
この仕様はoriginに他のデバイスへのアクセスを許可しますか?
いいえ
この仕様はoriginにユーザーエージェントのネイティブUI制御を一部許可しますか?
いいえ
この仕様は一時的な識別子をWeb上で公開しますか?
いいえ
この仕様はファーストパーティ・サードパーティ文脈で挙動を区別しますか?
いいえ
ユーザーエージェントの「シークレットモード(プライベート)」ではこの仕様はどう扱うべきですか?
Webmentionは状態を保持しないため、シークレットモードで考慮すべき点はありません。
この仕様はユーザの端末へデータを永続保存しますか?
いいえ
この仕様はデフォルトのセキュリティ特性をダウングレードできますか?
いいえ

5. その他の考慮事項

5.1 非HTMLコンテンツからのWebmention送信

もしソースドキュメントがHTMLでない場合(PDF等)、または単純なHTTP GETリクエストで生のソースを取得できない場合(ペイウォールの背後や同意クリック必須など)、リンク先一覧を記載したHTML形式の「ランディングページ」を用意し、そのURLをWebmention送信時にソースURLとして指定する必要があります。これにより、受信者がリンク検証用に取得可能なURLが得られ、元のソース全体を公開することなくWebmentionを利用できます。

HTMLランディングページを作成することで、学術論文など制限付きコンテンツを参照する場合にも、他の人が参照に使いやすいリンク先を提供できるため、被リンク数を増やす効果もあります。たとえば論文の場合、HTMLページにreference一覧を書いておけば、それぞれをWebmentionターゲットURLに指定できます。

5.2 大規模データセットへのWebmention送信

もしソースドキュメントが特に大きい場合(膨大なHTMLの表や大きなJSONファイルなど)、そのURLでWebmentionを送信するのは避けるべきです。そうしないと、受信者が全データセットをダウンロードして帯域を消費したり、受信者側が帯域削減のため一部のみを取得して検証失敗するリスクもあります。また受信者が自サイトにリンクを再公開したとき、他の閲覧者が誤って全データをダウンロードしてしまう危険も生じます。

ブラウザ表示時に大きなデータをページ分割するのが良い習慣であるように、Webmentionの送信時にも小さなページ単位で送るほうが推奨されます。HTMLなら既存のページ単位URLをそのまま使えます。JSONの場合はページ毎の小さなJSONドキュメントにURLを振って、ソースURLとして使うこともできます。

5.3 ディスカバリ時のキャッシュヘッダー尊重

Webmentionのディスカバリ実行時、送信者はターゲットURLが返すHTTPキャッシュヘッダー([RFC7234])を尊重すべきであり、ヘッダーが許す頻度より多く取得要求を送るべきではありません。

6. IANAに関する考慮事項

以下のリンク関係型は、[RFC5988] の6.2.1節に基づき、IANAにより登録されています:

Relation Name:
webmention
説明:
WebmentionプロトコルをサポートするターゲットURIを示します。これにより、何らかの公開過程でリソースを言及するクライアントが、そのエンドポイントに連絡して「このリソースが言及された」ことを通知できます。
参照:
W3C Webmention Specification (http://www.w3.org/TR/webmention/)
備考:
これはRefback, Trackback, Pingbackと同様の「Linkback」機構の一種ですが、異なるプロトコルを使用するため、独自のリンク関係型で発見できるようにする必要があります。

A. フォームエンコードプロパティのURI

実装でsourcetargetパラメータをURIとして扱いたい場合、http://www.w3.org/ns/webmention#を前置して用いることができます。

B. 拡張仕様

この節は規範的ではありません。

次に挙げるWebmention拡張仕様は、Web上で2つ以上の相互運用実装が存在するため、ここに掲載されています:

B.1 Vouch

[Vouch]プロトコルはWebmentionのスパム対策用拡張です。

B.2 Salmention

[Salmention]プロトコルは、コメントやその他の相互作用のアップストリーム伝播を実現するWebmentionの拡張です。

B.3 Private Webmention

[Private-Webmention]プロトコルは、アクセス制御つき投稿へのWebmention送信と検証をサポートする拡張です。

C. リソース

この節は規範的ではありません。

C.1 記事一覧

この節は規範的ではありません。

Webmentionに関する記事一覧はIndieWeb wikiに掲載されています。

C.2 実装例

この節は規範的ではありません。

Webmentionの実装一覧はwebmention.netで見ることができます。

D. 謝辞

編集者は、Webmention仕様のオリジナルドラフトを作成してくれたSandeep Shetty氏に感謝します。

また、編集者はIndieWeb コミュニティおよびその他実装者のみなさまのサポート、励まし、情熱にも感謝します。これには(ただしこれらに限らず)Amy Guy、Benjamin Roberts、Ben Werdmüller、Dave Wilkinson、Rob Sanderson、Tantek Çelik各氏などが含まれます。

E. 変更履歴

この節は規範的ではありません。

E.1 2016年11月1日PRからRECへの変更点

F. 参考文献

F.1 標準文献

[FETCH]
Anne van Kesteren. WHATWG. Fetch 標準. Living Standard. URL: https://fetch.spec.whatwg.org/
[HTML5]
Ian Hickson; Robin Berjon; Steve Faulkner; Travis Leithead; Erika Doyle Navara; Theresa O'Connor; Silvia Pfeiffer. W3C. HTML5. 2014年10月28日. W3C 勧告. URL: https://www.w3.org/TR/html5/
[RFC2119]
S. Bradner. IETF. 要件レベルを示すRFC内キーワード. 1997年3月. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119
[RFC5988]
M. Nottingham. IETF. Web Linking. 2010年10月. Proposed Standard. URL: https://tools.ietf.org/html/rfc5988
[RFC7231]
R. Fielding, Ed.; J. Reschke, Ed.. IETF. ハイパーテキスト転送プロトコル(HTTP/1.1):意味論およびコンテンツ. 2014年6月. Proposed Standard. URL: https://tools.ietf.org/html/rfc7231
[URL]

注: URLは様々な文脈で多様な方法で利用できます。厳密なURL生成を目指す場合は、[RFC3986] や [RFC3987] を考慮してください。URL仕様はURLという用語、URLを扱う様々なアルゴリズム、URLの構築・パース・解決用APIを定義します。開発者は最新のURL仕様への動向把握のため https://url.spec.whatwg.org/ を追うことを推奨します。

注意すべき点として、WebブラウザーやHTML以外のソフトウェアスタックによるURL処理には重要な違いがあります。既存Webコンテンツを破壊する変更は許容されませんが、URL処理の一部は(例:file: URLのパースや[RFC3986] [RFC3987]構文の文法エラーとなるURL処理など)実装依存とみなされるべき部分もあります。

Anne van Kesteren. WHATWG. URL 標準. 常時更新仕様書. URL: https://url.spec.whatwg.org/

F.2 参考文献・資料

[CSRF]
OWASP. クロスサイトリクエストフォージェリ(CSRF). Living Document. URL: https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)
[Pingback]
Stuart Langridge; Ian Hickson. hixie.ch. Pingback 1.0. 安定仕様. URL: http://www.hixie.ch/specs/pingback/pingback
[Private-Webmention]
Aaron Parecki. IndieWeb. プライベートWebmention. Living Specification. URL: https://indieweb.org/Private-Webmention
[RFC7159]
T. Bray, Ed.. IETF. JavaScript Object Notation (JSON) データ交換形式. 2014年3月. Proposed Standard. URL: https://tools.ietf.org/html/rfc7159
[RFC7234]
R. Fielding, Ed.; M. Nottingham, Ed.; J. Reschke, Ed.. IETF. ハイパーテキスト転送プロトコル(HTTP/1.1):キャッシュ制御. 2014年6月. Proposed Standard. URL: https://tools.ietf.org/html/rfc7234
[Salmention]
Ben Roberts; Tantek Çelik. IndieWeb. Salmention. Living Specification. URL: https://indieweb.org/Salmention
[Vouch]
Aaron Parecki; Tantek Çelik. IndieWeb. Vouch. Living Specification. URL: https://indieweb.org/Vouch
[XSS]
OWASP. クロスサイトスクリプティング(XSS). Living Document. URL: https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
[h-entry]
Tantek Çelik. microformats.org. h-entry. Living Specification. URL: http://microformats.org/wiki/h-entry
[security-privacy-questionnaire]
Mike West. W3C. セキュリティとプライバシー自己レビュー質問票. 2015年12月10日. W3C Note. URL: https://www.w3.org/TR/security-privacy-questionnaire/
[social-web-protocols]
Amy Guy. W3C. ソーシャルWebプロトコル. 2016年11月2日. W3C 作業草案. URL: https://www.w3.org/TR/social-web-protocols/