【Web】HTTP
HTTPリクエスト
HTTPリクエストは、データのかたまりを送っている
参照:
https://developer.mozilla.org/ja/docs/Web/HTTP/Messages
・HTTPリクエストのボディ部分
GET…空
POST…POSTの情報が入っている
・荷物を送る場面に例えると
HTTPリクエスト(=荷物の中身)
GETとPOST
・GETは参照(リソースの取得)のみに用いる
・GETは副作用がないことが期待される
・POSTは秘密情報の送信に用いる
=MEMO==============================
副作用
・リソース(コンテンツ)の取得以外の作用
・サーバー側でのデータの追加・更新・削除が起きる作用のこと
ex)物品の購入、利用者の登録・削除などの処理
==================================
秘密情報をPOSTで送信するべき理由
GETは以下の可能性を含んでいるため
・URL上に指定されたパラメータがReferer経由で外部に漏洩する
・URL上に指定されたパラメータがアクセスログに残る
・URL上のパラメータがブラウザのアドレスバーに表示され他人にのぞかれる
・パラメータつきのURLを利用者がソーシャルネットワークなどで共有してしまう
GETとPOSTの使い分け
以下がひとつでも当てはまる場合はPOSTを使う
ひとつも当てはまらない場合にはGETを使う
・データ更新など副作用を伴うリクエストの場合
・秘密情報を送信する場合
・送信するデータの総量が多い場合
HTTPのステートレス性
・サーバー側は、クライアントの現在の状態を保持しない
Q.アプリケーションから状態を保持したい要求がきたときは?
A.セッション管理を行う
・ステートレスプロトコル⇔ステートフルプロトコル ex)FTP
セッション管理
・アプリケーションの状態を覚えておくことを、セッション管理と呼ぶ
・セッション管理をHTTPで実現する仕組みがクッキー
クッキー
・サーバー側からブラウザに対して、「名前=変数」の組を覚えておくように指示するもの
・保持できる値の個数や文字列長には制限がある
・クッキーの値は利用者本人には参照・変更できるので、秘密情報の格納には向かない
→アプリケーションデータを保持する目的でクッキーそのものに値を入れることはあまり行われない
→クッキーには「整理番号」としてのセッションIDを格納し、実際の値はサーバー側で管理する方法が広く用いられる
セッションID
・求められる要件
①第三者がセッションIDを推測できないこと
→連番だとバレやすいので、乱数にする
②第三者からセッションIDを強制されないこと
→認証されたタイミングでセッションIDを変更する
(セッションIDの固定化攻撃を防ぐ!)
③第三者にセッションIDが漏洩しないこと
→ネットワーク盗聴から保護するにはTLSによる暗号化が有効
参考:
https://www.amazon.co.jp/dp/B07DVY4H3M/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1