『Web技術の基本』勉強会用
読んでいて気になったことや、自分の担当範囲のポイントとかをまとめるよ。
インターネットとWebはもともと別々の用途として作られて、のちにそれが融合することとなったのか(p14)
- インターネット:各地のコンピューターをネットワークで繋げる
-
Web:世界中の人と文書を共有するシステム(仕組み)
Webのことをインターネットだと混同してしまうのも無理はない気もする。
Webの標準化の話で、「HTMLの標準化」の話を思い出した(p28)
「Webアプリケーション」と「Webサービス」を同一視していたけど、SaaSみたいな便利なAPIを提供してくれるようなものを「Webサービス」と呼ぶのか(p32)
TCP/IPはインターネットを形成する標準プロトコル。
HTTPはTCP/IPの一部(p36)。
HTTPメッセージ
HTTP(Hyper Text Transfer Protocol)は、「Hyper Text(Webページを構成するデータ)」をやり取りする際に使われる約束事。
WebブラウザやWebサーバーはこの通信ルールに則ってやり取りを行う。
HTTPメッセージは以下の2種類に分かれる。
- HTTPリクエスト
-
HTTPレスポンス
HTTPメッセージの構成は以下の通り。
- 1行目:リクエスト行 / ステータス行(本参照)
- 2行目:メッセージヘッダー(後述)
以下略(実際のデータなど)
メッセージヘッダー
HTTPメッセージ(HTTPリクエスト / HTTPレスポンス)に関しての詳細な情報を付け加える場所。
メッセージヘッダー内に書かれる1行1行のことを「ヘッダーフィールド」と呼ぶ。
主なヘッダーフィールドについては本参照。
HTTPメソッドとステータスコード
HTTPメソッド
HTTPリクエストの中に含まれる「HTTPメソッド」が、Webサーバーに対して具体的な要求を伝える。
主要なものは以下の通り。
- GET(データ[リソース]の取得)
- POST(データの送信。何でも出来る)
- PUT(データの更新)
- DELETE(データの削除)
HTTPメソッドは、サーバー側でどのHTTPメソッドを受け付けるかを設定することができる。
GETメソッドとPOSTメソッドでは、フォームに入力した値がクエリパラメータとして送られるかどうかという点で違いがある。
ログインIDやパスワードなどといった機密性の高い個人情報などは基本的にPOSTメソッドを使用する。
ステータスコード
HTTPリクエストを投げた時の処理結果としてHTTPレスポンスの中に「ステータスコード」が含まれている。
主要なステータスコードは以下の通り(詳しくは本参照)
- 200番台(正常に成功)
- 400番台(クライアント側のエラー)
- 500番台(サーバー側のエラー)
TCPによるデータ通信とHTTP通信
TCP(Transmission Control Protocol)
TCPは実際のHTTPのデータのやりとりを担う(TCP/IPの4階層モデルの中のトランスポート層に属する)。
TCPでは、データのやり取りを行う前にお互いが通信出来る状態かを確認し、クライアントとサーバー間で「コネクション」という通信経路の確立をしてから通信を始める。
(因みに、サーバーへの確認なしに一方的に送りつけるのがUDP。違うかも🙄)
HTTP通信の歴史
従来のHTTP通信では、1回やりとりする度にコネクションを張り直していた。また、リクエストへのレスポンスを一つ一つ解決してからでないと次のリクエストを送ることができなかった。
- → HTTP/1.1の「キープアライブ(keep-alive)」により1つのコネクションの中で何度もやり取りができるように。
- → HTTP/1.1の「パイプライン」により、レスポンスを待たずに複数リクエストを送ることができるように(但し、リクエストを受け付けた順にレスポンスを返さないといけない、という縛りが。これがHTTP/2に繋がる)。
上で見たように、HTTP/1.1の「パイプライン」機能は、リクエストを受け付けた順にレスポンスを返さなければならないという縛りがあった
- → HTTP/2では「ストリーム(1つのTCPコネクション上に複数生成)」という単位でデータ通信を行うことで、個々のストリームごとにデータ通信をすることが可能となった。つまり、リクエストの順番に関係なくレスポンスを返すことが可能になった。スゴイ!(しかし、パケットロスなどの問題によってストリームは他のストリームの影響を受けてしまうという問題がある。これがHTTP/3に繋がる…)
ステートレスとCookie・Session
ステートレス
HTTPは「ステートレス(=状態を持たない)」なプロトコルである。
世界中から来る大量のアクセスに対して、対応するサーバー(より正確に言えばHTTP通信)が各クライアントからの情報を保持しておくのはとても負担になるためにこのような仕組みになっている。
そのため、状態を保持する仕組みはHTTPとは別の仕組みを用いて行う。
それが「Cookie」と「Session」。
キーワードは「HTTPはステートレス」と「Cookieを用いたSession管理」。🤔?
CookieとSession
- Cookie:ブラウザにテキスト情報(ログイン情報など)を残しておくための仕組み(お菓子ではない🍪)
- Session:(ログイン後)ユーザーの一連の行動(流れ)
<<< 恐らく図解したほうがわかりやすいので図解予定(ECサイト) >>>
以下の一つ一つ自体がセッションであり、この全体の流れ全てもセッションと言える。
e.g. ユーザーがログインする(基本的にはこのタイミングでset-Cookie)
e.g. ユーザーが商品一覧を見る
e.g. ユーザーが商品Aをカートに入れる
e.g. ユーザーが商品Bをカートに入れる
e.g. ユーザーがカートに入っているものを購入する
e.g. ユーザーがログアウトする