[インデックス 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/cookiejar
の PublicSuffix
メソッドの仕様がまだ不明確であり、特にIPアドレス、先頭/末尾のドット、大文字小文字の区別、IDN/Punycode の扱いについて、呼び出し側と実装側のどちらが責任を持つべきかという点が未解決であったことがわかります。
したがって、この「undo」コミットは、不完全なドキュメントを追加するよりも、未解決の問題を解決するまで元の状態に戻すことを選択したものです。
前提知識の解説
このコミットを理解するためには、以下の概念が重要です。
- HTTP Cookie Jar: HTTP クッキーを保存、管理、取得するためのメカニズムです。Webブラウザがクッキーを扱うのと同様に、Goの
net/http/cookiejar
パッケージは、HTTPリクエストとレスポンス間でクッキーの状態を維持するために使用されます。 - Public Suffix List (PSL): インターネット上のドメイン名システム(DNS)において、「パブリックサフィックス」とは、登録可能なドメイン名の最後の部分を指します。例えば、
example.com
のcom
やexample.co.uk
のco.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
引数に期待されるフォーマットを明確にしようとしました。具体的には、以下の点を指定していました。
domain
は小文字であること。domain
は Punycode 化されていること。domain
はIPアドレスではないこと。domain
には先頭または末尾にドットが含まれないこと。- 返される値も同じ形式であること。
しかし、今回のコミット 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: https://golang.org/issue/7125
- 元の変更リスト (CL 47560044): https://golang.org/cl/47560044
- この変更リスト (CL 51770044): https://golang.org/cl/51770044
参考にした情報源リンク
- Public Suffix List
- RFC 6265 (HTTP State Management Mechanism)
- Punycode (RFC 3492)
- Go の
net/http/cookiejar
パッケージのドキュメント (コミット当時のバージョンとは異なる可能性がありますが、概念理解に役立ちます) - Go のコードレビュープロセス (Gerrit)
- Go の Issue Tracker
[インデックス 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/cookiejar
の PublicSuffix
メソッドの仕様がまだ不明確であり、特にIPアドレス、先頭/末尾のドット、大文字小文字の区別、IDN/Punycode の扱いについて、呼び出し側と実装側のどちらが責任を持つべきかという点が未解決であったことがわかります。
したがって、この「undo」コミットは、不完全なドキュメントを追加するよりも、未解決の問題を解決するまで元の状態に戻すことを選択したものです。
前提知識の解説
このコミットを理解するためには、以下の概念が重要です。
- HTTP Cookie Jar: HTTP クッキーを保存、管理、取得するためのメカニズムです。Webブラウザがクッキーを扱うのと同様に、Goの
net/http/cookiejar
パッケージは、HTTPリクエストとレスポンス間でクッキーの状態を維持するために使用されます。 - Public Suffix List (PSL): インターネット上のドメイン名システム(DNS)において、「パブリックサフィックス」とは、登録可能なドメイン名の最後の部分を指します。例えば、
example.com
のcom
やexample.co.uk
のco.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
引数に期待されるフォーマットを明確にしようとしました。具体的には、以下の点を指定していました。
domain
は小文字であること。domain
は Punycode 化されていること。domain
はIPアドレスではないこと。domain
には先頭または末尾にドットが含まれないこと。- 返される値も同じ形式であること。
しかし、今回のコミット 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
参考にした情報源リンク
- Public Suffix List
- RFC 6265 (HTTP State Management Mechanism)
- Punycode (RFC 3492)
- Go の
net/http/cookiejar
パッケージのドキュメント (コミット当時のバージョンとは異なる可能性がありますが、概念理解に役立ちます) - Go のコードレビュープロセス (Gerrit)
- Go の Issue Tracker