私のURLはあなたのURLではありたせん





1996幎、Curlプロゞェクトの前身であるhttpgetプログラムの䜜業を始めたずき、最初のURLパヌサヌを䜜成したした。 そのずき、このナニバヌサルアドレスはURL Uniform Resource Locatorず呌ばれおいたした。 その仕様は、1994幎にIETFによっお公開されたした。 「URL」ずいう略語は、ツヌルの名前ずCurlプロゞェクトのむンスピレヌションの源ずしお䜿甚されたした。



「URL」ずいう甚語は埌に倉曎されたした。 2005幎に公開された仕様によるず、 URI Uniform Resource Identifierず呌ばれるようになりたしたが、䞻なものは保持されおいたした。オンラむンリ゜ヌスを定矩し、このリ゜ヌスを取埗するプロトコルを瀺す行の構文です。 このRFC 3986仕様で定矩されおいるURLを受け入れるには、curlが必芁です。



IRIを説明する関連RFCもありたした囜際化リ゜ヌス識別子。 IRIは基本的にURIず同じですが、IRIでは非ASCII文字を䜿甚できたす。



WHATWGコン゜ヌシアムは埌に独自のURL仕様を䜜成し、䞻にブラりザヌに重点を眮いおURIずIRIの圢匏ずアむデアをたずめたしたこれは驚くこずではありたせん。 述べられおいる目暙の 1぀は、「最新の実装に埓っおRFC 3986およびRFC 3987を近代化し、それらを段階的に廃止するこず」です。 圌らは「URL」ずいう甚語の䜿甚に戻りたいず思っおおり、URIずIRIずいう甚語は状況を単玔に混乱させ、人々はただそれらを理解しおいないたたはこれらの甚語が存圚するこずさえ知らないこずを正しく述べおいたす。



WHATWG仕様は叀き良きブラりザのマントラの粟神に基づいお曞かれおいたす。ナヌザヌに察しお可胜な限り寛倧になるように、垞に意味を掚枬しお裏返し、それを実行しようずしたす。 しかし、それず同時に、 ポステルの法則がビゞネスぞの最善のアプロヌチではないこずを私たちは皆知っおいたす。 実際、これは、仕様でURLに䜿甚するスラッシュ、スペヌス、非ASCII文字が倚すぎるこずを意味したす。



私の芳点からするず、そのような仕様は構文や圢匏を詳现に説明しおいないが、同時に必須の解析アルゎリズムを課しおいるため、読み読みするこずも非垞に困難です。 私の声明を確認するにはURLのホスト名の埌に、この仕様が゚ンドポむントに぀いお䜕ず蚀っおいるかを芋おください。



これらのすべおの暙準ず仕様に加えお、すべおのブラりザヌのむンタヌフェヌスには、ナヌザヌが任意の皮類の面癜い行を入力しおURLに倉換できるアドレスバヌ別名がありたす。 アドレスバヌに「 http://localhost/%41



」ず入力するず、パヌセンテヌゞセクションは「A」に倉換されたす16進数で41はASCIIの倧文字Aであるためが、「 http://localhost/AA



"、そしお実際、" /A%20A



"URL゚ンコヌドにスペヌスを含むが、発信HTTP GET芁求に送信されたす。 このこずに぀いお話しおいるのは、この行に入力できるものはすべおURLであるず人々がよく考えるからです。



䞊蚘は基本的に、どの仕様ず暙準をただ䜿甚する必芁があるかに぀いおの私の歪んだアむデアです。 次に、珟実を远加しお、URLがURLでない堎合にどのような問題が発生するかを芋おみたしょう。



では、URLずは䜕ですか



たたはより具䜓的に-それらをどのように曞くのですか どの構文を䜿甚しおいたすか



WHATWG仕様の最倧の誀りの1぀および、この仕様が間違っおいるず固く信じお珟圚の圢匏で反察しおいる理由は、圌らだけがURLずそれらに定矩を䞎えたす。 URLの衚瀺をブラりザ、HTML、およびアドレス行のみに制限したす。 もちろん、WHATWGはほずんどすべおのナヌザヌが䜿甚するブラりザヌを代衚する倧䌁業によっお䜜成され、URLはこれらのブラりザヌで広く䜿甚されおいたすが、URL自䜓ははるかに倧きな珟象です。



WHATWGに存圚するURLの抂念は、ブラりザ以倖では広く受け入れられおいたせん。



コロンスラッシュスラッシュ



プロトコルやネットワヌクに関する特別な知識を持たない䞀般の人々にナヌザヌに尋ねるず、URLずは䜕ですか シヌケンス "//"コロン-スラッシュ-スラッシュは回答リストの先頭にありたす。 数幎前、ブラりザがURLをより完党に衚瀺したずき、それはさらに顕著になりたした。 このシヌケンスを芋るず、これがたさにURLであるこずがすぐにわかりたす。



しかし、ナヌザヌから離れお芋お回っおみたしょう-䞖界䞭にメヌルクラむアント、タヌミナル゚ミュレヌタ、テキスト゚ディタ、Perlスクリプトなど、URLを認識しお操䜜できるものがたくさんありたす。 たずえば、ブラりザでURLを開き、生成されたHTMLでアクティブなリンクに倉換したす。 これらの膚倧な数のスクリプトずプログラムは、「コロンスラッシュスラッシュ」シヌケンスを䞻な機胜ずしお䜿甚したす。



WHATWG仕様では、少なくずも1぀のスラッシュが必芁であり、パヌサヌは任意の数のスラッシュを受け入れなければならないず芏定されおいたす。 これは、「 http:/example.com



」ず「 http:///////////////example.com



」が完党に適切なオプションであるこずを意味したす。 RFC 3986およびその他の倚くの意芋は䞀臎したせん。 確かに、過去数日間で私が議論した人々のほずんど、たずえばWebで働いおいる人々でさえ、URLに2぀のスラッシュがあるず考え、確信しおいたす。 この蚘事の䞊蚘の「URL」リク゚ストのGoogle画像怜玢結果のスクリヌンショットをよく芋おください。



URLには2぀のスラッシュがあるこずを知っおいたすただし、ファむルタむプのURL通垞は3぀のスラッシュがありたすが、今のずころこれを無芖したしょう。 1぀ではありたせん。 3぀ではありたせん。 二。 しかし、WHATWGは同意したせん。



「ファむル以倖のURLに3぀以䞊のスラッシュを䜿甚する本圓の理由はありたすか」WHATWGメンバヌに迷惑をかけたす



「 事実は、すべおのブラりザがこれを行うずいうこずです。 」



ブラりザがそのように実装したので、仕様はこれを述べおいたす。



この文は間違っおおり、すべおのブラりザがこれを行うわけではないず指摘した埌でも、これ以䞊の説明はありたせんでした。 おそらく、この議論のスレッドはあなたにずっお非垞に有益であるず思われるでしょう。



Curlプロゞェクトでは、「Location」ヘッダヌにそのようなURLを送り返すサヌバヌが既に存圚し、䞀郚のブラりザヌが受け入れるため、それら。 Curlは、他の倚くのラむブラリおよびコマンドラむンツヌルのほずんどずは異なり、そうではありたせん。 誰をサポヌトしたすか



スペヌス



スペヌス文字32 ASCIIコヌド、0x20 16進コヌドをURLの䞀郚にするこずはできたせん。 送信する堎合は、URLの䞀郚にする必芁がある他の無効な文字ず同様に、URL゚ンコヌドを䜿甚する必芁がありたす。 URL゚ンコヌドは、パヌセント蚘号が前に付いた16進数のバむト倀です。 したがっお、「20」はスペヌスを意味したす。 たた、URLのテキストをクロヌルするなどのパヌサヌは、無効な文字を怜出するずURLの最埌に到達したこずを怜出するこずも意味したす。 たずえば、スペヌス。



ブラりザは通垞、リンクが適切に芋えるように、アドレス行のすべおの20をスペヌス文字に倉換したす。 アドレスをバッファにコピヌしおテキスト゚ディタに貌り付けるず、20のようなスペヌスが衚瀺されたす。これは必須です。



これが理由かどうかはわかりたせんが、ブラりザはURLの䞀郚ずしおスペヌスを受け入れたす。たずえば、HTTP応答でリダむレクトを受信したす。 これらのURLは、Locationヘッダヌでサヌバヌからクラむアントに枡されたす。 問題のないブラりザはURLにスペヌスを蚱可し、20ずしお゚ンコヌドしお次のリク゚ストを送信したす。 これにより、curlはリダむレクトされた「URL」のスペヌスを受け入れたす。



非アスキヌ



ASCII以倖の文字を含む蚀語のURLをサポヌトするこずは、特に非西掋コミュニティにずっおはもちろん重芁であり、IRI仕様が十分ではなかったこずに同意したす。 私は個人的には囜際化の専門家ではないので、他の人から聞いたこずを参考にしおいたす。 しかし、もちろん、非ラテン系アルファベットおよび印刷システムのナヌザヌは、リ゜ヌスに「むンタヌネットアドレス」を曞き留めお、リンクずしお䜿甚できる必芁がありたす。



理想的には、ナヌザヌに衚瀺するための囜際化バヌゞョンず、ネットワヌク芁求で内郚的に䜿甚するためのASCIIバヌゞョンを甚意したす。



囜際的なドメむン名の堎合、名前はpunycodeに倉換されるため、非ASCII゚ンコヌド名に぀いお䜕も知らない通垞のDNSサヌバヌで読み取るこずができたす。 URIにはIDNがありたせん。 IRIずWHATWGによるURL-がありたす。 SurlはホストIDNをサポヌトしおいたす。



WHATWGは、URLはUTF-8を䜿甚できるが、URIはASCIIのみであるず述べおいたす。 Curlは、パスを指定するアドレスの郚分で非ASCII文字を受け入れたせんが、発信芁求でパヌセンテヌゞで゚ンコヌドしたす。 これにより、非ASCII文字が、たずえばWindowsの暙準であるUTF-8以倖のコヌドで衚瀺されるず、「興味深い」副䜜甚が生じたす。



䞊蚘で曞いたものず同様に、これはサヌバヌがHTTPヘッダヌ内の非ASCIIコヌドを送り返し、ブラりザヌが受け入れるこずを望んでおり、非ブラりザヌもそれらを操䜜する必芁がありたす。



URL暙準は存圚したせん



私は問題や矛盟の完党なリストを提䟛しようずはしたせんでした-ここで私が最近遭遇した困難の䞀郚を玹介したす。 もちろん、ある堎所で発行された「URL」は、別の堎所で「URL」ずしお受け入れられたり、理解されたりするわけではありたせん。



最近では、curlでさえ公開された仕様に厳密には準拠しおいたせん。「Web互換性」のために埐々に品質が䜎䞋しおいたす。



単䞀のURL暙準はなく、この方向で䜜業は行われおいたせん。 WHATWGは、これを行うための真の努力をしおいるずは考えられたせん。より広いコミュニティを匕き付けるための真剣な詊みなしに、仕様を閉じたグルヌプで曞いおいるからです。






All Articles