github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/net/http/cookiejar/jar.go (about)

     1  // Copyright 2012 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // Package cookiejar はメモリ内で RFC 6265 に準拠した http.CookieJar を実装します。
     6  package cookiejar
     7  
     8  import (
     9  	"github.com/shogo82148/std/net/http"
    10  	"github.com/shogo82148/std/net/url"
    11  	"github.com/shogo82148/std/sync"
    12  )
    13  
    14  // PublicSuffixListはドメインの公開サフィックスを提供します。例えば:
    15  //   - "example.com"の公開サフィックスは「com」です。
    16  //   - "foo1.foo2.foo3.co.uk"の公開サフィックスは「co.uk」です。
    17  //   - "bar.pvt.k12.ma.us"の公開サフィックスは「pvt.k12.ma.us」です。
    18  //
    19  // PublicSuffixListの実装は、複数のゴルーチンに対して安全に同時に使用できる必要があります。
    20  //
    21  // 常に""を返す実装は有効であり、テストには便利ですが、安全ではありません。これは、foo.comのHTTPサーバがbar.comのためにクッキーを設定できることを意味します。
    22  //
    23  // golang.org/x/net/publicsuffixパッケージには、公開サフィックスリストの実装があります。
    24  type PublicSuffixList interface {
    25  	PublicSuffix(domain string) string
    26  
    27  	String() string
    28  }
    29  
    30  // Options は新しい Jar の作成オプションです。
    31  type Options struct {
    32  
    33  	// PublicSuffixListは、ドメインに対してHTTPサーバがクッキーを設定できるかどうかを決定する公開サフィックスリストです。
    34  	//
    35  	// nilの値は有効であり、テストには便利ですが、セキュリティ上の理由から使用するべきではありません。これは、foo.co.ukのHTTPサーバがbar.co.ukに対してクッキーを設定できることを意味します。
    36  	PublicSuffixList PublicSuffixList
    37  }
    38  
    39  // Jarはnet/httpパッケージのhttp.CookieJarインターフェースを実装しています。
    40  type Jar struct {
    41  	psList PublicSuffixList
    42  
    43  	// muは残りのフィールドをロックします。
    44  	mu sync.Mutex
    45  
    46  	// entriesは、eTLD+1でキー付けされ、その名前/ドメイン/パスでサブキー付けされたエントリのセットです。
    47  	entries map[string]map[string]entry
    48  
    49  	// nextSeqNumは新しいクッキーが作成されたSetCookiesに割り当てられる次のシーケンス番号です。
    50  	nextSeqNum uint64
    51  }
    52  
    53  // Newは新しいクッキージャーを返します。nilの [*Options] はゼロのOptionsと同等です。
    54  func New(o *Options) (*Jar, error)
    55  
    56  // Cookiesは [http.CookieJar] インターフェースのCookiesメソッドを実装しています。
    57  //
    58  // URLのスキームがHTTPまたはHTTPSでない場合、空のスライスを返します。
    59  func (j *Jar) Cookies(u *url.URL) (cookies []*http.Cookie)
    60  
    61  // SetCookiesは [http.CookieJar] インターフェースのSetCookiesメソッドを実装します。
    62  //
    63  // URLのスキームがHTTPまたはHTTPSでない場合、何もしません。
    64  func (j *Jar) SetCookies(u *url.URL, cookies []*http.Cookie)