HTML5プロフェッショナル認定試験Level1【http / https】

## リクエストメソッドの種類
| メソッド | 役割 |
| ---- | ---- |
| HEAD | GET リクエストと同じだが<br/>レスポンス本文(body)を返さない。 |
| OPTION | 対象リソース(サーバ)の通信オプションを示す |
| CONNECT | 対象リソースで識別されるサーバーとの間に<br/>トンネルを確立 |
| TRACE | 対象リソースへのパスに沿ってメッセージの<br/>ループバックテストを実行。(ネットワーク経路の調査) |

## HTTPレスポンスステータスコード
<details><summary>101</summary>

プロトコルの切り替え
</details>
<details><summary>200</summary>

成功レスポンス
</details>
<details><summary>201</summary>

リソースの作成が成功（主にPOST）
</details>
<details><summary>301</summary>

永続的なリダイレクト（GET、HEADで使用）
</details>
<details><summary>304</summary>

キャッシュしたファイルを使用する。<br/>リソースを再送しない。
</details>
<details><summary>307</summary>

一時的なリダイレクト
</details>
<details><summary>400</summary>

クライアントエラー
</details>
</details>
<details><summary>401</summary>

要認証
</details>
<details><summary>403</summary>

アクセス権がない
</details>
<details><summary>404</summary>

リソースが存在しない
</details>
<details><summary>500</summary>

サーバーエラー
</details>



## HTTPヘッダフィールド

<details>
<summary>Accept-Language</summary>

ブラウザが受け入れ可能な言語を設定できる
</details>

<details>
<summary>Accept</summary>

クライアントが受け入れ可能なコンテンツタイプ([MIMEタイプ](https://developer.mozilla.org/ja/docs/Web/HTTP/MIME_types))を設定
</details>

<details>
<summary>Age</summary>

プロキシのキャッシュに入ってからの経過時間（秒）
</details>
<details>

<summary>Authorization</summary>

認証情報
</details>
<details>

<summary>Cache-control</summary>

キャッシュを制限する
</details>
<details>
<summary>Content-Encoding</summary>

メッセージの内容に適用されているエンコード方式とその順番を保持
</details>

<details>
<summary>Content-Type</summary>

リソースの元のメディア種別。POST, PUTで使用。
</details>

<details>
<summary>Cookie</summary>

クッキーの送受信
</details>

<details>
<summary>Content-Language</summary>

ユーザー向けの言語を設定
</details>

<details>
<summary>Content-Length</summary>

メッセージボディのサイズ
</details>

<details>
<summary>Expires</summary>

リソースの有効期限(レスポンスが古くなると見なされる日時)
</details>

<details>
<summary>From</summary>

リクエスト元の user agent を制御する人のユーザーの E メールアドレスを含む
</details>

<details>
<summary>Host</summary>

サーバーのホスト名とポート名
</details>

<details>
<summary>Last-Modified</summary>

リソースの最終更新日時
</details>

<details><summary>Location</summary>

リダイレクト先のURL
</details>

<details>
<summary>Referer</summary>

前のページのURL
</details>

<details>
<summary>User-Agent</summary>

リクエストしたブラウザを識別する特殊文字列
</details>

※ 実際のリクエスト例
> POST http://www.hogehoge HTTP/1.1
> Content-Length: 38
> Content-Type: text/plan
> Accept-Language: ja
>
> param=123

というように、
> リクエストメソッド URL HTTPバージョン
> HTTPヘッダ
> HTTPヘッダ
>
> リクエストボディ

という構成になっている。

## HTTPSについて
- HTTPに比べて、安全に通信を行う為のプロトコル
- SSL/TLSで暗号化して通信。暗号化は、CA（認証局）が発行する証明書が必要
- 暗号化が必要な為、HTTPと比べて負荷がある

また`http`と`https`のポート番号は以下である。
> http -> 80
> htps -> 443


## HTTPクッキー
Cookieとは、サーバーがクライアントのブラウザーに送信する少量のデータ（4KBほど）。
ブラウザは、Cookieを保存・作成・更新しサーバーに送信することができる。
セキュリティの観点から、HTTP通信、Javascript操作をさせたくない場合は、HTTPクッキーにSecure、HttpOnly属性を追加する。

## URLの構成
> スキーマ://ホスト名:ポート番号/ディレクトリ/ファイル名

となっている。
またスキーマ://ホスト名:ポート番号までを`オリジン`と呼ぶ。
例：https://hoge.com/⚪︎×△◻︎/foo/edit?q=123#top
の場合、https://hoge.com までが`オリジン`となる。
`#top`はフラグメントと呼び、同一ページ内のリンクを扱う。

<details><summary>Basic認証</summary>

- ブラウザで、ユーザー名・パスワードを**Base64**化してAuthorizationに付与する
- 認証失敗した場合、サーバーから`401`が返却
</details>

<details><summary>Digest認証</summary>

- ユーザー名とパスワードを、`SHA-2`か`MD5`**ハッシュ値**化した上でリクエストする
- Basic認証より安全
※ ハッシュ化とは、一定んアルゴリズムで元データからハッシュ値化を生成。元データに変更があれば、ハッシュ値も変更される。サーバーで、あらかじめ保持データのハッシュ値かしておくことでクライアント側とのデータの突き合わせが可能となる
</details>