気ままに気ままのエンジニアブログ

定期的に得た知見を気ままに発信中

書籍 "Webを支える技術" 第三部 HTTPの要点まとめ

こんにちは。

リモートワークになり早1ヶ月。
最近は土日の有り難みをあまり感じなくなり、常にちょいオン状態が続いております。

f:id:hachimaki37:20200509102747j:plain
これはオンなのか?オフなのかな?どちらにせよメリハリの大事さを身に染みてます
どうもハチマキです。

はじめに

前回に続き、入社早々に上長から教えてもらった
エンジニアデビュー3ヶ月後くらいに読むと良さそうな書籍
「Webを支える技術 -HTTP、URI、HTML、そしてREST」の第3部のまとめになります。

1部、2部についてもまとめておりますので、ぜひそちらもご参考にして頂ければと思います。

▼書籍はこちら
www.amazon.co.jp

本日の概要 : 第3部 HTTPについて

  • どんな時にために、この書籍は読んでおくべき?(第1部をご覧ください)
  • 書籍のテーマと目的(第1部をご覧ください)
  • 書籍の構成
  • 第3部 HTTP
    • 学んだこと
    • HTTPの基本
    • HTTPの具体的な仕組み
    • HTTPのステートレス性
    • 8つのメソッド
    • ステータスコード
    • HTTPヘッダ
    • Webの成功理由

書籍の構成

  • 第1部 : Web概念
  • 第2部 : URI
  • 第3部 : HTTP
  • 第4部 : ハイパーメディアフォーマット
  • 第5部 : Web サービスの設計

※今回は、第3部 : HTTPについてまとめております。

第3部 : HTTP

第3部では、HTTPの仕様と、より良いWebサービスやWeb APIを設計するために知っておくべきHTTPの特性について解説がされております

学んだこと

HTTPとは何かから始まり、基本構造や役割を知ることができた。

正直まだ概念を理解できただけであって、WebサービスやWeb APIを設計していく際に、確実に実現できるまでにはほど遠いが、今回学んだことを頭の片隅に置いておき、いざとなったときに調べられる状態にはなったかなと思う。

HTTPの基本
  • HTTPとは、TCP/IPをベースにしたネットワークプロトコルで、RESTの重要な特徴である統一インターフェイス、ステートレスサーバ、キャッシュなどを実現している、Webの基盤となるプロトコル
  • ハイパーテキストだけではく、静止画、音声、動画、JSプログラム、PDFなど、コンピューターで扱えるデータであれな何でも転送可能
HTTPの具体的な仕組み

クライアントが出したリクエストをサーバで処置してレスポンスを返す仕組み(レスポンス型のプロトコル
※リクエストメッセージとレスポンスメッセージをまとめてHTTPメッセージと呼ぶ

  • クライアントで行われること・・1つのリクエストを送信しレスポンスを受信する際に次のことを行っている
    • リクエストメッセージの構築
    • リクエストメッセージの送信
    • (レスポンスが返るまで待機)
    • リクエストメッセージの受信
    • リクエストメッセージの解析
    • クライアントの目的を達成するために必要な処理
  • サーバで行われること・・クライアントからリクエストを受けたサーバは次のことを行なっている
    • (リクエストの待機)
    • リクエストメッセージの受信
    • リクエストメッセージの解析
    • 適切なアプリケーションプログラムへの処理の委譲
    • アプリケーションプログラムから結果を取得
    • レスポンスメッセージの構築
    • レスポンスメッセージの送信
HTTPのステートレス性

HTTPはステートレスなプロトコルとして設計されている
※ステートレスとは「サーバがクライアンのアプリケーション状態を保存しない」制約のこと

  • ステートフルの欠点
    • 1つのサーバが同時に相手をできるクライアントの数には上限がある
    • クライアントの数が増えた場合にスケールアウトさせにくくなる
    • サーバは常にクライアントのアプリケーション状態を覚えている必要がある
  • ステートレスの利点
    • リクエストメッセージに必要な情報を全て含める(自己記述的メッセージ)ため、新しく来るリクエストの処理に集中することができる
    • 各クライアントが自分のアプリケーション 状態を伝えるので、サーバは情報を覚えておく必要がない
  • ステートレスの欠点
    • 送信するデータ量が多くなる
    • 認証など、サーバに負荷がかかる処理を繰り返す
    • パフォーマンスの低下に影響がある
8つのメソッド
  • HTTPメソッドには、クライアントが行いたい処置をサーバに伝える重要な任務があり、8つの限定されたメソッドが定義されている
    • GET : 指定したURIの情報を取得
    • POST : 子リソースの作成、既存リソースへのデータ追加、他のメソッドでは対応できない処理の実行
    • PUT : リソースの更新、リソースの作成
    • DELETE : リソースの削除
    • HEAD : リソースのヘッダ(メタデータ)の取得
    • OPTIONS : リソースがサポートしているメソッドの取得
    • TRANCE : 自分宛にリクエストメッセージを返す(ループバック)試験
    • CONNECT : プロキシ動作のトンネル接続への変更

※POSTとPUTの使い分け
どちらもリソースを作成することが可能であるが、リソースの作成はPOSTで行い、URIもサーバ側で決定する設計が望ましい

  • POSTでリソースを作成する場合は、リソースのURIを指定できない
  • PUTでリソースを作成する場合は、リソースのURIはクライアントが決定する
ステータスコード・・レスポンスの意味を伝える

大きく下記5種類に分類でき、それぞれに意味があるためWebサービスやWeb APIでエラーが起きた時に、どのステータスコードを返すかは、とても重要な設計の検討事項である(正しく使うことが重要)

  • 1xx:処理が継続していることを示す
  • 2xx:リクエストが成功したことを示す
  • 3xx:他のリソースへのリダイレクトを示す
  • 4xx:クライアントエラーを示す。クライアントのリクエストに原因あり
  • 5xx:サーバエラーを示す。サーバ側に原因あり
HTTPヘッダ
  • HTTPヘッダとは : メッセージのボディの対する付加的な情報、いわゆるメタデータを表現する
  • 電子メールプロトコルとの違い : メールプロトコルが一方的にしかメッセージをやりおりしないのに対し、HTTPは一度の通信でリクエスト / レスポンスの2つのメッセージをやりとりする点
  • メソッドやステータスコードと組み立て、認証やキャッシュなどのHTTPの重要な機能を実現する
Webの成功理由
  • HTTPメソッドを限定したからこそプロトコルがシンプルに保たれ、Webは成功した
                                            • -

次回は、第4部 ハイパーメディアフォーマットについてまとめて行きたいと思います。
以上、ハチマキでした。