要約

  • 1998年のRFC 2369は、メールのヘッダーで退会先を知らせる仕組みを定めた。URLへの訪問だけで退会させると、検査ソフトと本人の操作を区別できない。
  • 2017年のRFC 8058はList-Unsubscribe-Post: List-Unsubscribe=One-Clickを追加した。DKIM署名が二つの退会ヘッダーを覆い、受信側は本人の同意を得てからHTTPS POSTを送る。
  • POSTの本文は規定の一組だけで、CookieやHTTP認証には頼れない。送信側はHTTPSのリダイレクトを返してはならない。新しいヘッダーはIANAに登録された。

見ただけなのに、辞めたことになる

RFC 2369の出発点は合理的だった。メーリングリストがList-Unsubscribeに出口を書けば、受信ソフトは本文の末尾を探さずに退会先を示せる。1998年の規格は、読者が出口を見つける負担を軽くした。ところが、その出口を開いた瞬間に会員情報を消す運用は、URLを「案内」と「命令」の両方にしてしまう。

安全検査のソフトはメールのURLを自動で取得する。RFC 8058は、この自動取得が意図しない退会を起こすと明記する。送信側のサーバーに届くリクエストだけでは、背景で動く検査と人間の意思を機械的に見分けられない。リンクを調べて読者を守るはずの機能が、読者の購読を失わせる。原因は検査そのものよりも、GETを意思表示として扱うサーバー側の設計にあった。

送信側は確認画面を挟むようになった。自動取得はページを見るが、次のボタンは押さない。人なら先へ進める。しかし、その方式では「一度の操作で退会」が成立しない。誤退会を防ぐために、今度は退会の手間が増える。必要だったのは、検査を止めることではなく、見る通信と実行する通信に異なる意味を与えることだった。

新しいヘッダーが動詞を決める

RFC 8058は古いヘッダーを残し、単一操作での退会にもう一つの標識を付けた。List-UnsubscribeにはHTTPSのURIを置き、List-Unsubscribe-Postには正確にList-Unsubscribe=One-Clickを書く。受信側は本人の同意を得た後、後者の固定文字列を本文として前者のURIにHTTPS POSTを送る。URLを調べるための取得と、会員を外すPOSTはHTTPの方法からして別物になる。

送信者にはDKIM署名も求められる。署名のh=に二つのヘッダーを含め、有効な署名でURLと操作宣言をともに保護する。規格は、その署名がなければ受信側が単一操作の退会を提示すべきでないとする。署名は読者の意思を証明するものではない。送信側が掲げた退会方法が改変されず届いたかを確かめるためのものだ。

意思は読者の側に残る。受信側は本人の同意なしにPOSTを送ってはならない。同意をどの画面で得るかは規格が決めない。リスト運営者は署名付きの申し出を用意し、メールソフトは操作を提示し、読者が決める。背景の検査ソフトがURLを開いても、その一連の役割を代行することはできない。

転送先に仕事を押し付けない

POSTの本文は決められた一組だけで、Cookie、HTTP認証、追加の文脈を送ってはならない。したがってURIだけで対象のリストと受信者が分からなければ、サーバーは処理を終えられない。RFCは推測しにくい不透明な識別子を勧める。ブラウザーのログイン状態を当てにする実装では、メールソフトからの規定のリクエストは通らない。

送信側は、このPOSTにHTTPSのリダイレクトを返してはならない。RFCが挙げる理由は具体的だ。POSTの転送は歴史的に不安定で、転送の途中でGETに変わることもあった。せっかく検査用の取得と退会用のPOSTを分けても、転送先で動詞が変われば境界は消える。示したURIで処理を完了させる必要がある。

RFC 8058はRFC 2369の一般的な退会URLの使い方を変更していない。新しいヘッダーで、一回の操作を受け付ける場合だけを明示した。IANAの登録表にはList-Unsubscribe-Postが載る。ただし登録された名前だけでは退会は動かない。署名、同意、POST、送信側の処理が順に成立して初めて完了する。

出口はURL一本ではない

リスト運営者は署名と処理サーバーを握る。受信ソフトは表示とPOSTの時機を握る。読者は離れるかどうかを決める。この分担が2017年の変更の核心だった。自動のURL検査に会員変更の権限を渡さず、退会したい読者に余計な確認画面を強いない。

ここで用いた公式文書は規格と登録の事実を示す。特定のメールサービスでどれだけ使われたかを確かめるには、日付のある生メール、受信側の説明書、送信側の処理ログが要る。RFC 8058の歴史上の一線は明瞭だ。インターネットではソフトがリンクを簡単に開ける。だから、どの通信が人の命令なのかを正確に記す必要が生まれた。