💟 Archived View for geminiprotocol.net › docs › ja › protocol-specification.gmi captured on 2024-08-18 at 17:15:13. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅ Previous capture (2024-07-08)

🚧 View Differences

-=-=-=-=-=-=-

Geminiのネットワヌクのプロトコルの仕様

バヌゞョン0.24.0

本文曞は以䞋の条項のもず、パブリックドメむンに眮かれたす。

Creative Commons CC0 1.0 Universal Public Domain Dedication

抂芁

本文曞ではファむル転送のためのGeminiプロトコルが芏定されたす。HTTP [RFC7230] の削ぎ萜ずしずいうより、Gopher [RFC1436] の环積的な改善ず芋るこずができたす。TCP [STD7] ポヌト1965で走り、TLS [RFC8446] が提䟛する暗号化を䌎う、単玔な芁求ず応答のトランザクションです。所定のMIME皮別 [RFC2045] 付きで任意のデゞタル内容を送れたすが、最もよく䜿われおいる軜量ハむパヌテキスト文曞があり、関連しお別途芏定する圢匏が䜿われたす。

Geminiハむパヌテキスト圢匏別名「gemtext」の仕様も参照

本文曞で䜿われる慣䟋

本文曞䞭のキヌワヌド「しなければならない (MUST)」「しおはならない (MUST NOT)」「求められる (REQUIRED)」「するこずになっおいる (SHALL)」「しないこずになっおいる (SHALL NOT)」「すべき (SHOULD)」「すべきでない (SHOULD NOT)」「勧める (RECOMMENDED)」「しおもよい (MAY)」「省ける (OPTIONAL)」は [BCP14] 䞭に蚘茉されおいる通りに解釈されたす。

抂芳

Geminiの第䞀の目暙は、実装が容易1日2日掛ければ、高々数癟行でサヌバヌやクラむアントができるであり぀぀も、有甚で単玔なプロトコルを提䟛するこずです。

Geminiで送り届ける際、TCP䞊の、既定ではポヌト番号1965䞊で最初の有人のGeminiミッションであるGemini 3は1965幎3月に飛行、暗号化されたトランザクションを提䟛するためにTLSを䜿いたす。サヌバヌずクラむアントはTLS 1.2以䞊に察応しなければなりたせん。䜿甚されるTLS蚌明曞の皮類CA基盀ないし自己眲名はただ議論䞭のため「ベストプラクティス」文曞に芏定されたす。既定のポヌト番号1965はホストシステムでの非特暩ポヌトであり、サヌビスを走らせる䞊で管理者アカりントを䜿う必芁がありたせん。

GeminiのアドレスはURI [STD66] に基づきたすが、以䞋の倉曎点がありたす。

1. 䜿われるスキヌムは「gemini」です

2. URIの利甚者情報の郚分は䜿っおはなりたせん

3. 空パス構成芁玠ず「/」のパス構成芁玠は等䟡で、サヌバヌは䞡方をリダむレクトに送るこずなく察応しなければなりたせん。

4. 指定しなければ、ポヌト番号は既定で1965です。

5. 認可節でのIPアドレスは䜿うべきではありたせん。

本文曞が抌さえる範囲は、クラむアントずサヌバヌがしなければいけないこずを負蚗するプロトコルのみです。しかし、䞭栞プロトコルの倖偎の仕様にあり、ここでは觊れないGeminiの別の偎面もありたす。クラむアントずサヌバヌ䞡方の実装者は、Geminiプロトコルのベストプラクティスの手匕きに埓うこずをお勧めしたす。

芁求

クラむアントはサヌバヌに接続し、芁求を送りたす。芁求は、絶察URIにCR文字13ずLF文字10が続いたものからなりたす。拡匵BNF [STD68] で衚すず以䞋です。

	request = absolute-URI CRLF

	; absolute-URIは [STD66] より
	; CRLFは [STD68] より

芁求するずき、URIは1024バむトを超えおはなりたせん。たたサヌバヌでは、URIがこの制限を超える芁求を拒絶しなければなりたせん。サヌバヌは利甚者情報付きの芁求を拒絶しなければなりたせん。クラむアントでは、芁求の䞀郚ずしおフラグメントを送っおはなりたせん。サヌバヌはこの芁求も拒絶しなければなりたせん。クラむアントが空パスで芁求するずき、クラむアントは芁求の末尟に「/」を加えるべきです。しかしサヌバヌでは、空のパスを扱えなければなりたせん。

応答

芁求があったずき、サヌバヌは、状態ず、芁求が成功した堎合はクラむアントが芁求した内容も、送り返すこずになりたす。状態は2桁の応答コヌドがあり、送る応答によりCRずLFに続けお情報を加えられたす。拡匵BNFでは以䞋の通りです。

        reply    = input / success / redirect / tempfail / permfail / auth

        input    = "1" DIGIT SP prompt        CRLF
        success  = "2" DIGIT SP mimetype      CRLF body
        redirect = "3" DIGIT SP URI-reference CRLF
                        ; 補足[STD66] は "" を有効なURI参照ずしお蚱しおいたす。
                        ;    リダむレクトの堎合には有効ずされたせん。
        tempfail = "4" DIGIT [SP errormsg]    CRLF
        permfail = "5" DIGIT [SP errormsg]    CRLF
        auth     = "6" DIGIT [SP errormsg]    CRLF

        prompt   = 1*(SP / VCHAR)
        mimetype = type "/" subtype *(";" parameter)
        errormsg = 1*(SP / VCHAR)
        body     = *OCTET

        VCHAR    =/ UTF8-2v / UTF8-3 / UTF8-4
        UTF8-2v  = %xC2 %xA0-BF UTF8-tail ; C1制埡集合はありたせん
                 / %xC3-DF UTF8-tail

	; URI-referenceは[STD66]より
	;
	; type         は[RFC2045]より
	; subtype      は[RFC2045]より
	; parameter    は[RFC2045]より
	;
	; CRLF         は[STD68]より
	; DIGIT        は[STD68]より
	; SP           は[STD68]より
	; VCHAR        は[STD68]より
	; OCTET        は[STD68]より
	; WSP          は[STD68]より
	;
	; UTF8-3       は[STD63]より
	; UTF8-4       は[STD63]より
	; UTF8-tail    は[STD63]より

[STD68]のVCHAR芏則は、ナニコヌドの非制埡コヌドポむントを含めるべく拡匵されたすたたUTF-8 [STD63] で笊号化されたす。本文の皮類はここでは指定したせん。送り届ける内容のMIME皮別によるためです。完了の応答内容を含められたすを送るにあたっお、サヌバヌは接続を閉じたす。このずきTLSのclose_notifyの仕組みを䜿っお、これ以䞊デヌタは送られないこずを、クラむアントに䌝えなければなりたせん。

状態倀は10から69の範囲にあり、䞡端を含みたす。ただし珟圚、党おの倀が定矩されおはいたせん。クラむアントが1桁目を䜿っお応答を扱っおもよいよう、グルヌプ化されおいたす。ただし2桁目は状態を曎に明らかにするためにあり、クラむアントでは䜕をすべきか決める際に、远加の桁を䜿うこずをお勧めしたす。サヌバヌでは、定矩されおいない状態コヌドを送っおはなりたせん。

状態コヌド

6グルヌプの状態コヌドがありたす。

クラむアントでは、「10」より小さいか「69」より倧きい状態コヌドを拒絶し、利甚者に譊告しなければなりたせん。クラむアントでは、「10」から「69」の間の未定矩状態コヌドを、1ビット目の既定の動䜜ずしお扱うべきです。そのため、状態「14」ではあたかもクラむアントで「10」を受け取ったかのように、状態「22」ではクラむアントであたかも「20」を受け取ったかのように、それぞれ動䜜するべきです。

入力埅ち

サヌバヌでは、クラむアントの利甚者の入力を埅ちたす。状態コヌドの埌に送られる远加情報はテキストです。クラむアントは利甚者に情報を求めるべく、プロンプトを出すずきに䜿わなければなりたせん。たた入力情報は、問い合わせ郚分ずしお同じURIに送り返したす。空癜は「%20」に笊号化しなければなりたせん。クラむアントでは耇数行からなる入力項目を受けおも構いたせん。たたその堎合、改行は「%0A」ずしお笊号化するべきです。サヌバヌでは、「%0A」ず「%0D%0A」の䞡方を改行ずしお認識すべきです。珟圚この分類には2぀の状態コヌドが定矩されおいたす。

	input  = "1" DIGIT SP prompt CRLF
	prompt = 1*(SP / VCHAR)

クラむアントで既に問い合わせ文字列を含むURIで1xの応答を受け取っおいるずき、クラむアントでは問い合わせ文字列を利甚者の入力で眮き換えなければなりたせん。䟋えば䞎えられたURIの結果が次のように応答10であったずしたす。

	gemini://example.net/search?hello

クラむアントからは次の芁求を送りたす。

	gemini://example.net/search?the%20user%20input

状態10

基本の入力状態コヌドです。クラむアントでは、利甚者に入力のプロンプトを出さなければなりたせん。入力は [STD66] によりURI笊号化しお、この応答を生成した同じURIに、問い合わせを送るべきです。

状態11。機密入力

状態コヌド10に埓いたすが、パスワヌドのような機密性のある入力に䜿いたす。クラむアントは状態コヌド10に埓っお質問を衚瀺すべきです。ただし利甚者の入力は「肩越しに芗いお」読み取られるこずを防ぐため、画面に衚瀺すべきではありたせん。

成功

芁求が扱われ、サヌバヌからクラむアントに内容を送りたした。远加情報は内容のMIME皮別で、 [RFC2045] により指定されたす。クラむアントでは、理解できないMIME匕数は、単に無芖しお扱わなければなりたせん。

応答本文は単なる生の内容であり、gopher [RFC1436] よろしく、テキストないしバむナリです。圧瞮や断片化、内容や転送の笊号化ずいった類の察応はありたせん。サヌバヌでは最終バむトの埌に接続を閉じ、「応答末尟」信号はありたせん。

むンタヌネットメディア皮別は正統な圢匏で登録されたものです。Geminiを介しお転送される内容は、転送に先立っお適切䞔぀正統な圢匏で衚珟されなければなりたせん。ただし次の段萜で定矩されるように、「text」皮別は䟋倖です。

正統な圢匏においお、「text」のメディア副皮別では、テキスト行の改行ずしおCRLFが䜿われたす。Geminiはこの芁件を緩め、LF単独のテキストメディアの転送を蚱したすただしCR単独は蚱したせん。ただし、応答本文党䜓で䞀貫性を持っお改行されおいる堎合に限りたす。Geminiのクラむアントでは、Geminiを介しお受け取ったテキストメディア䞭のCRLFずLFを、改行の衚珟ずしお受け付けなければなりたせん。

クラむアントは、文字集合がUTF-8のtext/geminiず、構造的にUTF-8の郚分集合であるUS-ASCII [STD80] ないしUTF-8の文字集合のtext/plainのMIME皮別に察応しなければなりたせん。クラむアントは他の文字集合のtext/plainに察応しおも構いたせん。指定された文字集合がなく、text/*のMIME皮別が瀺されおいるずき、クラむアントでは文字集合がUTF-8ず仮定すべきです。ディスクに保存されるものであったり、他のプログラムに枡されるものであったりしおも、クラむアントは他のMIME皮別も扱うべきです。

text/geminiの仕様は別途定められたす。

この分類に定矩された状態は20だけです。

	success  = "2" DIGIT SP mimetype CRLF body
	mimetype = type "/" subtype *(";" parameter)
	body     = *OCTET

状態20

サヌバヌでは芁求が正垞に解析しお理解され、䞎えられたMIME皮別の内容を送り届けたす。

リダむレクト

サヌバヌからクラむアントに、内容のある新しい堎所を送りたす。远加情報は絶察たたは盞察のURIです。問い合わせ文字列぀きの芁求に察しお、サヌバヌから応答でリダむレクトが送られたずき、クラむアントでは問い合わせ文字列を新しい堎所に適甚しおはなりたせん。問い合わせ文字列が新しい堎所で重芁であれば、サヌバヌでは問い合わせをリダむレクトの䞀郚ずしお含めおも構いたせん。サヌバヌでは、リダむレクトにフラグメントを含めるべきではありたせん。しかしこれが䞎えられおいるずき、か぀クラむアントに元のURIから適甚できるフラグメントがあるずき、どちらのフラグメントを適甚するかはクラむアントに委ねられたす。クラむアントでは、埓うリダむレクトの数を5回に制限しなければなりたせん。この分類には2぀の定矩されたコヌドがありたす。

	redirect = "3" DIGIT SP URI-reference CRLF
                        ; 補足RFC-3987/3987では "" を有効なURI参照にできたす。
                        ;    しかしリダむレクトの堎合に有効な意味はありたせん。

状態30。䞀時リダむレクト

基本のリダむレクトコヌド。リダむレクトは䞀時的で、クラむアントでは元のURIで内容を芁求し続けるべきです。

状態31。氞続リダむレクト

内容の䜍眮は氞続的に新しい堎所に移りたした。クラむアントでは以埌、新しい堎所を䜿っお䞎えられた内容を取埗すべきです。

䞀時的な倱敗

芁求が倱敗したした。応答本文はありたせん。倱敗の性質は䞀時的なものです。぀たり将来的に同䞀の芁求は成功する可胜性がありたす。䌝文で倱敗の远加情報を提䟛しお構いたせんが、省けたす。もしあるなら、クラむアントでは人間の利甚者に衚瀺すべきです。この分類の䞋には5぀の状態コヌドがありたす。

        tempfail = "4" DIGIT [SP errormsg] CRLF
	errormsg = 1*(SP / VCHAR)

状態40

サヌバヌに䞍特定の条件が存圚し、クラむアントに送り届けかねおいたす。しかし、クラむアントは改めお内容の獲埗を詊みるこずができたす。

状態41。サヌバヌ䞍胜

オヌバヌロヌドやサヌバヌの保守䜜業のため利甚できたせんHTTP 503ず関連。

状態42。CGIの゚ラヌ

CGIやそれに䌌た動的な内容を生成するシステムの凊理が、予期せず異垞終了したり、時間切れになったりしたした。

状態43。プロキシ゚ラヌ

サヌバヌで正垞にリモヌトホストずのトランザクションを完了できなかったため、プロキシの芁求が倱敗したしたHTTP 502、504ず関連。

状態44。倱速

サヌバヌから、クラむアントに芁求を倱速させるよう芁求されおいたす。指数的バックオフを䜿うべきです。芁求間の遅延させる長さは、この状態が返されなくなるたで二倍されおいきたす。

氞続的な倱敗

芁求が倱敗したした。応答本文はありたせん。倱敗の性質は氞久であっお、この内容ぞの曎なる芁求には同じ状態が返され、クラむアントは同じ芁求をするべきではありたせん。䌝文で倱敗に぀いおの远加情報を提䟛しおも良いですが、省けたす。情報があるずきは、クラむアントでは利甚者に衚瀺すべきです。この分類には5぀の状態コヌドがありたす。

	permfail = "5" DIGIT [SP errormsg] CRLF
	errormsg = 1*(SP / VCHAR)

状態50

ᅵᅵ甚の氞続的な倱敗コヌドです。

状態51。遺倱

芁求された資源は芋぀からず゚リア51では䜕も芋぀かりたせんこれ以䞊の情報はありたせん。将来は存圚するかもしれたせんし、そうでないかもしれたせん。誰に分かるものですか。

状態52。散逞 (gone)

芁求された資源は最早入手できず、再び手に入るこずもありたせん。怜玢゚ンゞンや類するツヌルでは、この資源を玢匕から削陀すべきです。内容収集噚では資源の芁求を止め、人間の利甚者に賌読しおいた資源が散逞したこずを䌝えるべきですHTTP 410が関連。

状態53。プロキシ芁求拒絶

ドメむンの資源ぞの芁求がサヌバヌから送られず、サヌバヌでプロキシの芁求が受け付けられたせん。

状態59。䞍正な芁求

サヌバヌでクラむアントの芁求を解析できたせんでした。䞍正な芁求か、「芁求」節に挙げられた制限に違反する芁求ず芋られたす。

クラむアント蚌明曞

芁求された資源にアクセスするには、クラむアント蚌明曞が必芁です。必芁ずなる理由の䟋ずしお、アクセス制埡やアプリケヌションで、サヌバヌ偎の状態の維持に掻甚するこずがありたす。蚌明曞なく芁求された堎合、やり取りは1床限りにすべきです。芁求が蚌明曞付きでされた堎合、サヌバヌでは受け付けず、別の蚌明曞で芁求し盎すべきです。远加情報には、蚌明曞が必芁な理由や、拒絶した理由に぀いおの詳现を含められたす。サヌバヌはそうした情報を含めるべきであり、クラむアントでは利甚者に衚瀺すべきです。この分類には3぀の状態コヌドが定矩されおいたす。

	auth     = "6" DIGIT [SP errormsg] CRLF
	errormsg = 1*(SP / VCHAR)

状態60

内容を埗るには、クラむアント蚌明曞が必芁です。内容を利甚するためにクラむアントから蚌明曞を提䟛しなければなりたせん。蚌明曞なくそれ以䞊芁求し盎すべきではありたせん。この状態コヌドで応答するずきに生成された蚌明曞のスコヌプには、䞀定の制限を掛けるべきです。この状態コヌドを受けたホストずポヌト番号、元の芁求のURLのパス、その䞋にある党おのパスが、そのスコヌプです。サヌバヌでは、ホストずポヌト番号の異なるパスに、違う蚌明曞を必芁ずしおも構いたせん。サヌバヌでは、䞎えられたパスに沿う任意の内容に察しお、同じ蚌明曞が䜿えるようにすべきです。以䞋に䟋を瀺したす。

	gemini://example.com/private/		-- 蚌明曞Aを芁求
	gemini://example.com/private/r1		-- 蚌明曞Aを芁求
	gemini://example.com/private/r2/r3	-- 蚌明曞Aを芁求
	gemini://example.com/other/		-- 蚌明曞Bを芁求
	gemini://example.com/other/r1		-- 蚌明曞Bを芁求
	gemini://example.com/other/r2/r3	-- 蚌明曞Bを芁求
	gemini://example.com/random		-- 蚌明曞は䞍芁

クラむアントでは、クラむアント蚌明曞を自動生成しおはなりたせん。利甚者の䞻䜓的な関䞎なく、その蚌明曞を䜿っお芁求を繰り返しおはなりたせん。クラむアントでは、利甚者に指瀺されない限り、異なるホスト、異なるポヌト番号、元の芁求のURLのパスより䞊の同じホストずポヌト番号のパスに察する芁求で、この状態コヌドぞの応答で生成されたクラむアント蚌明曞を䜿っおはなりたせん。

状態61。蚌明曞の䞍承認

䞎えられたクラむアント蚌明曞には、芁求された資源にアクセスする暩限がありたせん。問題が蚌明曞自䜓になく、他の資源に察しおは暩限がある可胜性がありたす。

状態62。無効な蚌明曞

䞎えられたクラむアント蚌明曞は䞍圓であるため、受け付けられたせんでした。蚌明曞の内容やそれ自䜓に問題があるこずを瀺しおおり、芁求された資源に぀いおは考慮されたせん。最もありそうな原因は、蚌明曞が劥圓ずされる期間の開始日が未来になっおいるか、期限日を過ぎおいるかです。䞍圓な眲名やX509暙準芁件の違反を瀺しおいる可胜性もありたす。

TLSの利甚

最小バヌゞョン芁件

執筆時点 (2021) で、既存のTLSラむブラリは必ずしもTLS 1.3に察応しおいるわけではありたせんが、倚く党おがTLS 1.2に察応しおいたす。そのためTLS 1.2が最小バヌゞョン芁件ずなりたす。実装者は、TLS 1.2ではプロトコルの暗号化の亀枉段階の䞀郚で、サヌバヌ名ずもし䜿われる堎合はクラむアント蚌明曞を平文で送るこずにご留意ください。クラむアントではTLS 1.2接続が確立されたずき、譊告しおも構いたせん。たた、クラむアント蚌明曞がTLS 1.2を介しお転送されたずき、利甚者に譊告すべきです。

接続を閉じる

Geminiサヌバヌでは、接続を閉じるためにTLSのclose_notifyの実装を䜿わなければなりたせん。クラむアントでは、既定では接続を閉じるべきではありたせんが、利甚者により蚭定された制限を超えた内容の堎合は構いたせん。クラむアントずサヌバヌの䞡方ずも、TLSのclose_notifyの仕組みが䜿われなかったずき䟋えば適切にTLS接続を終了させるこずなく゜ケットを閉じた、䜎局の゜ケット゚ラヌを扱うべきです。クラむアントでは、そうした堎合に利甚者に通知すべきです。サヌバヌでは、そうした堎合にログに出しおも構いたせん。

サヌバヌ名衚瀺

クラむアントずサヌバヌの実装は、TLSサヌバヌ名衚瀺 (Server Name Indication; SNI) に察応しなければなりたせん。クラむアントでは、暩嚁節がホスト名であるURLぞの芁求時に、ホスト名の情報を含めなければなりたせん。

TLSサヌバヌ蚌明曞の怜蚌

Geminiプロトコル仕様では、クラむアントが受け取ったサヌバヌ蚌明曞を怜蚌する䞊で䜿わなければいけない手段を芏定したせん。Geminiの実装では、オペレヌティングシステムやりェブブラりザで提䟛される、予め信頌された認蚌局の䞀芧に䟝存する、広く䜿われる手法以倖の「代替」怜蚌スキヌムに぀いお、プロトコルの起源以来、非公匏に詊みおきたした。こうした手法の正匏な仕様は、実践を積み重ねおいく䞭で進展しおいくかもしれたせん。

クラむアントではTrust On First Useを䜿うこずが匷く掚奚されたす。「TOFU」ずも呌ばれる、蚌明曞をピン留めする仕組みであり、怜蚌の仕組みの原則ずしお、自己眲名蚌明曞を䞍圓ずしお拒絶したせん。そのような仕組みにおいおは、たずGeminiクラむアントがサヌバヌに接続したずき、䜕であれ提瀺された蚌明曞を受け付けたす。その蚌明曞の指王ず期限日は氞続的なデヌタベヌスに保存され、サヌバヌのホスト名ずポヌト番号に玐付けたす。以降そのホスト名ずポヌト番号ぞの接続では毎回、受け取った蚌明曞の指王が蚈算され、デヌタベヌスに保管されおいるものず比范されたす。指王が合臎しないが、以前の蚌明曞の期限日が過ぎおいなければ、䞭間者攻撃の蚌拠の可胜性があるず考えられたす。クラむアントでは、この基本的な仕組みを、远加のセキュリティ察策で拡匵しおも構いたせん。䟋えば、耇数のネットワヌクの芖点で受け取った蚌明曞を比范したり、DNS Based Authentication of Named Entities (DANE) [RFC6698] を䜿ったりするなどです。

䞭継噚プロキシ

抂芁ず原則

資源を芁求したいGeminiクラむアントは通垞、資源のあるURL gemini://の、暩嚁郚分で瀺されるサヌバヌに、適切な芁求を送るこずが期埅されたす。しかしクラむアントでは、たず䞭継サヌバヌに送るよう構成しおも構いたせん。そしおそのサヌバヌから元々送るこずになっおいたサヌバヌに接続し、応答を䞭継するのです。そうした䞭継噚以䞋「プロキシ」もたた、他のプロキシを䜿っおも構いたせん。こうしお、ナヌザヌ゚ヌゞェントず元のサヌバヌの間に、プロキシの連鎖が圢成されたす。

Geminiプロキシで提䟛される補助機胜には以䞋がありたれたすが、この限りではありたせん。

Geminiプロキシに぀いお、プロトコル氎準に特別なこずはありたせん。クラむアントがそれらに接続し芁求を送るず、䞊で詳述した通り、「普通の」Geminiサヌバヌに接続するのず党く同じ方法で応答を解釈したす。もちろんGeminiプロキシもたたGeminiサヌバヌですただし党おのサヌバヌがプロキシずは限りたせん。Geminiプロキシの他ずは違う特城は、「所有しおいない」資源ぞの芁求を扱えるこずです。プロキシではそうした芁求だけを扱う必芁はありたせん。同じマシンで走る同じプログラムでも、芁求にプロキシずしお応答したりしなかったりしお構いたせん。

゚ラヌ報告

Geminiプロキシから元のサヌバヌに接続し、暙準的なGeminiの芁求ず応答のやり取りが完了したずき、か぀元のサヌバヌから受け取った応答の状態コヌドが゚ラヌコヌドであるずき぀たり1桁目が4か5、プロキシは同じ応答ヘッダをナヌザヌ゚ヌゞェントに送るべきです。

状態コヌド43「プロキシ゚ラヌ」は、Geminiプロキシが遠隔ホストずのやり取りを正垞に完了できなかったずきに䜿うこずを目的ずしおいたす。ここでの「正垞に」の意味は、応答コヌド20「成功」を受け取るこずではありたせん。プロキシから状態コヌド43の応答を返すべき状況には以䞋がありたすが、この限りではありたせん。

プロキシは、倧元のサヌバヌずのGeminiトランザクションを完了し、クラむアント蚌明曞の芁求を受けたずき、状態コヌド43を䜿っおも構いたせん。ただしこのずき、プロキシには事前にクラむアント蚌明曞が構成されおおらず、関連する資源に䜿うための、玐付く私有鍵ががないものずしたす。ナヌザヌ゚ヌゞェントではこれらの蚌明曞を生成し、倧元のサヌバヌずの接続で再利甚するためにプロキシに枡す、盎感的なむンバンド管理の方法はありたせん。

プラむバシヌずセキュリティの考慮事項

Geminiプロキシはナヌザヌ゚ヌゞェントず元のサヌバヌの間の「䞭間者」でもあり、プラむバシヌずセキュリティに圱響したす。Geminiプロキシはナヌザヌ゚ヌゞェントず元のサヌバヌの間の゚ンドツヌ゚ンドのTLS暗号が機胜したせんこのためにプロキシず呌ばれ、トンネルずは呌ばれたせん。Geminiプロキシには、応答ず芁求の䞡方を奜きに倉曎したり、氞久に履歎に控えたりする胜力がありたす。

したがっお、Geminiプロキシは信頌された集団を念頭に眮いおいたす。期埅されおいるよくある甚途は、ナヌザヌ゚ヌゞェントず同じマシンでロヌカルで走っおいるか、同じロヌカルネットワヌクにあり、同じ利甚者により運甚されおいる違うマシンで走っおいるプロキシです。サヌドパヌティにより運甚されおいる遠隔Geminiプロキシを䜿うには、そのサヌドパヌティぞの高床な信頌を芁したす。利甚者ず遠隔プロキシの運甚者の䞡方がTLS蚌明曞の指王を泚意深く確認すれば、内茪で高床に信頌しおいる小さなコミュニティ内でプロキシの共有を掻甚できたす。

䞊の考慮事項を平易に蚀うず、以䞋ずなりたす。

Geminiの応答䟋

以䞋の䟋では、サヌバヌずクラむアントの2぀の陣営がありたす。それぞれの動䜜は角括匧「[]」で囲たれおおり、文字コヌド13ず10を瀺す「CRLF」のような幟぀かの終端蚘号や、匕甚笊で囲たれたテキスト衚蚘がありたすただし匕甚笊は入力に含たれたせん。「mime皮別」は [RFC2045] によるMIME皮別を衚し、「内容  」は芁求された内容の意味です。

以䞋の䟋では、サヌバヌが利甚者の入力を芁求し、クラむアントで収集し、利甚者の入力蟌みで芁求を再提出しおいたす。

Client: 接続を開く
	Client: "gemini://example.net/search" CRLF
	Server: "10 怜玢する蚀葉を入力しおください" CRLF
	Server: 接続を閉じる
	Client: 利甚者にプロンプトが出お入力が埗られたす
	Client: 接続を開く
	Client: "gemini://example.net/search?gemini%20search%20engines" CRLF
	Server: "20 " mime皮別 CRLF 内容  
	Server: 接続を閉じる

クラむアントから内容を芁求したす。この䟋では画像ファむルです。

	Client: 接続を開く
	Client: "gemini://example.net/image.jpg" CRLF
	Server: "20 image/jpeg" CRLF <binary data of JPEG image>
	Server: 接続を閉じる

この䟋では、サヌバヌによりクラむアントが資源の新しい堎所ぞリダむレクトされおいたす。

	Client: 接ᅵᅵᅵを開く
	Client: "gemini://example.net/current" CRLF
	Server: "30 /new" CRLF
	Server: 接続を閉じる
	Client: 接続を開く
	Client: "gemini://example.net/new" CRLF
	Server: "20 " mime皮別 CRLF 内容  
	Server: 接続を閉じる

以䞋では、サヌバヌがクラむアント蚌明曞を芁求し、続く芁求でクラむアントから蚌明曞を提䟛しおいたす。

	Client: 接続を開く。クラむアント蚌明曞は送られおいない
	Client: "gemini://example.net/protected/" CRLF
	Server: "60 この資源にアクセスするには蚌明曞が必芁です" CRLF
	Server: 接続を閉じる
	Client: アプリケヌションが蚌明曞を埗るために䜕らかの動䜜をする
	Client: 接続を開く。クラむアントから蚌明曞を送る
	Client: "gemini://example.net/protected/" CRLF
	Server: "20 " mime皮別 CRLF 内容  
	Server: 接続を閉じる

この䟋では、クラむアント蚌明曞ず利甚者の入力を束ねお、利甚者毎のサヌバヌ偎の状態を維持し、2぀の数字を加算しおいたす。

	Client: 接続を開く。クラむアント蚌明曞は送られおいない
	Client: "gemini://example.net/application/" CRLF
	Server: "60 サヌバヌ偎の状態を保぀ため、蚌明曞が必芁です" CRLF
	Server: 接続を閉じる
	Client: アプリケヌションで、蚌明曞を埗るために䜕らかの動䜜をする
	Client: 接続を開く。クラむアント蚌明曞が送られる
	Client: "gemini://example.net/application/" CRLF
	Server: "10 0から9000たでの数倀を入れおください" CRLF
	Server: 接続を閉じる
	Client: 利甚者にプロンプトを出し、入力を埗る
	Client: 接続を開き、クラむアント蚌明曞が送られる
	Client: "gemini://example.net/application/?42" CRLF
	Server: クラむアント蚌明曞を認識し、蚌明曞に玐付くメモリないしディスクに倀「42」を保管
	Server: "10 0ず9000の間の別の数倀を入れおください" CRLF
	Server: 接続を閉じる
	Client: 利甚者のプロンプトを出し、入力を埗る
	Client: 接続を開く。クラむアント蚌明曞が送られる
	Client: "gemini://example.net/application/?1923" CRLF
	Server: クラむアント蚌明曞を認識し、保管された倀「42」を取り出し、受け取った倀「1923」に加える
	Server: "20 text/plain" CRLF "42足す1923は1965です。ごきげんよう"
	Server: 接続を閉じる

この䟋では、゚ラヌを説明する远加テキスト付きでサヌバヌから䞀時的な倱敗を送りたす。

	Client: 接続を開く
	Client: "gemini://example.net/data" CRLF
	Server: "41 珟圚は保守䜜業䞭" CRLF
	Server: 接続を閉じる

最埌の䟋は、それ以䞊の説明のない氞続的な倱敗のものです。

	Client: 接続を開く
	Client: "gemini://example.net/data" CRLF
	Server: "50" CRLF
	Server: 接続を閉じる

芏範的な参照

有益な参照情報