Webを支える技術:6章:HTTPの基本

スポンサーリンク

Webを支える技術とは?

技術評者社から出されている技術書で、以下は公式サイトからの概要引用です。

Webは誕生から20年で爆発的な普及を果たし,17億人のユーザと2億台のサーバを抱える巨大システムへと成長しました。Webがここまで成功した秘密は,その設計思想,いわゆるアーキテクチャにあります。Webのアーキテクチャ,そしてHTTP,URI,HTMLといったWebを支える技術は,Webがどんなに巨大化しても対応できるように設計されていたのです。

私たちが作る個々のWebサービスも,Webのアーキテクチャにのっとることで成功へとつながります。Webのアーキテクチャに正しく適応したWebサービスは,情報が整理され,ユーザの使い勝手が向上し,ほかのサービスと連携しやすくなり,将来的な拡張性が確保されるからです。

本書のテーマは,Webサービスの実践的な設計です。まずHTTPやURI,HTMLなどの仕様を歴史や設計思想を織り交ぜて解説します。そしてWebサービスにおける設計課題,たとえば望ましいURI,HTTPメソッドの使い分け,クライアントとサーバの役割分担,設計プロセスなどについて,現時点のベストプラクティスを紹介します。

引用:http://gihyo.jp/magazine/wdpress/plus/978-4-7741-4204-3/

Webを支える技術 HTTP、URI、HTML、そしてREST (WEB+DB press plusシリーズ) [ 山本陽平 ]

6章:HTTPの基本をまとめてみました。

HTTPの重要性

  • Hyper Text Transfer Protocol
  • 名前はハイパーテキストの転送用プロトコルだが、他メディア・JS・PDFなど多くのデータを転送できる
  • RESTの特徴である統一インターフェース・ステートレスサーバ・キャッシュなどを実現しているプロトコル

TCP/IPとはなにか

階層型プロトコルのことである

ネットワークインターフェース層

  • 物理的なケーブルやネットワークアダプタに相当
>インターネット層
  • ネットワークでデータを実際にやり取りする部分
  • IPが担っている
  • データの基本的な通信単位をパケットと呼ぶ
  • 自分のネットワーク・インターフェースでデータを送り出すことだけを保証

トランスポート層

  • IPが保証しなかったデータの転送を保証する
  • TCPが担っている
  • 接続先の相手に対してコネクションを張る
  • 転送データがどのアプリケーションにわたるかを決定するのがポート番号
  • HTTPではデフォルトが80番ポート

アプリケーション層

  • 具体的なアプリケーションを実現する層
  • ソケットと呼ばれるライブラリを使うのが一般的
  • ソケットはデータのやり取りを抽象化したAPI
  • HTTPサーバやブラウザはソケットを用いて実装される
  • プログラミング言語はHTTPライブラリを持っているのでソケットも使える

HTTPのバージョン

  • HTTP 0.9
    • Berners-Leeが発明した当時のプロトコル
    • 仕様書は存在しない
  • HTTP 1.0
    • 1996年に発行
    • ブラウザ戦争真っ盛りの時期に策定
  • HTTP 1.1
    • 1999年に発行
    • 現在でも使われるプロトコル

リクエストとレスポンス

Webはクライアント/サーバのアーキテクチャ。
リクエスト/レスポンス型のプロトコルとも呼ばれる。

クライアントで行われること

  • リクエストメッセージの構築
  • リクエストメッセージの送信
  • レスポンスが返るまで待機
  • レスポンスメッセージの受信
  • レスポンスメッセージの解析
  • クライアントの目的を達成するために必要な処理

サーバで行われること

  • リクエストの待機
  • リクエストメッセージの受信
  • リクエストメッセージの解析
  • 適切なアプリケーションプログラムへの処理の移譲
  • アプリケーションプログラムからの結果を取得
  • レスポンスメッセージの構築
  • レスポンスメッセージの送信

HTTPメッセージ

リクエストメッセージ

  • リクエストライン
    • リクエストメッセージの1行目
    • メソッド、リクエストURI、プロトコルバージョンから成る
  • ヘッダ
    • リクエストメッセージの2行目以降
    • 1つのメッセージは複数のヘッダを持つ
    • 各ヘッダは「名前:値」という構成をしている
GET  HTTP/1.1
Host: example.jp

レスポンスメッセージ

  • ステータスライン
    • レスポンスメッセージの1行目
    • プロトコルバージョン、ステータスコード、テキストフレーズから成る
  • ヘッダ
    • レスポンスメッセージの2行目以降
    • リクエストメッセージ同様
  • ボディ
    • ヘッダとボディは空行で区切られる
    • そのメッセージを表す本質的な情報が入る
HTTP/1.1 200 OK
Content-Type: application/xhtml+xml; charset=utf-8

<html xmlns="http://www.w3.org/1999/xhtml">
・・・
</html>

HTTPのステートレス性

ハンバーガーショップの例

  • お客:ハンバーガーセットをお願いします
  • 店員:サイドメニューは何にしますか?
  • お客:ハンバーガーセットをポテトでお願いします
  • 店員:ドリンクは何にしますか?
  • お客:ハンバーガーセットをポテトとコーラでお願いします
  • 店員:+50円でドリンクをLサイズに出来ますがどうします?
  • お客:ハンバーガーセットをポテトとコーラ(M)でお願いします
  • やり取りは冗長で、クライアントは毎回すべての注文を繰り返す
  • Webで考えると、やり取りはアプリケーション状態に相当する

ステートレスの利点・欠点

ステートフルな場合、クライアントが増えるに連れて、サーバがアプリケーション状態を覚えるのは困難。

リクエストの処理に必要な情報をすべて含めるステートレスのメリットがある。

サーバ側のシステムは単純にできる一方で、送信するデータ量が多くなるとパフォーマンスの低下を引き起こす。

          
    

スポンサーリンク

  
Scroll Up