第 6 回 の 内 容 コンテントネゴシエーション キャッシュ 制 御 HTTP 認 証 アクセス 解 析
コンテントネゴシエーション
リソースの 表 現 バリアント HTML 文 書 日 本 語 PDF 英 語 PNG 画 像 日 本 語 プレーンテキスト 英 語 リソース
コンテントネゴシエーション HTTPリクエストメッセージのヘッダで 希 望 する 表 現 をサーバに 通 知 複 数 の 候 補 を 優 先 度 付 きで 指 定 可 サーバは もっとも 適 したバリアントを 送 り 返 す
関 連 するヘッダフィールド ヘッダ 説 明 Accept 希 望 するメディアタイプを 伝 える Accept-Language 希 望 する( 自 然 ) 言 語 を 伝 える
優 先 度 q=x X は0から1の 数 字 ( 小 数 点 以 下 最 大 3 桁 ) 既 定 値 は1 0なら 希 望 しない( 利 用 できない)
Acceptヘッダ 希 望 するメディアタイプを 伝 える タイプ/サブタイプ 書 式 意 味 タイプ/* あるタイプすべて 例 : image/* 画 像 のタイプすべて */* すべてのメディアタイプ
Acceptヘッダ 希 望 するメディアタイプを 伝 える Accept: text/html,application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8
Acceptヘッダ 希 望 するメディアタイプを 伝 える Accept: text/html,application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8 メディアタイプ 優 先 度 text/html 1 ( 既 定 値 )
Acceptヘッダ 希 望 するメディアタイプを 伝 える Accept: text/html,application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8 メディアタイプ 優 先 度 text/html 1 ( 既 定 値 ) application/xhtml+xml 1 ( 既 定 値 )
Acceptヘッダ 希 望 するメディアタイプを 伝 える Accept: text/html,application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8 メディアタイプ 優 先 度 text/html 1 ( 既 定 値 ) application/xhtml+xml 1 ( 既 定 値 ) application/xml 0.9
Acceptヘッダ 希 望 するメディアタイプを 伝 える Accept: text/html,application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8 メディアタイプ 優 先 度 text/html 1 ( 既 定 値 ) application/xhtml+xml 1 ( 既 定 値 ) application/xml 0.9 */* 0.8
Acceptヘッダ 希 望 するメディアタイプを 伝 える Accept: text/html,application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8 HTML 文 書 (text/html)かxhtml 文 書 (application/ xhtml+xml)をもっとも 希 望 する ( 優 先 度 1) 次 にXML 文 書 (application/xml)を 希 望 する ( 優 先 度 0.9) それ 以 外 (*/*)でもよい ( 優 先 度 0.8)
希 望 する 言 語 を 伝 える Accept-Languageヘッダ 言 語 タグ 書 式 : X または X-Y X 言 語 Y 国 や 地 域 言 語 タグ 意 味 ja 日 本 語 ja-jp 日 本 で 話 される 日 本 語 en 英 語 en-us アメリカ 英 語 en-ca カナダ 英 語 fr-ca カナダで 話 されるフランス 語
希 望 する 言 語 を 伝 える Accept-Languageヘッダ Accept-Language: ja,en-us;q=0.7,en;q=0.3 日 本 語 (ja)をもっとも 希 望 する ( 優 先 度 1) 次 にアメリカ 英 語 (en-us)を 希 望 する ( 優 先 度 0.7) 次 に 国 や 地 域 を 指 定 せずに 英 語 (en)を 希 望 する ( 優 先 度 0.3)
コンテントネゴシエーションの 例 (1) リクエスト GET /manual HTTP/1.1 Accept: text/html, application/pdf;q=0.5 レスポンス HTTP/1.1 200 OK Content-Type: text/html リクエスト GET /manual HTTP/1.1 Accept: application/pdf, text/html;q=0.5 レスポンス HTTP/1.1 200 OK Content-Type: application/pdf
コンテントネゴシエーションの 例 (2) リクエスト GET /greeting HTTP/1.1 Accept: text/html, */*;q=0.5 Accept-Language: en, ja;q=0.5 レスポンス HTTP/1.1 200 OK Content-Type: text/html <!DOCTYPE html> <html lang="en"> <head><title>greeting</title></head> <body><p>hello!</p></body> </html>
コンテントネゴシエーションの 例 (2) リクエスト GET /greeting HTTP/1.1 Accept: text/plain, */*;q=0.5 Accept-Language: ja, en;q=0.5 レスポンス HTTP/1.1 200 OK Content-Type: text/plain こんにちは
言 語 の 優 先 順 位 の 設 定
Accept-Languageヘッダ Accept-Language: ja,en-us;q=0.7,en;q=0.3
言 語 の 優 先 順 位 の 設 定
Accept-Languageヘッダ Accept-Language: ja,en-us;q=0.7,en;q=0.3 Accept-Language: de,ja;q=0.8,en-us;q=0.5,en;q=0.3
コンテントネゴシエーションの 実 例 このページは Webには 掲 載 しません
ステータスコード406 100 Continue 101 Switching Protocols 200 OK 201 Created 202 Accepted 203 Non-Authoritative Information 204 No Content 205 Reset Content 206 Partial Content 300 Multiple Choices 301 Moved Permanently 302 Found 303 See Other 304 Not Modified 305 Use Proxy 307 Temporary Redirect 400 Bad Request 401 Unauthorized 402 Payment Required 403 Forbidden 404 Not Found 405 Method Not Allowed 406 Not Acceptable 407 Proxy Authentication Required 408 Request Timeout 409 Conflict 410 Gone 411 Length Required 412 Precondition Failed 413 Payload Too Large 414 URI Too Long 415 Unsupported Media Type 416 Range Not Satisfiable 417 Expectation Failed 426 Upgrade Required 500 Internal Server Error 501 Not Implemented 502 Bad Gateway 503 Service Unavailable 504 Gateway Timeout 505 HTTP Version Not Supported
ステータスコード406 リクエスト GET /manual HTTP/1.1 Accept: image/jpeg, image/png, image/*;q=0.5 レスポンス HTTP/1.1 406 Not Acceptable Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>406 Not Acceptable</title> </head><body> <h1>not Acceptable</h1> <p>an appropriate representation of the requested resource /manual could not be found on this server.</p> Available variants: <ul> <li><a href="manual.pdf">manual.pdf</a>, type application/pdf</li> <li><a href="manual.html">manual.html</a>, type text/html</li> </ul> </body></html>
ステータスコード406 リクエスト GET /manual HTTP/1.1 Accept: image/jpeg, image/png, image/*;q=0.5 レスポンス HTTP/1.1 406 Not Acceptable Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>406 Not Acceptable</title> </head><body> <h1>not Acceptable</h1> <p>an appropriate representation of the requested resource /manual could not be found on this server.</p> Available variants: <ul> <li><a href="manual.pdf">manual.pdf</a>, type application/pdf</li> <li><a href="manual.html">manual.html</a>, type text/html</li> </ul> </body></html>
ステータスコード406 リクエスト GET /manual HTTP/1.1 Accept: image/jpeg, image/png, image/*;q=0.5 レスポンス HTTP/1.1 406 Not Acceptable Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>406 Not Acceptable</title> </head><body> <h1>not Acceptable</h1> <p>an appropriate representation of the requested resource /manual could not be found on this server.</p> Available variants: <ul> <li><a href="manual.pdf">manual.pdf</a>, type application/pdf</li> <li><a href="manual.html">manual.html</a>, type text/html</li> </ul> </body></html>
ステータスコード406 リクエスト GET /manual HTTP/1.1 Accept: image/jpeg, image/png, image/*;q=0.5 レスポンス HTTP/1.1 406 Not Acceptable Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>406 Not Acceptable</title> </head><body> <h1>not Acceptable</h1> <p>an appropriate representation of the requested resource /manual could not be found on this server.</p> Available variants: <ul> <li><a href="manual.pdf">manual.pdf</a>, type application/pdf</li> <li><a href="manual.html">manual.html</a>, type text/html</li> </ul> </body></html>
キャッシュ 制 御
キャッシュ 一 度 取 得 したリソースを 保 存 し 後 で 再 利 用 1. Webブラウザが 管 理 する 記 憶 場 所 2. 中 継 を 行 うコンピュータ (プロクシサーバなど)
キャッシュの 保 存 と 利 用 Webブラウザ リクエストを 発 行 プロクシサーバ Webサーバ キャッシュに 保 存 キャッシュに 保 存 レスポンスを 返 却 リソースA
キャッシュの 保 存 と 利 用 Webブラウザ Webブラウザの キャッシュを 利 用 プロクシサーバ Webサーバ Webブラウザ プロクシサーバの キャッシュを 利 用 リソースA
サーバが 返 す 情 報 キャッシュしてもよいか リソースの 有 効 期 間 リソースの 最 終 更 新 日 時 リソースの 特 定 のバージョンを 表 す エンティティタグと 呼 ばれる 文 字 列
条 件 付 きGET リソースがある 日 時 以 降 に 更 新 されていれば そのリソースを 送 り 返 す 更 新 されていなければ ステータスコード304 (Not Modified)を 返 す リソースがあるエンティティタグを 持 っていな ければ そのリソースを 送 り 返 す エンティティタグが 同 じであれば ステータス コード304を 返 す
Cache-Controlヘッダ Cache-Control: no-store フィールド 値 意 味 no-store キャッシュしてはいけない
Cache-Controlヘッダ Cache-Control: no-store Cache-Control: no-cache フィールド 値 意 味 no-store no-cache キャッシュしてはいけない キャッシュしてもよいが 再 利 用 するため には 有 効 性 の 確 認 が 必 要
フィールド 値 意 味 no-store no-cache Cache-Controlヘッダ Cache-Control: no-store Cache-Control: no-cache Cache-Control: max-age=86400 キャッシュしてはいけない キャッシュしてもよいが 再 利 用 するため には 有 効 性 の 確 認 が 必 要 max-age=x キャッシュが 有 効 である 期 間 ( 秒 )
Last-Modifiedヘッダ Last-Modified: Sat, 05 Oct 2013 06:00:00 GMT
Etagヘッダ Etag: "abcde"
条 件 付 きGET 最 終 更 新 日 時 を 条 件 にする 場 合 If-Modified-Sinceヘッダ エンティティタグを 条 件 にする 場 合 If-None-Matchヘッダ
条 件 付 きGET リクエスト レスポンス リクエスト レスポンス GET /doc HTTP/1.1 HTTP/1.1 200 OK Cache-Control: max-age=86400 Last-Modified: Sat, 05 Oct 2013 06:00:00 GMT Etag: "abcde" Content-Type: text/html GET /doc HTTP/1.1 If-Modified-Since: Sat, 05 Oct 2013 06:00:00 GMT HTTP/1.1 304 Not Modified Etag: "abcde"
条 件 付 きGET リクエスト レスポンス GET /doc HTTP/1.1 HTTP/1.1 200 OK Cache-Control: max-age=86400 Last-Modified: Sat, 05 Oct 2013 06:00:00 GMT Etag: "abcde" Content-Type: text/html リクエスト レスポンス GET /doc HTTP/1.1 If-Modified-Since: If-None-Match: "abcde" Sat, 05 Oct 2013 06:00:00 GMT HTTP/1.1 304 Not Modified Etag: "abcde"
条 件 付 きGET リクエスト レスポンス GET /doc HTTP/1.1 If-Modified-Since: Sat, 05 Oct 2013 06:00:00 GMT If-None-Match: "abcde" HTTP/1.1 200 OK Last-Modified: Mon, 07 Oct 2013 10:16:10 GMT Etag: "vwxyz" Content-Type: text/html
HTTP 認 証
Basic 認 証 の 動 作 例
Basic 認 証
Basic 認 証 リクエスト レスポンス GET /secret HTTP/1.1 Host: www.example.ac.jp HTTP/1.1 401 Unauthorized WWW-Authenticate: Basic realm="example.ac.jp secret space" Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>401 Unauthorized</title> ( 以 下 略 )
Basic 認 証
Basic 認 証
Basic 認 証 リクエスト レスポンス GET /secret HTTP/1.1 Host: www.example.ac.jp Authorization: Basic bw9yaw1vdg86ywjjzdeymzq= HTTP/1.1 401 Unauthorized WWW-Authenticate: Basic realm="example.ac.jp secret space" Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>401 Unauthorized</title> ( 以 下 略 )
Basic 認 証
Basic 認 証
Basic 認 証 リクエスト レスポンス GET /secret HTTP/1.1 Host: www.example.ac.jp Authorization: Basic bw9yaw1vdg86y29ycmvjdhb3 HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 <!DOCTYPE html> <html> <head> <title> 秘 密 の 情 報 </title> ( 以 下 略 )
Basic 認 証
Basic 認 証 1 クライアント 認 証 が 必 要 なリソースへ 認 証 情 報 を 含 めずに アクセス
Basic 認 証 1 クライアント 認 証 が 必 要 なリソースへ 認 証 情 報 を 含 めずに アクセス 2 サーバ ステータスコード401を 返 す 認 証 に 関 する 情 報 はWWW-Authenticateヘッダ フィールドで 指 定
Basic 認 証 1 クライアント 認 証 が 必 要 なリソースへ 認 証 情 報 を 含 めずに アクセス 2 サーバ ステータスコード401を 返 す 認 証 に 関 する 情 報 はWWW-Authenticateヘッダ フィールドで 指 定 3 クライアント 認 証 を 受 けるために 必 要 な 情 報 を Authorizationヘッダフィールドに 含 め 再 度 リクエスト
Basic 認 証 1 クライアント 認 証 が 必 要 なリソースへ 認 証 情 報 を 含 めずに アクセス 2 サーバ ステータスコード401を 返 す 認 証 に 関 する 情 報 はWWW-Authenticateヘッダ フィールドで 指 定 3 クライアント 認 証 を 受 けるために 必 要 な 情 報 を Authorizationヘッダフィールドに 含 め 再 度 リクエスト 4 サーバ 正 しい リソースを 送 り 返 す 正 しくない 再 度 ステータスコード401を 返 す
Basic 認 証 のAuthorizationヘッダ Basic 認 証 Authorization: Basic bw9yaw1vdg86y29ycmvjdhb3 1 ユーザーIDと パスワードを コロンでつなぐ ユーザーID morimoto パスワード correctpw bw9yaw1vdg86y29ycmvjdhb3 morimoto:correctpw 2 Base64エン コード
Base64 任 意 のデータを 英 数 字 と 一 部 の 記 号 だけで 表 現 24ビットごとに 4 文 字 で 表 現
Base64の 変 換 表 値 文 字 値 文 字 値 文 字 値 文 字 値 文 字 値 文 字 値 文 字 0 A 10 K 20 U 30 e 40 o 50 y 60 8 1 B 11 L 21 V 31 f 41 p 51 z 61 9 2 C 12 M 22 W 32 g 42 q 52 0 62 + 3 D 13 N 23 X 33 h 43 r 53 1 63 / 4 E 14 O 24 Y 34 i 44 s 54 2 5 F 15 P 25 Z 35 j 45 t 55 3 6 G 16 Q 26 a 36 k 46 u 56 4 7 H 17 R 27 b 37 l 47 v 57 5 8 I 18 S 28 c 38 m 48 w 58 6 9 J 19 T 29 d 39 n 49 x 59 7
Base64の 変 換 表 値 文 字 値 文 字 値 文 字 値 文 字 値 文 字 値 文 字 値 文 字 0 A 10 K 20 U 30 e 40 o 50 y 60 8 1 B 11 L 21 V 31 f 41 p 51 z 61 9 2 C 12 M 22 W 32 g 42 q 52 0 62 + 3 D 13 N 23 X 33 h 43 r 53 1 63 / 4 E 5 F 6 G 14 O 15 P 16 Q 24 Y 34 i 44 s 101010 25 Z 35 42(10) j 45 t q 26 a 36 k 46 u 54 2 55 3 56 4 7 H 17 R 27 b 37 l 47 v 57 5 8 I 18 S 28 c 38 m 48 w 58 6 9 J 19 T 29 d 39 n 49 x 59 7
Base64エンコードの 例 3 円 元 データ 3 円 十 六 進 33 e5 86 86
Base64エンコードの 例 3 円 元 データ 3 円 十 六 進 33 e5 86 86 ビット 列 0 0 1 1 0 0 1 1 1 1 1 0 0 1 0 1 1 0 0 0 0 1 1 0 1 0 0 0 0 1 1 0
Base64エンコードの 例 3 円 元 データ 3 円 十 六 進 33 e5 86 86 ビット 列 0 0 1 1 0 0 1 1 1 1 1 0 0 1 0 1 1 0 0 0 0 1 1 0 1 0 0 0 0 1 1 0 値 ( 十 進 ) 12 62 22 6 33 文 字 M + W G h
Base64エンコードの 例 3 円 元 データ 3 円 十 六 進 33 e5 86 86 ビット 列 0 0 1 1 0 0 1 1 1 1 1 0 0 1 0 1 1 0 0 0 0 1 1 0 1 0 0 0 0 1 1 0 0 0 0 0 値 ( 十 進 ) 12 62 22 6 33 32 文 字 M + W G h g M+WGhg
Base64エンコードの 例 3 円 元 データ 3 円 十 六 進 33 e5 86 86 ビット 列 0 0 1 1 0 0 1 1 1 1 1 0 0 1 0 1 1 0 0 0 0 1 1 0 1 0 0 0 0 1 1 0 0 0 0 0 値 ( 十 進 ) 12 62 22 6 33 32 文 字 M + W G h g M+WGhg==
Base64のデコード 元 データ morimoto:correctpw Base64 bw9yaw1vdg86y29ycmvjdhb3 GET /secret HTTP/1.1 Host: www.example.ac.jp Authorization: Basic bw9yaw1vdg86ywjjzdeymzq= morimoto:abcd1234
Digest 認 証 WWW-Authenticate: Digest realm="example.ac.jp secret s pace", nonce="ojfjxk/+baa=fc2e37e32798415505e95d343874 f5dfff3d7381", algorithm=md5, qop="auth" Authorization: Digest username="morimoto", realm="exam ple.ac.jp secret space", nonce="ojfjxk/+baa=fc2e37e327 98415505e95d343874f5dfff3d7381", uri="/secret", algori thm=md5, response="646a2702c6016f371b983fa74a220a02", qop=auth, nc=00000001, cnonce="eda38e65b86135b8"
Digest 認 証 WWW-Authenticate: Digest realm="example.ac.jp secret s pace", nonce="ojfjxk/+baa=fc2e37e32798415505e95d343874 f5dfff3d7381", algorithm=md5, qop="auth" Authorization: Digest username="morimoto", realm="exam ple.ac.jp secret space", nonce="ojfjxk/+baa=fc2e37e327 98415505e95d343874f5dfff3d7381", uri="/secret", algori thm=md5, response="646a2702c6016f371b983fa74a220a02", qop=auth, nc=00000001, cnonce="eda38e65b86135b8"
アクセス 解 析
Webサーバに 記 録 できる 情 報 クライアントのIPアドレス アクセス 日 時 リクエストメッセージに 含 まれる 情 報 HTTPメソッド リソース 名 (URI) その 他 ステータスコード
User-Agentヘッダ Webブラウザの 名 称 やバージョンなどの クライア ントの 情 報 Windows 7(64ビット 版 )で 動 作 するInternet Explorer 11 Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko FreeBSD/amd64で 動 作 するMozilla Firefox 30.0 Mozilla/5.0 (X11; FreeBSD amd64; rv:30.0) Gecko/20100101 Firefox/30.0
Refererヘッダ そのリソースへたどり 着 く 元 となったURI ハイパーリンクをたどった 場 合 リンク 元 のURI HTML 文 書 から 読 み 込 まれるCSSや 画 像 リソース HTML 文 書 のURI 英 語 : Referrer ヘッダ 名 : Referer
Refererヘッダ http://host1/a http://host2/b リンク 元 ハイパーリンク リンク 先 GET /b HTTP/1.1 Host: host2 Referer: http://host1/a
第 6 回 の 内 容 コンテントネゴシエーション キャッシュ 制 御 HTTP 認 証 アクセス 解 析