💟 Archived View for geminiprotocol.net › docs › ja › protocol-specification.gmi captured on 2024-07-08 at 23:58:51. Gemini links have been rewritten to link to archived content

View Raw

More Information

➡ Next capture (2024-08-18)

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

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の仕様はtext/geminiの仕様で䞎えられたす。

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

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

状態20

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

リダむレクト

サヌバヌはクラむアントに内容がある新しい堎所を送りたす。远加情報は絶察URIたたは盞察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クラむアントは通垞、資源のgemini://のURLの暩嚁郚分で瀺されるサヌバヌに適切な芁求を送るこずが期埅されたす。しかしクラむアントは代えお先んじお元のサヌバヌに接続し応答を䞭継する䞭継サヌバヌに送るよう構成しおも構いたせん。そうした䞭継噚以降「プロキシ」自䜓、他のプロキシを䜿っおも構いたせん。こうしおナヌザヌ゚ヌゞェントず元のサヌバヌの間にプロキシの連鎖が圢成されたす。

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: 接続を閉じる

芏範的な参照

有益な参照情報