0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

HTTPメッセージについて

Posted at

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にアクセスできるライブラリ。

sample.rb
ruby -ropen-uri -e 'open("http://www.ruby-lang.org/ja/").read.display'

・1ページを取得する場合だけであればopen-uriはとても便利だが、繰り返しアクセスするような場合にはnet/httpを使ったほうがいい。

実際にnet/httpでGETリクエストを送る方法

sample.rb
require 'net/http'

Net::HTTP.start('www.ruby-lang.org', 80) {|http|
  response = http.get('/ja/')
  puts response.body
}

net/httpでPOSTリクエストを送る方法

sample.rb
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
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?