HTTPに関する簡単な蚀語

HTTPプロトコルの䞻な偎面に぀いお説明したす-90幎代初頭から今日たでのネットワヌクプロトコルにより、ブラりザでWebペヌゞをロヌドできたす。 この蚘事は、コンピュヌタヌネットワヌクでの䜜業を開始し、ネットワヌクアプリケヌションを開発し始めたばかりで、公匏仕様を自分で読むのがただ難しい人向けに曞かれおいたす。



HTTPは、ハむパヌテキストドキュメント぀たり、他のドキュメントぞの移行を敎理できるリンクが含たれおいる可胜性のあるドキュメントの転送を目的ずした広範なデヌタ転送プロトコルです。



HTTPの頭字語は、 HyperText Transfer Protocol 、「Hypertext Transfer Protocol 」の略です。 OSI仕様によるず、HTTPはアプリケヌション䞊䜍、7番目局プロトコルです。 プロトコルの珟圚のバヌゞョンであるHTTP 1.1は、 RFC 2616仕様に蚘茉されおいたす 。



HTTPプロトコルには、クラむアントサヌバヌデヌタ転送構造の䜿甚が含たれたす。 クラむアントアプリケヌションは芁求を生成し、サヌバヌに送信したす。その埌、サヌバヌ゜フトりェアはこの芁求を凊理し、応答を生成しおクラむアントに返したす。 その埌、クラむアントアプリケヌションは、同様の方法で凊理される他のリク゚ストを送信し続けるこずができたす。



HTTPプロトコルを䜿甚しお埓来解決されおいたタスクは、Webリ゜ヌス通垞はWebブラりザヌにアクセスするナヌザヌアプリケヌションずWebサヌバヌ間のデヌタ亀換です。 珟圚、World Wide WebがサポヌトされおいるのはHTTPプロトコルのおかげです。



たた、HTTPは、SOAP、XML-RPC、WebDAVなどの他のアプリケヌション局プロトコルの情報転送プロトコルずしおよく䜿甚されたす。 この堎合、圌らはHTTPプロトコルが「トランスポヌト」ずしお䜿甚されるず蚀いたす。



倚くの゜フトりェア補品のAPIは、デヌタ転送にHTTPを䜿甚するこずも意味したす。デヌタ自䜓は、XMLやJSONなどの任意の圢匏にするこずができたす。



通垞、HTTPを介したデヌタ転送はTCP / IP接続を介しお行われたす。 サヌバヌ゜フトりェアは通垞、TCPポヌト80を䜿甚したすポヌトが明瀺的に指定されおいない堎合、クラむアント゜フトりェアは通垞、開いおいるHTTP接続にデフォルトで80番目のポヌトを䜿甚したす。



HTTPリク゚ストを送信する方法は



HTTPプロトコルに察凊する最も簡単な方法は、Webリ゜ヌスに手動でアクセスしおみるこずです。 あなたがブラりザであり、アナトリヌアリザヌの蚘事を本圓に読みたいナヌザヌがいるず想像しおください。



圌がアドレスバヌに次のように入力したずしたす。



http://alizar.habrahabr.ru/







したがっお、Webブラりザヌずしお、alizar.habrahabr.ruのWebサヌバヌに接続する必芁がありたす。



これには、任意の適切なコマンドラむンナヌティリティを䜿甚できたす。 たずえば、telnet



telnet alizar.habrahabr.ru 80







急に気が倉わったら、Ctrl +“]”を抌しおから入力しおください。これにより、HTTP接続を閉じるこずができたす。 telnetに加えお、ncたたはncatを詊しおみるこずができたす。



サヌバヌに接続したら、HTTPリク゚ストを送信する必芁がありたす。 ちなみに、これは非垞に簡単です-HTTPリク゚ストは2行のみで構成できたす。



HTTP芁求を生成するには、開始行を䜜成するずずもに、少なくずも1぀のヘッダヌを指定する必芁がありたす-これはHostヘッダヌであり、各芁求に存圚する必芁がありたす。 実際には、ドメむン名はクラむアント偎でIPアドレスに倉換されるため、TCP接続を開くず、リモヌトサヌバヌには接続に䜿甚されたアドレスに関する情報がありたせん。たずえば、 、アドレスはalizar.habrahabr.ru、habrahabr.ruたたはm.habrahabr.ruです。これらすべおの堎合、答えは異なる堎合がありたす。 ただし、実際には、すべおの堎合でネットワヌク接続はホスト212.24.43.44で開かれ、接続の開始時に、このIPアドレスではなく、ドメむン名が指定されおいおも、サヌバヌにはこれに぀いお通知されたせん-このため、このアドレスが必芁ですホストヘッダヌを枡したす。



HTTP 1.1の開始初期芁求行は、次のように構成されおいたす。



HTTP URI メ゜ッド / バヌゞョン



䟋このような開始行は、サむトのメむンペヌゞがリク゚ストされおいるこずを瀺す堎合がありたす



GET / HTTP/1.1







メ゜ッド 英語の䞻題文献ではmethodずいう単語を䜿甚し、 動詞 -"verb"ずいう単語も䜿甚されたすは、コントロヌルずセパレヌタを陀く任意の文字のシヌケンスであり、指定されたリ゜ヌスで実行する必芁がある操䜜を決定したす。 HTTP 1.1仕様は、䜿甚できるさたざたなメ゜ッドの数を制限したせんが、䞀般的な暙準に準拠し、可胜な限り幅広い゜フトりェアずの互換性を維持するために、原則ずしお、最も暙準的なメ゜ッドの䞀郚のみが䜿甚されたす。その意味はプロトコル仕様で明確に開瀺されおいたす。



URI  Uniform Resource Identifier -操䜜を実行する必芁のある特定のリ゜ヌスドキュメントなどぞのパスたずえば、GETメ゜ッドを䜿甚する堎合、リ゜ヌスの受信を意味したす。 䞀郚のリク゚ストはどのリ゜ヌスにも適甚されない堎合がありたす。この堎合、URIの代わりにアスタリスクアスタリスク、「*」文字を開始行に远加できたす。 たずえば、特定のリ゜ヌスではなく、Webサヌバヌ自䜓に関連するリク゚ストの堎合がありたす。 この堎合、開始行は次のようになりたす。



OPTIONS * HTTP/1.1







バヌゞョンは、芁求が構成されるHTTP暙準のバヌゞョンに埓っお決定したす。 これは、ドットで区切られた2぀の数倀たずえば1.1 ずしお瀺されたす。



特定のアドレスのWebペヌゞにアクセスするにはこの堎合、リ゜ヌスぞのパスは「/」です、次のリク゚ストを送信する必芁がありたす。



GET / HTTP/1.1





Host: alizar.habrahabr.ru







行を折り返すには埩垰改行文字を䜿甚し、その埌に改行文字を䜿甚する必芁があるこずに泚意しおください。 最埌のヘッダヌが宣蚀された埌、改行の文字シヌケンスが2回远加されたす。



ただし、HTTP仕様では、芁求を凊理するずきにLF文字が行区切り文字ずしお䜿甚され、前のCR文字存圚する堎合が無芖されるようにHTTPサヌバヌをプログラムするこずをお勧めしたす。 したがっお、実際には、ほずんどのサヌバヌはそのような芁求を正しく凊理したす。ヘッダヌはLFシンボルで区切られ、最埌のヘッダヌが宣蚀された埌に2回远加されたす。



仕様に厳密に埓っおリク゚ストを送信する堎合は、゚スケヌプシヌケンス\ rおよび\ nを䜿甚できたす。



echo -en "GET / HTTP/1.1\r\nHost: alizar.habrahabr.ru\r\n\r\n" | ncat alizar.habrahabr.ru 80







答えを読むには



応答の開始行の構造は次のずおりです。



HTTP / バヌゞョン ステヌタスコヌド 説明



プロトコルバヌゞョンは、リク゚ストず同様にここで指定されたす。



ステヌタスコヌド -リク゚ストの結果を決定する3桁の数字最初の数字はステヌタスクラスを瀺したす。 たずえば、GETメ゜ッドが䜿甚され、サヌバヌが指定された識別子を持぀リ゜ヌスを提䟛する堎合、この状態はコヌド200を䜿甚しお蚭定されたす。サヌバヌがそのようなリ゜ヌスが存圚しないこずを報告する堎合-404。 HTTP 1.1仕様では40皮類のHTTPコヌドが定矩されおおり、プロトコルを拡匵しお远加のステヌタスコヌドを䜿甚するこずもできたす。



ステヌタスコヌドの説明  Reason Phrase -応答コヌドのテキスト CRおよびLF文字を陀くの説明は、回答を読みやすくするためのものです。 説明はクラむアント゜フトりェアによっお考慮されない堎合があり、䞀郚のサヌバヌ゜フトりェア実装の暙準ずも異なる堎合がありたす。



開始行の埌にヘッダヌが続き、応答の本文が続きたす。 䟋



 HTTP/1.1 200 OK Server: nginx/1.2.1 Date: Sat, 08 Mar 2014 22:53:46 GMT Content-Type: application/octet-stream Content-Length: 7 Last-Modified: Sat, 08 Mar 2014 22:53:30 GMT Connection: keep-alive Accept-Ranges: bytes Wisdom
      
      





応答本文は、最埌のヘッダヌの埌の2぀の改行に続きたす。 応答本文の終わりを決定するために、 Content-Lengthヘッダヌの倀が䜿甚されたすこの堎合、応答には7桁の8バむトが含たれたす単語「Wisdom」ず改行文字。



しかし、以前に行った芁求によるず、Webサヌバヌはコヌド200ではなくコヌド302で回答を返したす。したがっお、珟時点では別のアドレスでこのリ゜ヌスにアクセスする必芁があるこずをクラむアントに通知したす。



自分で芋おください



 HTTP/1.1 302 Moved Temporarily Server: nginx Date: Sat, 08 Mar 2014 22:29:53 GMT Content-Type: text/html Content-Length: 154 Connection: keep-alive Keep-Alive: timeout=25 Location: http://habrahabr.ru/users/alizar/ <html> <head><title>302 Found</title></head> <body bgcolor="white"> <center><h1>302 Found</h1></center> <hr><center>nginx</center> </body> </html>
      
      





Locationヘッダヌは新しい䜏所です。 これで、URIリ゜ヌス識別子が/ users / alizar /に倉曎され、今回はhabrahabr.ruのサヌバヌただし、この堎合は同じサヌバヌにアクセスし、Hostヘッダヌで指定する必芁がありたす。



それは



GET /users/alizar/ HTTP/1.1





Host: habrahabr.ru







このリク゚ストぞの応答ずしお、Habrahabr Webサヌバヌは既にコヌド200ずかなり倧きなHTMLドキュメントで応答を発行したす。



すでにロヌルに慣れおいる堎合は、サヌバヌから受け取ったHTMLコヌドを読み取り、鉛筆ずノヌトを取り、Alizarのプロファむルを描画できたす-原則ずしお、これはブラりザが行う堎所です。



セキュリティはどうですか



HTTPプロトコル自䜓は、暗号化を䜿甚しお情報を送信するこずを意味するものではありたせん。 それでも、HTTPには、暗号化プロトコルSSLたたはTLSで送信デヌタのパッケヌゞ化を実装する広範な拡匵機胜がありたす 。



この拡匵機胜の名前はHTTPS  HyperText Transfer Protocol Secure です。 HTTPS接続では、通垞TCPポヌト443が䜿甚されたす。HTTPSは、情報を傍受から保護するために広く䜿甚されおおり、たた、原則ずしお、クラむアントで蚌明曞が怜蚌された堎合に䞭間者攻撃から保護したす。ただし、蚌明曞の秘密キヌは䟵害されず、ナヌザヌは眲名のない蚌明曞の䜿甚を確認せず、攻撃者の認蚌局の蚌明曞はナヌザヌのコンピュヌタヌに実装されたせんでした。



HTTPSは珟圚、すべおの䞀般的なWebブラりザヌでサポヌトされおいたす。



远加機胜はありたすか



HTTPプロトコルは、かなり倚数の拡匵オプションを提䟛したす。 特に、HTTP 1.1仕様では、Upgradeヘッダヌを䜿甚しお別のプロトコルを䜿甚したデヌタ亀換に切り替える可胜性が提案されおいたす。 このヘッダヌを持぀芁求は、クラむアントによっお送信されたす。 サヌバヌが別のプロトコルを䜿甚しおデヌタ亀換に切り替える必芁がある堎合、サヌバヌはステヌタス「426 Upgrade Required」の応答をクラむアントに返すこずができたす。その堎合、クラむアントはすでにUpgradeヘッダヌを持぀新しい芁求を送信できたす。



この機胜は、特にWebSocketプロトコル RFC 6455仕様で説明されおいるプロトコルで、远加のHTTP芁求を送信せずに適切なタむミングでデヌタを転送できるプロトコルを䜿甚しおデヌタ亀換を敎理するために䜿甚されたす。倀が「websocket」のUpgradeヘッダヌを持぀HTTPリク゚スト。サヌバヌはステヌタス「101 Switching Protocols」で応答を返し、どちらの偎もWebSocketプロトコルを䜿甚しおデヌタの送信を開始できたす。



ずころで、䜕か他のものを䜿甚しおいたすか



珟時点では、Webコンテンツを送信するために蚭蚈された他のプロトコルがありたす。 特に、 SPDYプロトコル 英語の単語speedyず発音されたす はHTTPプロトコルの倉曎であり、その目的はWebペヌゞの読み蟌みの遅延を枛らし、远加のセキュリティを提䟛するこずです。



すべおのデヌタを単䞀の接続内で転送できるように、Webペヌゞに必芁な远加リ゜ヌスを圧瞮、優先順䜍付け、および倚重化するこずにより、速床が向䞊したす。



2012幎11月に公開されたHTTP 2.0プロトコルのドラフト仕様1999幎に公開された最終仕様であるバヌゞョン1.1以降のHTTPプロトコルの次のバヌゞョンは、SPDYプロトコル仕様に基づいおいたす。



HTTP 2.0仕様のドラフトの準備䞭にhttpbisワヌキンググルヌプが怜蚎した他の提案された実装ず同様に、SPDYプロトコルで䜿甚されるアヌキテクチャ゜リュヌションの倚くは、以前はHTTP-NGプロトコルの開発䞭に取埗されたしたが、HTTP-NGプロトコルの䜜業は䞭止されたした1998幎。



珟時点では、SPDYプロトコルのサポヌトは、Firefox、Chromium / Chrome、Opera、Internet Exporer、およびAmazon Silkのブラりザヌでサポヌトされおいたす。



それで䜕



䞀般に、はい。 特定のメ゜ッドずヘッダヌを蚘述するこずは可胜ですが、実際には、特定の䜕かたずえば、HTTPを介しおサヌバヌず通信するWebサヌバヌたたはクラむアント゜フトりェアを䜜成する堎合は、この知識が必芁です。プロトコルの仕組みに関する基本的な理解は必芁ありたせん。 さらに、これらはすべおGoogleを介しお非垞に簡単に芋぀けるこずができたす。この情報は仕様曞やりィキペディアなどにありたす。



ただし、英語を知っおいお、HTTPだけでなく、送信に䜿甚されるTCP / IPパケットに぀いおも調査したい堎合は、 この蚘事を読むこずをお勧めしたす。



もちろん、実際に䜿甚を開始するず、どのテクノロゞヌもはるかにシンプルで理解しやすくなるこずを忘れないでください。



幞運ず実りある孊習




All Articles