上記の本を読み進めながら学習をしているので、その忘備録的な内容。Protocolの略。Language)で書かれた文章などの情報をやりとりする時に使われる通信手順を意味する。HTTPではデータが暗号化されていないため、通信経路のどこかで内容を知られる可能性がある。第三者に知られたくない情報をやり取りする際には、別途暗号化を行うか、暗号化されたHTTPSという通信手段を使う必要がある。基本的なHTTPブラウザからリンクを叩くと、リンク先へページが遷移する。この時に、ブラウザはサーバーへHTTPリクエストを送信し、サーバはブラウザへHTTPレスポンスを返す。リクエストラインリクエストメッセージの1行目は、リクエストラインと呼ばれ、webサーバに対する命令。リクエストラインは、メソッド,URL(URI),プロトコルバージョンを空白で区切って表す。プロトコルバージョンHTTPのメソッドはGETのほか、POSTやHEADなどがある。GETとPOSTはhtmlのform要素に指定するmethod属性と同じ。リクエストメッセージの2行目以降は、ヘッダと呼ばれ、名前と値を:で区切ってある。sample.comこの中で必須のヘッダはHostのみ。レスポンスメッセージレスポンスメッセージはステータスライン,ヘッダ,ボディから構成される。ステータスラインリクエストメッセージの処理結果を返す。レスポンスヘッダレスポンスメッセージの2行目以降は、ヘッダ。ヘッダは空行が現れるまで続く。POSTメソッドPOSTをすると、リクエストラインの冒頭がPOSTになる。GETと異なり、空行に続いてブラウザから入力された値が送信される。この部分をメッセージボディと呼ぶ。メッセージボディPOSTメソッドによるリクエストメッセージには、ボディという部分がある。レスポンスメッセージ同様、ヘッダとボディは空行で区切る。リクエストのボディには、POSTで送信される値が入る。POSTによって送信される値に関するヘッダがContent-TypeとContent-Length。Content-Lengthボディのバイト数。Contetn-TYpe送信する値のMINEタイプで、HTMLのform属性で指定することができる。指定がない場合は、application/x-www-form-urlencodedになる。これは名前=値の組を&でつないだデータ形式で、パーセントエンコーディングされる。パーセントエンコーディングURL上で特別な意味を持つ、記号や日本語などをURL上に記述するとき用いられる。対象の文字をバイト単位で%xxという形式で用いられる。xxはバイトの16進数表記。スペースは%20となるが、application/x-www-form-urlencodedの場合はスペースを特別扱いして+に符号化する。RefererRefererはリンク元のURLを示すヘッダ。form要素によるフォーム送信、a要素のリンク、img要素の画像参照でもRefererヘッダがつく。Refererを確認することで、アプリケーションが意図した遷移を経ていることを確認できる。ツールや、ブラウザのプラグインなどによって改変・削除されることがあるため必ず正しいとは限らない。URLがセッションIDを含んでいる場合、Referer経由で外部に漏洩しなりすましに利用される場合がある。リソースの取得以外の作用(追加・更新・削除が起きるなど)GETメソッドはURLにクエリ文字列の形でパラメータを渡すが、URLの長さには上限がある。多量が多い場合には、POSTメソッドを使うほうが安全。秘密情報をPOSTで送信すべき理由は、GETだと下記の可能性があるため。hiddenパラメータ利用者の入力した値はhiddenパラメータとして、HTML上に記述されている。HTTPはFTP、talnetとは異なり、クライアントの現在の状態を覚えておく設計になっていない。HTTPのステートレス性という。現在の状態を覚えているプロトコルは、ステートフルというHTTPというレイヤーでは、ブラウザ上では変更できない値も、書き換え可能。hiddenパラメータのメリットhiddenは利用者自身からは書き換え可能だが、情報漏洩や第三者からの書き換えに対しては堅牢クッキーやセッション変数は、セッションIDの固定化攻撃に弱いのが欠点。このため、利用者自身によっても書き換えられて困る認証や許可に関する情報はセッション変数に保存すべき。それ以外は、まずhiddenパラメータに保存することを検討する。原則としてセッション変数の使用を避ける。ステートレスなHTTP認証HTTP認証と総称されるが、実装方式によってBasic認証、NTLM認証、Digest認証などがる。HTTPステートレスなプロトコルなのでHTTP認証もステートレス。Unauthorized(認証が必要なのにされてない)というステータスを返す。ユーザ名とパスワードを入力すると、再度HTTPリクエストメッセージが送信される。その際、以下のAuthorizationヘッダが付与される。dXN1cjE6cGFzczE=Basicの後ろの文字列はIDとパスワードを:で区切ってつなげてBase64でエンコードしたもの。dXN1cjE6cGFzczE=をデコードするとuser1:pass1という文字列になる。一度Basic認証に成功すると、Basic認証がかけられているディレクトリにリクエストがあったときに、自動的にAuthorizationへっだを付与する。