Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 18250] ファイルの概要

このコミットは、src/pkg/net/http/cookiejar/jar.go ファイルに対する変更です。具体的には、net/http/cookiejar パッケージ内の PublicSuffixList インターフェースの PublicSuffix メソッドに関するコメントが変更されています。以前のコミット(CL 47560044 / 40a37153a550)で行われたドメイン名のフォーマットに関するドキュメントの追加が元に戻されています。

コミット

commit 1e2b13355f888be3f9d31624ad178c4e4b0bb3f6
Author: Brad Fitzpatrick <bradfitz@golang.org>
Date:   Tue Jan 14 12:53:21 2014 -0800

    undo CL 47560044 / 40a37153a550
    
    Still work to do. See http://golang.org/issue/7125
    
    ««« original CL description
    net/http/cookiejar: document format of domain in PublicSuffix
    
    Document what values a PublicSuffixList must accept as
    a domain in a call to PublicSuffix.
    
    R=bradfitz, nigeltao
    CC=golang-codereviews
    https://golang.org/cl/47560044
    
    »»»
    
    R=golang-codereviews, minux.ma
    CC=golang-codereviews
    https://golang.org/cl/51770044

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/1e2b13355f888be3f9d31624ad178c4e4b0bb3f6

元コミット内容

このコミットは、以前のコミット CL 47560044 (ハッシュ 40a37153a550) を元に戻すものです。元のコミットの目的は、net/http/cookiejar パッケージの PublicSuffixList インターフェースにある PublicSuffix メソッドが、ドメイン名としてどのような値を許容すべきかをドキュメント化することでした。具体的には、ドメインが「小文字の Punycode 化されたドメイン名(IPアドレスではない)、先頭または末尾にドットがない」形式であることを明記していました。

変更の背景

このコミットの背景には、net/http/cookiejar パッケージにおけるクッキーのドメインマッチングの厳密な定義と、それに伴う PublicSuffixList インターフェースの PublicSuffix メソッドの振る舞いの明確化の必要性がありました。

元のコミット CL 47560044 は、PublicSuffix メソッドに渡される domain 引数の期待されるフォーマットを明確にするために、コメントを追加しました。これは、クッキーのセキュリティとプライバシーを確保する上で非常に重要です。例えば、example.com のクッキーが sub.example.com にも適用されるべきか、あるいは com のようなトップレベルドメイン(TLD)に設定されたクッキーが意図せず広範囲に影響を与えないようにするためには、ドメインのパブリックサフィックス(Public Suffix)を正確に特定する必要があります。

しかし、このコミットは「undo」されています。コミットメッセージには「Still work to do. See http://golang.org/issue/7125」と記載されており、これは元の変更が不完全であったか、あるいはさらなる検討が必要であったことを示唆しています。issue/7125 を確認すると、net/http/cookiejarPublicSuffix メソッドの仕様がまだ不明確であり、特にIPアドレス、先頭/末尾のドット、大文字小文字の区別、IDN/Punycode の扱いについて、呼び出し側と実装側のどちらが責任を持つべきかという点が未解決であったことがわかります。

したがって、この「undo」コミットは、不完全なドキュメントを追加するよりも、未解決の問題を解決するまで元の状態に戻すことを選択したものです。

前提知識の解説

このコミットを理解するためには、以下の概念が重要です。

  • HTTP Cookie Jar: HTTP クッキーを保存、管理、取得するためのメカニズムです。Webブラウザがクッキーを扱うのと同様に、Goの net/http/cookiejar パッケージは、HTTPリクエストとレスポンス間でクッキーの状態を維持するために使用されます。
  • Public Suffix List (PSL): インターネット上のドメイン名システム(DNS)において、「パブリックサフィックス」とは、登録可能なドメイン名の最後の部分を指します。例えば、example.comcomexample.co.ukco.uk がこれに該当します。PSLは、これらのパブリックサフィックスのリストであり、主にクッキーのセキュリティを強化するために使用されます。クッキーはパブリックサフィックスに直接設定されるべきではなく、その下のレベルのドメイン(例: example.com)に設定されるべきです。これにより、悪意のあるサイトが com のようなTLDにクッキーを設定して、他のサイトのクッキーを盗むような攻撃を防ぎます。
  • Punycode: 国際化ドメイン名(IDN)をASCII文字のみで表現するためのエンコーディング方式です。日本語のような非ASCII文字を含むドメイン名(例: ドメイン.jp)は、DNSシステムで扱えるように xn--eckwd4c7cu472ff.jp のようにPunycodeに変換されます。
  • CL (Change List): Goプロジェクトにおける変更の単位です。Gitのコミットに相当しますが、Goのコードレビューシステム(Gerrit)ではCLという用語が使われます。
  • Issue Tracker: ソフトウェア開発において、バグや機能要求、改善点などを追跡するためのシステムです。Goプロジェクトでは golang.org/issue が使用されます。

技術的詳細

このコミットは、net/http/cookiejar/jar.go ファイル内の PublicSuffixList インターフェースの定義に焦点を当てています。

PublicSuffixList インターフェースは、以下のメソッドを定義しています。

type PublicSuffixList interface {
	// PublicSuffix returns the public suffix of domain.
	//
	// TODO: specify which of the caller and callee is responsible for IP
	// addresses, for leading and trailing dots, for case sensitivity, and
	// for IDN/Punycode.
	PublicSuffix(domain string) string

	// String returns a description of the source of this public suffix
	// list, e.g. "Mozilla Public Suffix List".
	String() string
}

元のコミット CL 47560044 では、PublicSuffix メソッドのコメントが以下のように変更されていました。

	// PublicSuffix returns the public suffix of domain.
	//
	// Domain is a lowercase punycoded domain name (not an IP address)
	// without leading or trailing dots. The returned value is in the
	// same form.
	PublicSuffix(domain string) string

この変更は、PublicSuffix メソッドの domain 引数に期待されるフォーマットを明確にしようとしました。具体的には、以下の点を指定していました。

  1. domain は小文字であること。
  2. domain は Punycode 化されていること。
  3. domain はIPアドレスではないこと。
  4. domain には先頭または末尾にドットが含まれないこと。
  5. 返される値も同じ形式であること。

しかし、今回のコミット 1e2b13355f888be3f9d31624ad178c4e4b0bb3f6 では、このコメントが元に戻され、代わりに TODO コメントが追加されています。

	// PublicSuffix returns the public suffix of domain.
	//
	// TODO: specify which of the caller and callee is responsible for IP
	// addresses, for leading and trailing dots, for case sensitivity, and
	// for IDN/Punycode.
	PublicSuffix(domain string) string

この TODO コメントは、PublicSuffix メソッドの仕様がまだ完全に定義されていないことを明確に示しています。特に、以下の点について、呼び出し側(PublicSuffix を呼び出す側)と実装側(PublicSuffixList を実装する側)のどちらが責任を持つべきかという問題が未解決であることを強調しています。

  • IPアドレス: domain がIPアドレスの場合の扱い。
  • 先頭/末尾のドット: domain に先頭または末尾のドットが含まれる場合の扱い。
  • 大文字小文字の区別: domain の大文字小文字の扱い。
  • IDN/Punycode: 国際化ドメイン名(IDN)や Punycode の扱い。

これらの問題は、クッキーのドメインマッチングの正確性とセキュリティに直接影響するため、非常に重要です。例えば、PublicSuffix の実装がIPアドレスを適切に扱わない場合、IPアドレスベースのサイトでクッキーのセキュリティ問題が発生する可能性があります。また、大文字小文字の区別が曖昧だと、異なる大文字小文字のドメイン名で同じクッキーが扱われるべきかどうかが不明確になり、予期せぬ動作につながる可能性があります。

このコミットは、不完全な仕様をドキュメント化するよりも、未解決の課題を明確にし、将来の改善を促すことを目的としています。

コアとなるコードの変更箇所

変更は src/pkg/net/http/cookiejar/jar.go ファイルの PublicSuffixList インターフェースの PublicSuffix メソッドのコメント部分のみです。

--- a/src/pkg/net/http/cookiejar/jar.go
+++ b/src/pkg/net/http/cookiejar/jar.go
@@ -34,9 +34,9 @@ import (
 type PublicSuffixList interface {
 	// PublicSuffix returns the public suffix of domain.
 	//
-	// Domain is a lowercase punycoded domain name (not an IP address)
-	// without leading or trailing dots. The returned value is in the
-	// same form.
+	// TODO: specify which of the caller and callee is responsible for IP
+	// addresses, for leading and trailing dots, for case sensitivity, and
+	// for IDN/Punycode.
 	PublicSuffix(domain string) string
 
 	// String returns a description of the source of this public suffix

コアとなるコードの解説

この変更は、コードの振る舞い自体には影響を与えません。影響を受けるのは、PublicSuffixList インターフェースの PublicSuffix メソッドのドキュメント(コメント)のみです。

元のコメントは、PublicSuffix メソッドの引数 domain がどのような形式であるべきか、そして返される値がどのような形式であるべきかを明確にしようとしていました。これは、このインターフェースを実装する開発者にとって非常に重要な情報です。

しかし、このコミットでは、その具体的な説明を削除し、代わりに TODO コメントを挿入しています。これは、元のコメントが提供しようとした情報が、まだ完全に合意された仕様ではない、あるいは不完全であると判断されたためです。

TODO コメントは、将来の作業項目として、PublicSuffix メソッドの仕様をより詳細かつ厳密に定義する必要があることを示しています。特に、IPアドレス、ドットの扱い、大文字小文字の区別、IDN/Punycode の変換責任といった、ドメイン名の正規化に関する複雑な側面について、呼び出し側と実装側のどちらが責任を持つべきかを明確にすることが求められています。

この変更は、Goの標準ライブラリにおけるAPIのドキュメントの厳密性と正確性に対するコミッターの姿勢を反映しています。不完全な情報や誤解を招く可能性のある情報を公開するよりも、未解決の課題を明示し、将来の改善を促すことを優先しています。

関連リンク

参考にした情報源リンク

[インデックス 18250] ファイルの概要

このコミットは、src/pkg/net/http/cookiejar/jar.go ファイルに対する変更です。具体的には、net/http/cookiejar パッケージ内の PublicSuffixList インターフェースの PublicSuffix メソッドに関するコメントが変更されています。以前のコミット(CL 47560044 / 40a37153a550)で行われたドメイン名のフォーマットに関するドキュメントの追加が元に戻されています。

コミット

commit 1e2b13355f888be3f9d31624ad178c4e4b0bb3f6
Author: Brad Fitzpatrick <bradfitz@golang.org>
Date:   Tue Jan 14 12:53:21 2014 -0800

    undo CL 47560044 / 40a37153a550
    
    Still work to do. See http://golang.org/issue/7125
    
    ««« original CL description
    net/http/cookiejar: document format of domain in PublicSuffix
    
    Document what values a PublicSuffixList must accept as
    a domain in a call to PublicSuffix.
    
    R=bradfitz, nigeltao
    CC=golang-codereviews
    https://golang.org/cl/47560044
    
    »»»
    
    R=golang-codereviews, minux.ma
    CC=golang-codereviews
    https://golang.org/cl/51770044

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/1e2b13355f888be3f9d31624ad178c4e4b0bb3f6

元コミット内容

このコミットは、以前のコミット CL 47560044 (ハッシュ 40a37153a550) を元に戻すものです。元のコミットの目的は、net/http/cookiejar パッケージの PublicSuffixList インターフェースにある PublicSuffix メソッドが、ドメイン名としてどのような値を許容すべきかをドキュメント化することでした。具体的には、ドメインが「小文字の Punycode 化されたドメイン名(IPアドレスではない)、先頭または末尾にドットがない」形式であることを明記していました。

変更の背景

このコミットの背景には、net/http/cookiejar パッケージにおけるクッキーのドメインマッチングの厳密な定義と、それに伴う PublicSuffixList インターフェースの PublicSuffix メソッドの振る舞いの明確化の必要性がありました。

元のコミット CL 47560044 は、PublicSuffix メソッドに渡される domain 引数の期待されるフォーマットを明確にするために、コメントを追加しました。これは、クッキーのセキュリティとプライバシーを確保する上で非常に重要です。例えば、example.com のクッキーが sub.example.com にも適用されるべきか、あるいは com のようなトップレベルドメイン(TLD)に設定されたクッキーが意図せず広範囲に影響を与えないようにするためには、ドメインのパブリックサフィックス(Public Suffix)を正確に特定する必要があります。

しかし、このコミットは「undo」されています。コミットメッセージには「Still work to do. See http://golang.org/issue/7125」と記載されており、これは元の変更が不完全であったか、あるいはさらなる検討が必要であったことを示唆しています。issue/7125 を確認すると、net/http/cookiejarPublicSuffix メソッドの仕様がまだ不明確であり、特にIPアドレス、先頭/末尾のドット、大文字小文字の区別、IDN/Punycode の扱いについて、呼び出し側と実装側のどちらが責任を持つべきかという点が未解決であったことがわかります。

したがって、この「undo」コミットは、不完全なドキュメントを追加するよりも、未解決の問題を解決するまで元の状態に戻すことを選択したものです。

前提知識の解説

このコミットを理解するためには、以下の概念が重要です。

  • HTTP Cookie Jar: HTTP クッキーを保存、管理、取得するためのメカニズムです。Webブラウザがクッキーを扱うのと同様に、Goの net/http/cookiejar パッケージは、HTTPリクエストとレスポンス間でクッキーの状態を維持するために使用されます。
  • Public Suffix List (PSL): インターネット上のドメイン名システム(DNS)において、「パブリックサフィックス」とは、登録可能なドメイン名の最後の部分を指します。例えば、example.comcomexample.co.ukco.uk がこれに該当します。PSLは、これらのパブリックサフィックスのリストであり、主にクッキーのセキュリティを強化するために使用されます。クッキーはパブリックサフィックスに直接設定されるべきではなく、その下のレベルのドメイン(例: example.com)に設定されるべきです。これにより、悪意のあるサイトが com のようなTLDにクッキーを設定して、他のサイトのクッキーを盗むような攻撃を防ぎます。
  • Punycode: 国際化ドメイン名(IDN)をASCII文字のみで表現するためのエンコーディング方式です。日本語のような非ASCII文字を含むドメイン名(例: ドメイン.jp)は、DNSシステムで扱えるように xn--eckwd4c7cu472ff.jp のようにPunycodeに変換されます。
  • CL (Change List): Goプロジェクトにおける変更の単位です。Gitのコミットに相当しますが、Goのコードレビューシステム(Gerrit)ではCLという用語が使われます。
  • Issue Tracker: ソフトウェア開発において、バグや機能要求、改善点などを追跡するためのシステムです。Goプロジェクトでは golang.org/issue が使用されます。

技術的詳細

このコミットは、net/http/cookiejar/jar.go ファイル内の PublicSuffixList インターフェースの定義に焦点を当てています。

PublicSuffixList インターフェースは、以下のメソッドを定義しています。

type PublicSuffixList interface {
	// PublicSuffix returns the public suffix of domain.
	//
	// TODO: specify which of the caller and callee is responsible for IP
	// addresses, for leading and trailing dots, for case sensitivity, and
	// for IDN/Punycode.
	PublicSuffix(domain string) string

	// String returns a description of the source of this public suffix
	// list, e.g. "Mozilla Public Suffix List".
	String() string
}

元のコミット CL 47560044 では、PublicSuffix メソッドのコメントが以下のように変更されていました。

	// PublicSuffix returns the public suffix of domain.
	//
	// Domain is a lowercase punycoded domain name (not an IP address)
	// without leading or trailing dots. The returned value is in the
	// same form.
	PublicSuffix(domain string) string

この変更は、PublicSuffix メソッドの domain 引数に期待されるフォーマットを明確にしようとしました。具体的には、以下の点を指定していました。

  1. domain は小文字であること。
  2. domain は Punycode 化されていること。
  3. domain はIPアドレスではないこと。
  4. domain には先頭または末尾にドットが含まれないこと。
  5. 返される値も同じ形式であること。

しかし、今回のコミット 1e2b13355f888be3f9d31624ad178c4e4b0bb3f6 では、このコメントが元に戻され、代わりに TODO コメントが追加されています。

	// PublicSuffix returns the public suffix of domain.
	//
	// TODO: specify which of the caller and callee is responsible for IP
	// addresses, for leading and trailing dots, for case sensitivity, and
	// for IDN/Punycode.
	PublicSuffix(domain string) string

この TODO コメントは、PublicSuffix メソッドの仕様がまだ完全に定義されていないことを明確に示しています。特に、以下の点について、呼び出し側(PublicSuffix を呼び出す側)と実装側(PublicSuffixList を実装する側)のどちらが責任を持つべきかという問題が未解決であることを強調しています。

  • IPアドレス: domain がIPアドレスの場合の扱い。
  • 先頭/末尾のドット: domain に先頭または末尾のドットが含まれる場合の扱い。
  • 大文字小文字の区別: domain の大文字小文字の扱い。
  • IDN/Punycode: 国際化ドメイン名(IDN)や Punycode の扱い。

これらの問題は、クッキーのドメインマッチングの正確性とセキュリティに直接影響するため、非常に重要です。例えば、PublicSuffix の実装がIPアドレスを適切に扱わない場合、IPアドレスベースのサイトでクッキーのセキュリティ問題が発生する可能性があります。また、大文字小文字の区別が曖昧だと、異なる大文字小文字のドメイン名で同じクッキーが扱われるべきかどうかが不明確になり、予期せぬ動作につながる可能性があります。

このコミットは、不完全な仕様をドキュメント化するよりも、未解決の課題を明確にし、将来の改善を促すことを目的としています。

コアとなるコードの変更箇所

変更は src/pkg/net/http/cookiejar/jar.go ファイルの PublicSuffixList インターフェースの PublicSuffix メソッドのコメント部分のみです。

--- a/src/pkg/net/http/cookiejar/jar.go
+++ b/src/pkg/net/http/cookiejar/jar.go
@@ -34,9 +34,9 @@ import (
 type PublicSuffixList interface {
 	// PublicSuffix returns the public suffix of domain.
 	//
-	// Domain is a lowercase punycoded domain name (not an IP address)
-	// without leading or trailing dots. The returned value is in the
-	// same form.
+	// TODO: specify which of the caller and callee is responsible for IP
+	// addresses, for leading and trailing dots, for case sensitivity, and
+	// for IDN/Punycode.
 	PublicSuffix(domain string) string
 
 	// String returns a description of the source of this public suffix

コアとなるコードの解説

この変更は、コードの振る舞い自体には影響を与えません。影響を受けるのは、PublicSuffixList インターフェースの PublicSuffix メソッドのドキュメント(コメント)のみです。

元のコメントは、PublicSuffix メソッドの引数 domain がどのような形式であるべきか、そして返される値がどのような形式であるべきかを明確にしようとしていました。これは、このインターフェースを実装する開発者にとって非常に重要な情報です。

しかし、このコミットでは、その具体的な説明を削除し、代わりに TODO コメントを挿入しています。これは、元のコメントが提供しようとした情報が、まだ完全に合意された仕様ではない、あるいは不完全であると判断されたためです。

TODO コメントは、将来の作業項目として、PublicSuffix メソッドの仕様をより詳細かつ厳密に定義する必要があることを示しています。特に、IPアドレス、ドットの扱い、大文字小文字の区別、IDN/Punycode の変換責任といった、ドメイン名の正規化に関する複雑な側面について、呼び出し側と実装側のどちらが責任を持つべきかを明確にすることが求められています。

この変更は、Goの標準ライブラリにおけるAPIのドキュメントの厳密性と正確性に対するコミッターの姿勢を反映しています。不完全な情報や誤解を招く可能性のある情報を公開するよりも、未解決の課題を明示し、将来の改善を促すことを優先しています。

関連リンク

  • Go Issue 7125: コミットメッセージに記載されていますが、現在のGoのIssue Trackerでは直接この番号のIssueは見つかりませんでした。これは、Issue Trackerのシステム変更や、Issueが非常に古いことによる可能性があります。
  • 元の変更リスト (CL 47560044): https://golang.org/cl/47560044
  • この変更リスト (CL 51770044): https://golang.org/cl/51770044

参考にした情報源リンク