hiro_env

モダンな技術スタックを扱う会社のエンジニアになるまでの学習記録

web技術の基本について

プロになるためのWeb技術入門』という本で登場する重要な語句についての備忘録です。

  • ステートフル
  • ステートレス
  • リクエス
  • レスポンス
  • クッキー
  • プロトコル
  • ポート番号

について、順番に内容を記述します。

ステートフル


状態を保持するという意味であり、データの送受信に用いられるプロトコルにおいては、以前の通信内容を記憶していること。

ステートレス


ステートフルと逆の意味であり、状態を保持しないこと。

  • HTTPはステートレスなプロトコルであるため、ログイン状態を保つためのセッションIDやサーバーから送られるトークンなどの情報を保持するためにクッキーを用いる。

リクエス


クライアント(ブラウザ)が特定のプロトコルを用いてサーバーにリソースを要求すること。

HTTPの場合、リクエストの方法がメソッドとして複数用意されており、中でもGETとPOSTが最もよく使われる。

  • GETメソッド: 情報を取得する際に使われ、文字数制限はあるがURLにクエリパラメーターやパスパラメータとして情報を付与してサーバーに送ることができる。
    URLを見ることで送る内容は確認可能であり、検索などの副作用がない操作や冪等性が担保される動作になることが期待される。

  • POSTメソッド: リクエストのボディに内容を付与してサーバーに送ることができる。
    データ量に明示的な制限がなく内容はリクエストの中身を見ない限りは隠蔽され、サーバーの情報を変更することに使われる。

リクエストの中身は主にリクエストライン、ヘッダー、ボディに分けられる。
GETメソッドにはボディは存在せず、POSTリクエストではボディを用いてサーバーに情報を送信する。

リクエストライン
POST URL(省略可)/path1/path2/ HTTP/1.1

リクエストラインは空白で区切られたメソッド、URI、HTTPバージョンの3つの文字列から成り立っている。

ヘッダー
Host: example.com
Connection: keep-alive
Content-Type: application/json
Cookie: example_cookie
Accept: text/html
Accept-Language: ja

ヘッダーは、必須項目であり送り先を指定するHost、ボディのタイプを示すContent-Typeや、レスポンスで受け取ることを期待するタイプを指定するAccept、Cookieの情報を含むCookieなどがある。
ボディにはContent-Typeによって指定された異なる形式のデータが含まれる。

レスポンス


サーバーがクライアントから受けたリクエストに対して情報を返すこと、またその内容のこと。

HTTPのレスポンスは最初の行がステータスラインと呼ばれ、HTTPのバージョン、ステータス・コード(100番台〜500番台)、コードに対応するレスポンス・フレーズ(200-OK,502-Bad Gatewayなど)が記載されている。

ステータスライン
HTTP/1.1 200 OK

ステータス・コードとレスポンス・フレーズ

ステータスラインに続いてリクエストと同じようにヘッダが存在し、Content-TypeやSet-Cookie、Locationなどが指定されている。
ステータスコードが204(No Content)や304(Not Modified)等の、レスポンスのボディが必要ない(もしくは何らかの原因で返されなかった)場合を除いてヘッダの後にレスポンスボディが存在し、その中身がリクエストに対するコンテンツの内容としてステータスラインとヘッダと共に返される。

クッキー


ブラウザによってローカルコンピュータに保存される、サーバーから送られるデータのこと。

  • ステートレスなプロトコルであるHTTPを利用するブラウザは、サーバーから送られたセッションIDなどをCookieに保存することでログイン状態の維持、設定の保持を実現する。

  • クッキーにはいくつかの属性があり、代表的なものにExpires / MaxAge (有効期限の設定)やHttpOnly(JavaScriptからのアクセスを禁止する)、Secure(Https通信でのみ使用できる)がある。

  • これらはサーバーからのレスポンスのSet-Cookieヘッダーで、どのような属性を持つCookieとして保存するかを指定されることで決められている。

  • 中でもDomain属性とPath属性は、ブラウザがどのサーバーにクッキーを送信するかを規定しているため、別サーバには送れないようにクライアントから操作して変更することはできない。

プロトコル


どのように情報をやり取りするのか、通信をする際の決められたルールのこと。

ポート番号


サーバーがクライアントからリクエストを受け取る際、サーバーが自身で起動しているどのアプリケーションへそのリクエストを渡せばいいのかを識別するために使われる番号のこと。

  • 0~65535番まで存在してサーバー側はアプリごとに自由に割り当てることができる。

  • ただし特定のプロトコルやサービスに関しては、ウェルノウンポートとして0~1023番までの番号がIANA(Internet Assigned Numbers Authority)によって規定されており、サーバーではこれに基づいたポートの設定が推奨されている。(HTTP→80, HTTPS→443, SSH→22)

  • また、1024~49151番はレジスタードポートとして同じくIANAによって規定されており、有名なものにはMySQLの3306番がある。ウェルノウンよりも柔軟にそぞれのサーバーが自由に設定することが一般的である。

  • 技術的にはウェルノウンもレジスタードもサーバーによってIANAの規定を無視することも可能だが、特別な理由がなければ基本的にはその規定に従うように設定することが推奨されている。

  • 一方、49152~65535番まではプライベート(動的)ポート番号、と呼ばれ、臨時の通信でサーバーが自由に設定することができる番号となっている。

ポート番号の参考サイト

TCP/IPポート番号一覧

(参考書)

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか | 小森 裕介 |本 | 通販 | Amazon