WinHttpこの記事ではWinHTTPを操作するためのHTTPの最小限の理解HTTPとはHTTPの通信の中の位置づけHTTPの通信の概略HTTPクライアントの要求メソッドとはパスとはヘッダとはボディとはウェブサーバの応答レスポンスコードとはヘッダとはボディとはまとめこの記事ではWinHTTPの使い方を理解する上で最小限必要となるHTTPについて解説しています。WinHTTPを使いたいけど、HTTPについてよくわからない人に向けて書いています。シリーズものになります。適材適所WinHTTPを操作するためのHTTPの最小限の理解WinHTTPを使ってウェブサーバとデータのやりとりをするためには、HTTPの理解が必要であることを前回述べました。今回はWinHTTPを操作するために必要と思われるHTTPの内容について説明したいと思います。Protocolのアクロニムです。Wikipediaによると、HTMLなどのコンテンツの送受信に用いられる通信プロトコルである。Webにおいて、WebブラウザとWebサーバとの間での転送に用いられる。日本標準仕様書ではハイパテキスト転送プロトコルとも呼ばれる。HTMLを始めとした、様々なデータを送受信するための通信規約といったところでしょうか。ウェブサーバ上の単純なテキストデータをクライアント(ブラウザ)が受信することを目的として作られた規約でした。利用者の拡大や商用利用の解禁など、当初想定されていなかった用途に使われるようになり、テキストデータ以外のデータについてもサポートが広がっていきました。ログイン処理をしたりなど状態を管理(なかば無理やり)したり、通信を暗号化したりと色々な技術と合せて使われ、その仕様は複雑になっていきました。Comments(RFC)という文書で公開されています。各ウェブサーバとウェブブラウザはこの仕様書に基づいて作られています(基本的には)。HTTPの通信の中の位置づけHTTPは、アプリケーション層と言われる層の通信規約になります。アプリケーション層とは、通信にどういった方法がとられているかといった細かいことは一切気にする必要がない層になります。気にするのは、クライアントとして、つまりブラウザのようにURLを使ってウェブサーバーにアクセスする方法と、ウェブサーバが返してきたデータをどう処理するかだけになります。HTTPという規約=プロトコルがどのように通信をするか、その概略を見ていきたいと思います。HTTPの通信の概略ここでは単純なクライアントとサーバを想定します。クライアントはサーバに対して、データを要求します。要求のデータはこのようなデータです。それに対して、返ってくるデータはこのような構成です。抽象的に見えますが・・・本当にこんな感じのデータが送られてきます。順を追って見ていきましょう。一行目は「メソッド、パス、HTTPのバージョン」です。ここで重要なのは、メソッドとパスの二つです。メソッドとはメソッドとは、サーバに対して、自分の要求がどんな意味を持つかを知らせるための単語です。8個くらいありますが、大事なのはGETとPOSTの二つです。GETとPOSTはおおよそこんなイメージです。GETメソッド:単純にデータをくれPOSTメソッド:条件送るから、この条件にあったデータをくれ、ログイン情報送るからログインさせてくれ本当かよって思われるかもしれませんが、このイメージでこれまで失敗したことありませんので多分大丈夫です。パスとはパスは、よく目にするであろうURLに登場してきます。https://www.tekizai.net/entry/2019/08/28/080000を例に説明します。https://・・・プロトコルwww.tekizai.net・・・ホスト/entry/2019/08/28/080000・・・パスURLとは、このプロトコルで、このホスト(ウェブサーバが置いてるコンピュータ名)の、パス(フォルダとファイル名)のデータを要求します!!というものです。クライアントからの要求では、一行目にその中のパスを使います。ヘッダとはヘッダはその要求のメタ情報です。この要求はChromやIEから送ってますよ~といった様々な情報です。ヘッダは、キーと、値のペアです。私の環境から、ChromでウェブサイトにGET命令を発行したときは、こんなヘッダが自動的に付けられて送信されています(一部抜粋)。https://httpbin.org/getにブラウザからアクセスすると、ブラウザが送信した情報を表示してくれます。Safari/537.36またこのヘッダの情報を使ってログイン状態の管理を行ったりします。ここではこれらのヘッダについての細かい解説は行いません。実際にWinHTTPを使う際に必要なヘッダについて解説する予定です。ボディとはボディは、主にPOSTの時に使われます。ログインするためのパスワードやID、また、フォームに入力した情報などをここに置いて送信します。この様式でクライアントにデータを送信します。OKこのような形式で、その要求の処理結果のコードが返ってきます。各コードの説明はネット上に解説がたくさんありますので割愛します。クライアントはこのコードを見て、処理を分岐させる必要があります。ヘッダとはレスポンスのヘッダは基本的な考え方はクライアントの要求ヘッダと同じです。今回返したデータのサイズはこのくらいだよ、データはhtmlだよ、文字コードはUTF8だよといった情報を送ってきます。GMTボディとはボディとは基本は、ウェブページのHTMLです。その他のデータの場合もあります。これがクライアントが欲しいデータになります。まとめクライアントが要求して、ウェブブラウザはそれを待ち構えています。クライアントから要求されてきたデータをウェブブラウザが解析してデータを返す。クライアントは返ってきたデータを解析して、必要に応じてウェブサーバにまた要求する・・・。いう繰り返しでデータのやり取りが行われます。データのやり取りをする上で、なんの約束もないといったい解析のしようもないので約束事として、上述の細かい決まり事があります。実際にWinHTTPを使って通信をしてみると、理解が深まることもあろうかと思います。次回は、WinHTTPを使って実践的なスクレイピングの話題に入っていきます。ここまでお読みいただき、ありがとうございました。はてなブログProシステム界隈の末端に生息しています。コンピュータに仕事をさせるのが好きです。このブログで紹介している内容は、多分に私見が含まれています。それでも、なるべく正確性を保つよう心がけていますが「それは違うんじゃない?」などのご意見がありましたらご連絡ください。このブログに掲載しているコードは利用規約の範囲で自由にお使いください。当ブログのプライバシーポリシーについてお問合せコードの利用規約にほんブログ村はてなブログをはじめよう!shinmai_papaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。