github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/net/http/httputil/persist.go (about) 1 // Copyright 2009 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 httputil 6 7 import ( 8 "github.com/shogo82148/std/bufio" 9 "github.com/shogo82148/std/io" 10 "github.com/shogo82148/std/net" 11 "github.com/shogo82148/std/net/http" 12 "github.com/shogo82148/std/net/textproto" 13 "github.com/shogo82148/std/sync" 14 ) 15 16 var ( 17 // Deprecated: 使用されていません。 18 ErrPersistEOF = &http.ProtocolError{ErrorString: "persistent connection closed"} 19 20 // Deprecated: 使用されていません。 21 ErrClosed = &http.ProtocolError{ErrorString: "connection closed by user"} 22 23 // Deprecated: 使用されていません。 24 ErrPipeline = &http.ProtocolError{ErrorString: "pipeline error"} 25 ) 26 27 // ServerConnはGoの初期のHTTP実装の遺物です。 28 // それは低レベルで古く、Goの現在のHTTPスタックでは使用されていません。 29 // Go 1よりも前に削除すべきでした。 30 // 31 // Deprecated: 代わりに [net/http] パッケージのServerを使用してください。 32 type ServerConn struct { 33 mu sync.Mutex 34 c net.Conn 35 r *bufio.Reader 36 re, we error 37 lastbody io.ReadCloser 38 nread, nwritten int 39 pipereq map[*http.Request]uint 40 41 pipe textproto.Pipeline 42 } 43 44 // NewServerConnはGoの初期のHTTP実装の遺物です。 45 // これは低レベルで古いものであり、現行のGoのHTTPスタックでは使用されていません。 46 // Go 1より前に削除すべきでした。 47 // 48 // Deprecated: 代わりに package [net/http] のServerを使用してください。 49 func NewServerConn(c net.Conn, r *bufio.Reader) *ServerConn 50 51 // Hijackは [ServerConn] を切り離し、基礎となる接続と、残っているデータを持つ読み込み側のbufioを返します。 HijackはReadがkeep-aliveロジックの終了を示すまえに呼び出される可能性があります。ユーザーは [ServerConn.Read] や [ServerConn.Write] が進行中の間にHijackを呼び出すべきではありません。 52 func (sc *ServerConn) Hijack() (net.Conn, *bufio.Reader) 53 54 // Closeによって [ServerConn.Hijack] され、その後基礎となる接続も閉じます。 55 func (sc *ServerConn) Close() error 56 57 // Readはワイヤ上の次のリクエストを返します。[ErrPersistEOF] は、優雅にもうリクエストがないことが確定した場合に返されます(例えば、HTTP/1.0接続の最初のリクエスト後、またはHTTP/1.1接続のConnection: close後など)。 58 func (sc *ServerConn) Read() (*http.Request, error) 59 60 // Pendingは、接続されたリクエストの未回答数を返します。 61 func (sc *ServerConn) Pending() int 62 63 // Writeはreqに応じたrespを書き込みます。接続を正常に終了させるためには、 64 // Response.Closeフィールドをtrueに設定してください。Writeは、[ServerConn.Read] 側で返される 65 // すべてのエラーに関係なく、エラーが返されるまで操作可能であると見なされるべきです。 66 func (sc *ServerConn) Write(req *http.Request, resp *http.Response) error 67 68 // ClientConnはGoの初期のHTTP実装の遺物です。 69 // 低レベルで古く、現在のGoのHTTPスタックでは使用されていません。 70 // Go 1の前に削除すべきでした。 71 // 72 // Deprecated: 代わりにpackage [net/http] のClientまたはTransportを使用してください。 73 type ClientConn struct { 74 mu sync.Mutex 75 c net.Conn 76 r *bufio.Reader 77 re, we error 78 lastbody io.ReadCloser 79 nread, nwritten int 80 pipereq map[*http.Request]uint 81 82 pipe textproto.Pipeline 83 writeReq func(*http.Request, io.Writer) error 84 } 85 86 // NewClientConnはGoの初期のHTTP実装の遺産です。 87 // これは低レベルで古く、現在のGoのHTTPスタックでは使用されていません。 88 // Go 1より前に削除すべきでした。 89 // 90 // Deprecated: 代わりにパッケージ [net/http] のClientまたはTransportを使用してください。 91 func NewClientConn(c net.Conn, r *bufio.Reader) *ClientConn 92 93 // NewProxyClientConn はGo言語の初期のHTTP実装の遺物です。 94 // これは低レベルで古く、現在のGoのHTTPスタックでは使用されていません。 95 // Go 1 より前に削除する必要があります。 96 // 97 // Deprecated: 代わりに package [net/http] の Client または Transport を使用してください。 98 func NewProxyClientConn(c net.Conn, r *bufio.Reader) *ClientConn 99 100 // Hijackは [ClientConn] を切り離し、基礎となる接続と読み込み側のbufioを返します。 101 // また、左にデータが残っているかもしれない読み込み側のbufioも返します。 102 // HijackはユーザーまたはReadがkeep-aliveロジックの終了をシグナルした前に呼び出すことができます。 103 // ユーザーは、[ClientConn.Read] または ClientConn.Writeが進行中の間にHijackを呼び出さないでください。 104 func (cc *ClientConn) Hijack() (c net.Conn, r *bufio.Reader) 105 106 // Closeは [ClientConn.Hijack] を呼び出し、その後下層の接続も閉じます。 107 func (cc *ClientConn) Close() error 108 109 // Writeはリクエストを書き込みます。もしHTTP keep-aliveによって接続が閉じられた場合、[ErrPersistEOF] エラーが返されます。もしreq.Closeがtrueの場合、このリクエストの後にkeep-alive接続が論理的に閉じられ、対向サーバーに通知されます。ErrUnexpectedEOFは、リモートが基礎となるTCP接続を閉じたことを示しており、通常は正常な終了と見なされます。 110 func (cc *ClientConn) Write(req *http.Request) error 111 112 // Pendingは、接続に送信された未応答のリクエストの数を返します。 113 func (cc *ClientConn) Pending() int 114 115 // Readはワイヤから次のレスポンスを読み込みます。有効なレスポンスは [ErrPersistEOF] と一緒に返される場合があります。これはリモートがこれがサービスされる最後のリクエストであることを要求したことを意味します。Readは [ClientConn.Write] と同時に呼び出すことができますが、他のReadと同時には呼び出すことはできません。 116 func (cc *ClientConn) Read(req *http.Request) (resp *http.Response, err error) 117 118 // Doはリクエストを書き込み、レスポンスを読み取る便利なメソッドです。 119 func (cc *ClientConn) Do(req *http.Request) (*http.Response, error)