webサイトにおいてHTTPプロトコルは欠かせない技術である。
Webページが表示される流れ
1、 クライアントがWebサーバーに対してリクエストを送る。
2、 静的コンテンツならWebサーバーからクライアントにコンテンツがレスポンスとして返される。
動的コンテンツの場合はWebサーバーがAPサーバーに対しリクエストが出され、サーバーサイド・スクリプトが起動し、コンテンツが生成され、レスポンスとして返される。
3、返ってきたコンテンツをクライアント側で処理し、ページが表示される。
HTTPメッセージ(リクエスト編)
リクエスト、レスポンスの際に利用されるデータの形式のこと。といってもイマイチピンとこないので、HTTPメッセージの中身を実際に見ていくこととする。
リクエストの際にWebサーバーに送られるHTTPメッセージは主に3層に分かれている。
1、リクエスト行
2、メッセージヘッダー
3、メッセージボディー
リクエスト行
以下の内容が記述されている。
・メソッド
・リクエストURL
・プロトコルバージョン
メッセージヘッダー
リクエストメッセージのメタデータ
Date、Cache-Control、Connectionなど
メッセージボディー
補足のメモ書きが入る。
Getだと何も入らず、POSTだと受け渡されるパラメーター。
知っておくべきリクエストヘッダーとは
・User-Agent:ブラウザの種類やOSの情報。
・Referer(リファラ):どのページから発生したリクエストなのか
・if-Modified-Since/if-None-Match:ブラウザは1度表示したデータを「ローカルキャッシュ」として保存している。その時に、ローカルキャッシュのデータが更新されていないかをチェックするために、ファイルの変更日付や管理情報をリクエストに含めている。
・Cookie:ブラウザに保存されているクッキーデータは毎回サーバーに送られている。
・Accept、Accept-Language、Accept-Encoding、Accept-Charset:どんなデータを受け取りたいか、画像の種類や、言語、文字コードなどを伝える。
HTTPメッセージ(レスポンス編)
レスポンスの際にブラウザに送るデータも3層に分かれている
1、 レスポンスの状態
2、 メッセージヘッダー
3、 メッセージボディー
レスポンスの状態
・HTTPステータスコード
HTTPヘッダー
各種の状態を示す情報が入れられている部分。
メッセージボディー
ブラウザに表示されるWebサイト、HTMLソースコードや画像などのデータ。
知っておくべきレスポンスヘッダーとは
・Content-Type:データがHTMLなのか画像なのか、文字コードなのかの情報
・Expires:キャッシュの制限に使われる
・Last-ModifiedやETag:HTMLや画像がいつ更新されたかの情報や、サーバー上のファイルの場所ID、ファイルのサイズ、更新チェック情報
・Cache-ControlやPragma:グラウざや通信を橋渡しするプロ棋士が、データのキャッシュをどう扱うかの情報。
・Connection:keep-alive(接続を持続するか)、close(毎回接続を切断するか)
・Location:リクエストと違う場所からデータを取得するように示す指示。リダイレクト先を示す情報。
rubyでリクエストを送る方法
net/httpライブラリを活用する。net/httpを活用すると、HTTPを簡単に扱うことができる。
open-uriライブラリを活用する。より簡単にHTTPにアクセスできるライブラリ。
ruby -ropen-uri -e 'open("http://www.ruby-lang.org/ja/").read.display'
・1ページを取得する場合だけであればopen-uriはとても便利だが、繰り返しアクセスするような場合にはnet/httpを使ったほうがいい。
実際にnet/httpでGETリクエストを送る方法
require 'net/http'
Net::HTTP.start('www.ruby-lang.org', 80) {|http|
response = http.get('/ja/')
puts response.body
}
net/httpでPOSTリクエストを送る方法
require 'net/http'
Net::HTTP.version_1_2
Net::HTTP.start('search.hatena.ne.jp', 80) {|http|
response = http.post('/search',"word=ruby")
puts response.body
}