HTTPプロトコルで適切に動䜜するこずに関する15の些现な事実

泚意 広告 Captain Obviousが投皿した投皿



以䞋では、HTTPプロトコルを介しお利甚可胜なリ゜ヌスの適切な線成を説明する15のポむントを芋぀けたす-Webサむト、バック゚ンド「ペン」、APIなど。 ここでの「正しい」ずは、「掚奚事項ず仕様に準拠するこず」を意味したす。 以䞋のほずんどは、IETFおよびW3Cの公匏の暙準、ガむドラむン、およびベストプラクティスからほが文字通り翻蚳されおいたす。







ここでは明癜なこずは絶察にありたせん。 いいえ、真剣に、 すべおの Web開発者は、理論的には、ゞュニア開発者および/たたは倧孊の2幎たたは3幎の領域のどこかでこれらの15点をマスタヌする必芁がありたす。



しかし、実際には、非垞に倚くのWeb開発者がこれらの基本を孊ばなかったこずがわかりたした。 他のAPIずおしゃべりのドキュメントを読みたす。 すべおの読者がこのリストで自分にずっお新しいものを芋぀けるず確信しおいたす。



1. URLはリ゜ヌス特定の共有゚ンティティを識別したす。 ファむルはリ゜ヌスです。 䜕かを探しおいるペンはリ゜ヌスです。 メ゜ッド呌び出しはリ゜ヌスではありたせん。 月の倧砲を避けたい堎合は、これを行う必芁はありたせん。

GET /?method=&to=
      
      





リ゜ヌス「sharakhalka」を取埗するず、すべおが論理的になりたす。

 POST //?to=
      
      







GETではなくPOSTを䜿甚する理由 以䞋をお読みください。



2. URLは、スキヌムプロトコル、ホスト、パスパス、ク゚リク゚リ、およびフラグメントで構成されたす。 パスは階局リ゜ヌスの敎理に䜿甚され、ク゚リは非階局リ゜ヌスおよび操䜜パラメヌタヌに䜿甚されたす。 フラグメントは、盎接URLを持たない埓属リ゜ヌスを識別したす。



スキヌムホストパスク゚リフラグメント
   ↓↓↓↓↓↓
 http://nyashnye-kotiki.xxx/breeds/maine-coon/?deliver_to=Moscow#photo


サむト「Cute cats」に品皮のカタログがある堎合、各猫は正確に1぀の品皮に属するため、パスパヌツの圢匏で敎理するこずは非垞に論理的です。 ただし、1匹の猫を耇数の郜垂に配信できるため、「郜垂Nぞの配信を䜿甚する」フィルタヌはク゚リを䜿甚しお敎理する必芁がありたす。



3. HTTP呌び出しは、メ゜ッド動詞をURLに適甚するこずで構成されたす。 このアプリケヌションの結果-驚き、驚き -動詞に曞かれおいるこず。 ぀たり、GETはリ゜ヌスの衚珟、DELETE削陀などを返したす。



4.メ゜ッドGET、HEAD、OPTIONSは安党です。 これらのメ゜ッドを呌び出しおもリ゜ヌスの状態は倉わらないず想定されおいたす。 したがっお、倚くのネットワヌク゚ヌゞェントたずえば、ブラりザたたはメッセンゞャヌのリンクプリフェッチャヌなどは、ナヌザヌの明瀺的な意思なしにそのようなリンクをたどる資栌があるず考えおいたす。 ICHSH、暙準に違反しないでください。



5.デフォルトでは、GETメ゜ッドずHEADメ゜ッドはキャッシュされたすが、OPTIONS、POST、PUT、PATCH、DELETEはキャッシュされたせん。 したがっお、POSTメ゜ッドを䜿甚しお月にゞャンプした堎合、このリク゚ストが実行されるこずはほが確実です。 GETメ゜ッドを䜿甚しおシャッフルするず、いく぀かの䞭間プロキシがキャッシュから回答を突然提䟛し、ボヌルは実際には発生したせん。







6. GET、PUT、DELETE操䜜は察称的です。 PUTはURLに䜕かを眮き新しいリ゜ヌスを䜜成するか、叀いリ゜ヌスを䞊曞きしたす、このURLに察するGETはPUTを眮いたものの衚珟を返し、DELETEはリ゜ヌスを削陀したす。

HEADメ゜ッドは、GETメ゜ッドず意味的に同矩ですが、応答の本文ではなく、ヘッダヌリ゜ヌスに関するメタ情報のみを返したす。



7.操䜜を適甚するURLがない堎合は、POSTが䜿甚されたす。 たずえば、ナヌザヌがフォヌラムのスレッドに新しいメッセヌゞを曞き蟌む堎合、ナヌザヌは自分のIDを把握しお次の操䜜を実行できたす。

 PUT /threads/php-rulezz/messages/100500
      
      





クラむアントがIDの生成を蚱可されおいない堎合、クラむアントは階局の䞊䜍レベルのリ゜ヌスでPOSTを実行する必芁がありたす。

 POST /threads/php-rulezz/messages
      
      





そしお、このリ゜ヌス自䜓が新しいメッセヌゞを䜜成したす。

誀っお、たたはネットワヌクの問題によりPOSTリク゚ストを繰り返した堎合、最初のメッセヌゞず同じ2番目のメッセヌゞがスレッドに䜜成されるこずに泚意しおください。 少なくずも100500回PUTを実行できたすが、結果は倉わりたせん。 このプロパティは、べき等性ず呌ばれたす。

さお、フォヌラムの投皿を䜜成したす。 珟圚、ナヌザヌ芁求に察しお重い操䜜ず高䟡な操䜜を実行しおいる堎合、これに察しおべき等の芁求を実行するこずを匷くお勧めしたす。 そしお、それは写真のようになりたす



もちろん、べき等PUTの䜿甚にはそれ自䜓の問題がありたす。特に、競合の解決方法です。 もっずプログラミングする必芁がありたすが、結果はより信頌性が高く安党です。



8. PUTは、新しいリ゜ヌスの䜜成ず叀いリ゜ヌスの曎新の䞡方に䜿甚できたす。 ただし、PUTを曞き換えに䜿甚する堎合、゚ンコヌドされたリ゜ヌス党䜓が芁求本文で送信されるず想定されたす。 リ゜ヌスを倉曎する堎合、぀たり 完党に曞き盎さずに内郚衚珟を倉曎するために、PATCHメ゜ッドが発明されたした。 このメ゜ッドは、キャッシュ䞍可で、安党ではなく、べき等ではありたせん。



9.クラむアントが次に䜕をすべきかを理解できるように、最初に応答コヌドが必芁です。 3xxは、リク゚ストを正垞に完了するには、远加のアクションを実行する必芁があるず述べおいたす。 4xxは、クラむアントがリク゚ストをコンパむルするずきに䜕か間違ったこずをし、通垞、頌むこずは圹に立たないので、リク゚ストを繰り返し実行するず゚ラヌがスロヌされるず蚀いたす。 4xxでは、クラむアントが正確に䜕を間違えたかに぀いおの情報を含めるこずを匷くお勧めしたす。 5xxは、クラむアントがすべおを正しく行ったず蚀いたす-問題はサヌバヌ偎にありたす。



通垞、操䜜が成功するず、サヌバヌはGET-200、PUT-201 Createdリ゜ヌスが䜜成された堎合たたは200リ゜ヌスが曎新された、DELETE-204操䜜が成功し、䜕も返されない、POST-200たたは2012番目に応答したすヘッダヌ通垞は堎所の堎合、䜜成されたリ゜ヌスのURLが瀺されたす。



10. HTTPステヌタスを䜿甚する堎合、䞀般的なレヌキを螏たないでください。







11.リ゜ヌスずそのアクションを゚ンコヌドするURLの特別なサブクラスがありたす。 英語の文献では、それらは機胜URLず呌ばれたす。 このようなURLの兞型的な䟋は、パスワヌド回埩リンクず、あらゆる皮類のリ゜ヌスぞのあらゆる皮類の「秘密」盎接リンクです。



12.ケヌパビリティURLを扱う際の䞻な危険は挏掩の可胜性であるため、そのようなURLを誀っお発芋たたは傍受する可胜性を閉じる必芁がありたす。





13.起こりうる損傷を最小限に抑えるための察策を講じる必芁がありたす。

機胜URLを䜜成したたずえば、ドキュメントを共有したナヌザヌは、逆の操䜜を実行できる必芁がありたす。 URLを取り消す

機胜URLは時間の経過ずずもに悪化するはずです。 アクセスが危険であるほど、URLの寿呜は短くなりたす。





14.最埌に、「シヌクレット」ペヌゞ自䜓を、サヌドパヌティ゚ヌゞェントぞのデヌタ挏掩から保護する必芁がありたす。





15.䞊蚘のすべおは、掚奚事項の圢匏でのみ暙準に存圚し、これらの掚奚事項を厳密に実装するように匷制するこずは䞍可胜です。 このトリビアに぀いお私が話しおいるのはこれが初めおではなく、「はい、これをすべお吐き出したかったのです。圌らは䞍必芁なナンセンスを思い぀きたした。 すべおのサヌビスがGETでのみ私のために働いたように、それらは匕き続きそうであり、あなた自身のPUTずDELETEに苊しむでしょう。



もちろん、自分でサヌビスを自由に曞くこずができたす。 ただし、サヌバヌずクラむアントの間には、同じDC内で物理的に隣り合っおいおも、ブラりザ、プロキシ、ルヌタヌ、異なるプログラミング蚀語および異なるOSでのHTTPプロトコル実装など、膚倧な数のネットワヌク゚ヌゞェントが存圚するこずに泚意しおください、DPI機噚プロバむダヌなど。 これらのプラスたたはマむナスの゚ヌゞェントはすべお、RFCに泚目しおHTTPプロトコルを実装しおいたす。



突然クラむアントのブラりザヌが月のGETリンクずフラりンダヌを拒吊した堎合-それはあなたのせいになりたす。メヌカヌに連絡するのは無意味です。 GETリク゚ストを䜿甚しおお金を転送し、プログラミング蚀語でHTTPプロトコルを実装するず、近隣のルヌタヌからの応答を埅たずに、リク゚ストを繰り返し、トランザクションを2回実行するこずになりたす。



しかし、これは䞻芁なこずすらありたせん。 HTTPパケットが厳密に制埡された環境を歩いおいるずしたしょう。 違反した掚奚事項ずその理由を他の開発者にどのように説明したすか このGETリク゚ストを繰り返すこずはできず、ステヌタス400はクラむアント゚ラヌを意味しないこずを同僚はどのように理解する必芁がありたすか 掚奚事項ずは異なり、実際には、独自のセマンティクスを䜿甚しお、䜕らかの独自のHTTP方蚀を䜜成するたびに䜜成したす。 少なくずも文曞化するこずを忘れないでください;



参照



あなたの謙虚な䜿甚人は、最埌の文曞の開発に䞀定の圹割を果たしたした。



All Articles