• 検索結果がありません。

コンテントネゴシエーション

N/A
N/A
Protected

Academic year: 2021

シェア "コンテントネゴシエーション"

Copied!
76
0
0

読み込み中.... (全文を見る)

全文

(1)

第6回の内容

• コンテントネゴシエーション

• キャッシュ制御

• HTTP認証

(2)
(3)

リソースの表現

リソース

PDF

英語

HTML文書

日本語

プレーンテキスト

英語

PNG画像

日本語

⋯ バリアント

(4)

コンテントネゴシエーション

• HTTPリクエストメッセージのヘッダで、

希望する表現をサーバに通知

• 複数の候補を優先度付きで指定可

(5)

関連するヘッダフィールド

ヘッダ

説明

Accept

希望するメディアタイプを伝える

Accept-Language 希望する(自然)言語を伝える

(6)

優先度

q=

X

X

は0から1の数字 (小数点以下最大3桁)

• 既定値は1

(7)

Acceptヘッダ

• 希望するメディアタイプを伝える

タイプ

/サブタイプ

書式

意味

タイプ

/* あるタイプすべて

例:

image/* ⋯ 画像のタイプすべて

*/*

すべてのメディアタイプ

(8)

Acceptヘッダ

• 希望するメディアタイプを伝える

Accept: text/html,application/xhtml+xml,

application/xml;q=0.9,*/*;q=0.8

(9)

Acceptヘッダ

• 希望するメディアタイプを伝える

Accept: text/html,application/xhtml+xml,

application/xml;q=0.9,*/*;q=0.8

メディアタイプ

優先度

text/html

1 (既定値)

(10)

Acceptヘッダ

• 希望するメディアタイプを伝える

Accept: text/html,application/xhtml+xml,

application/xml;q=0.9,*/*;q=0.8

メディアタイプ

優先度

text/html

1 (既定値)

application/xhtml+xml 1 (既定値)

(11)

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

(12)

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

(13)

Acceptヘッダ

• 希望するメディアタイプを伝える

• HTML文書(text/html)かXHTML文書(application/

xhtml+xml)をもっとも希望する。(優先度1)

• 次にXML文書(application/xml)を希望する。(優先度0.9)

• それ以外(*/*)でもよい。(優先度0.8)

Accept: text/html,application/xhtml+xml,

application/xml;q=0.9,*/*;q=0.8

(14)

Accept-Languageヘッダ

• 希望する言語を伝える

言語タグ 意味

ja

日本語

ja-JP

日本で話される日本語

en

英語

en-US

アメリカ英語

en-CA

カナダ英語

fr-CA

カナダで話されるフランス語

書式:

X

または

X

-

Y

X

⋯ 言語

Y

⋯ 国や地域

言語タグ

(15)

Accept-Languageヘッダ

• 希望する言語を伝える

Accept-Language: ja,en-us;q=0.7,en;q=0.3

• 日本語(ja)をもっとも希望する。(優先度1)

• 次にアメリカ英語(en-us)を希望する。(優先度0.7)

• 次に国や地域を指定せずに英語(en)を希望する。(優先度0.3)

(16)

コンテントネゴシエーションの例 (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

(17)

コンテントネゴシエーションの例 (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>

(18)

コンテントネゴシエーションの例 (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

こんにちは

(19)
(20)

Accept-Languageヘッダ

(21)
(22)

Accept-Languageヘッダ

Accept-Language:

ja

,

en-us

;q=0.7,

en

;q=0.3

(23)

コンテントネゴシエーションの実例

(24)

ステータスコード

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

(25)

ステータスコード

406

リクエスト

レスポンス

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>

GET /manual HTTP/1.1

(26)

ステータスコード

406

リクエスト

レスポンス

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>

GET /manual HTTP/1.1

(27)

ステータスコード

406

リクエスト

レスポンス

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>

GET /manual HTTP/1.1

(28)

ステータスコード

406

リクエスト

レスポンス

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>

GET /manual HTTP/1.1

(29)
(30)

キャッシュ

• 一度取得したリソースを保存し、後で再利用

1. Webブラウザが管理する記憶場所

(31)

キャッシュの保存と利用

Webブラウザ

Webサーバ

プロクシサーバ

リソースA

リクエストを

発行

レスポンスを

返却

キャッシュに

保存

キャッシュに

保存

(32)

キャッシュの保存と利用

Webブラウザ

Webブラウザ

Webサーバ

プロクシサーバ

リソースA

Webブラウザの

キャッシュを利用

プロクシサーバの

キャッシュを利用

(33)

サーバが返す情報

• キャッシュしてもよいか。

• リソースの有効期間。

• リソースの最終更新日時。

• リソースの特定のバージョンを表す、

エンティティタグ

と呼ばれる文字列。

(34)

条件付きGET

• リソースがある日時以降に更新されていれば、

そのリソースを送り返す。

更新されていなければ、ステータスコード

304

(

Not Modified)を返す。

• リソースがあるエンティティタグを持っていな

ければ、そのリソースを送り返す。

エンティティタグが同じであれば、ステータス

コード

304

を返す。

(35)

Cache-Controlヘッダ

Cache-Control: no-store

フィールド値 意味

(36)

Cache-Controlヘッダ

Cache-Control: no-store

Cache-Control: no-cache

フィールド値 意味

no-store

キャッシュしてはいけない

no-cache

キャッシュしてもよいが、再利用するため

には、有効性の確認が必要

(37)

Cache-Controlヘッダ

Cache-Control: no-store

Cache-Control: no-cache

Cache-Control: max-age=86400

フィールド値 意味

no-store

キャッシュしてはいけない

no-cache

キャッシュしてもよいが、再利用するため

には、有効性の確認が必要

max-age=

x

キャッシュが有効である期間(秒)

(38)

Last-Modifiedヘッダ

(39)

Etagヘッダ

(40)

条件付きGET

• 最終更新日時を条件にする場合

If-Modified-Since

ヘッダ

• エンティティタグを条件にする場合

If-None-Match

ヘッダ

(41)

条件付き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"

(42)

GET /doc HTTP/1.1

If-Modified-Since: Sat, 05 Oct 2013 06:00:00 GMT

条件付き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-None-Match: "abcde"

レスポンス

HTTP/1.1

304

Not Modified

Etag: "abcde"

(43)

条件付きGET

リクエスト

レスポンス

HTTP/1.1 200 OK

Last-Modified: Mon, 07 Oct 2013 10:16:10 GMT

Etag: "vwxyz"

Content-Type: text/html

GET /doc HTTP/1.1

If-Modified-Since: Sat, 05 Oct 2013 06:00:00 GMT

If-None-Match: "abcde"

(44)
(45)
(46)
(47)

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>

(以下略)

(48)
(49)
(50)

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>

(以下略)

(51)
(52)
(53)

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>

(以下略)

(54)
(55)

Basic認証

① クライアント 認証が必要なリソースへ、認証情報を含めずに

アクセス。

(56)

Basic認証

① クライアント 認証が必要なリソースへ、認証情報を含めずに

アクセス。

② サーバ

ステータスコード

401を返す。

認証に関する情報は

WWW-Authenticateヘッダ

フィールドで指定。

(57)

Basic認証

① クライアント 認証が必要なリソースへ、認証情報を含めずに

アクセス。

② サーバ

ステータスコード

401を返す。

認証に関する情報は

WWW-Authenticateヘッダ

フィールドで指定。

③ クライアント 認証を受けるために必要な情報を

Authorizationヘッダフィールドに含め、

再度リクエスト。

(58)

Basic認証

① クライアント 認証が必要なリソースへ、認証情報を含めずに

アクセス。

② サーバ

ステータスコード

401を返す。

認証に関する情報は

WWW-Authenticateヘッダ

フィールドで指定。

③ クライアント 認証を受けるために必要な情報を

Authorizationヘッダフィールドに含め、

再度リクエスト。

④ サーバ

正しい

⋯ リソースを送り返す

正しくない

⋯ 再度ステータスコード401を返す

(59)

Basic認証の

Authorizationヘッダ

ユーザーID

morimoto

パスワード

correctpw

morimoto:correctpw

bW9yaW1vdG86Y29ycmVjdHB3

Authorization: Basic bW9yaW1vdG86Y29ycmVjdHB3

Basic認証

① ユーザーIDと

パスワードを

コロンでつなぐ

② Base64エン

(60)

Base64

• 任意のデータを、英数字と一部の記号だけで表現

• 24ビットごとに、4文字で表現

(61)

Base64の変換表

文字

0 A

1 B

2 C

3 D

4 E

5 F

6 G

7 H

8 I

9 J

文字

10 K

11 L

12 M

13 N

14 O

15 P

16 Q

17 R

18 S

19 T

文字

20 U

21 V

22 W

23 X

24 Y

25 Z

26 a

27 b

28 c

29 d

文字

30 e

31 f

32 g

33 h

34 i

35 j

36 k

37 l

38 m

39 n

文字

40 o

41 p

42 q

43 r

44 s

45 t

46 u

47 v

48 w

49 x

文字

50 y

51 z

52 0

53 1

54 2

55 3

56 4

57 5

58 6

59 7

文字

60 8

61 9

62 +

63 /

(62)

Base64の変換表

文字

0 A

1 B

2 C

3 D

4 E

5 F

6 G

7 H

8 I

9 J

文字

10 K

11 L

12 M

13 N

14 O

15 P

16 Q

17 R

18 S

19 T

文字

20 U

21 V

22 W

23 X

24 Y

25 Z

26 a

27 b

28 c

29 d

文字

30 e

31 f

32 g

33 h

34 i

35 j

36 k

37 l

38 m

39 n

文字

40 o

41 p

42 q

43 r

44 s

45 t

46 u

47 v

48 w

49 x

文字

50 y

51 z

52 0

53 1

54 2

55 3

56 4

57 5

58 6

59 7

文字

60 8

61 9

62 +

63 /

101010

42

(10)

q

(63)

Base64エンコードの例

元データ

3

十六進

33

e5

86

86

(64)

Base64エンコードの例

元データ

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

(65)

Base64エンコードの例

元データ

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

3円

(66)

Base64エンコードの例

元データ

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

3円

M+WGhg

(67)

Base64エンコードの例

元データ

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==

3円

(68)

Base64のデコード

morimoto:correctpw

bW9yaW1vdG86Y29ycmVjdHB3

元データ

Base64

GET /secret HTTP/1.1

Host: www.example.ac.jp

Authorization: Basic bW9yaW1vdG86YWJjZDEyMzQ=

(69)

Digest認証

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"

WWW-Authenticate: Digest realm="example.ac.jp secret s

pace", nonce="oJfJxK/+BAA=fc2e37e32798415505e95d343874

f5dfff3d7381", algorithm=MD5, qop="auth"

(70)

Digest認証

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"

WWW-Authenticate: Digest realm="example.ac.jp secret s

pace", nonce="oJfJxK/+BAA=fc2e37e32798415505e95d343874

f5dfff3d7381", algorithm=MD5, qop="auth"

(71)
(72)

Webサーバに記録できる情報

• クライアントのIPアドレス

• アクセス日時

• リクエストメッセージに含まれる情報

 HTTPメソッド

 リソース名 (URI)

 その他

• ステータスコード

(73)

User-Agentヘッダ

• Webブラウザの名称やバージョンなどの、クライア

ントの情報

Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko

Mozilla/5.0 (X11; FreeBSD amd64; rv:30.0) Gecko/20100101 Firefox/30.0

Windows 7(64ビット版)で動作するInternet Explorer 11

(74)

Refererヘッダ

• そのリソースへたどり着く元となったURI

• ハイパーリンクをたどった場合

⋯ リンク元のURI

• HTML文書から読み込まれるCSSや画像リソース

⋯ HTML文書のURI

英語:

Refe

rr

er

ヘッダ名: Refe

r

er

(75)

Refererヘッダ

ハイパーリンク

GET /b HTTP/1.1

Host: host2

Referer: http://host1/a

http://host1/a

http://host2/b

リンク元

リンク先

(76)

第6回の内容

• コンテントネゴシエーション

• キャッシュ制御

• HTTP認証

参照

関連したドキュメント

016-522 【原因】 LDAP サーバーの SSL 認証エラーです。SSL クライアント証明書が取得で きません。. 【処置】 LDAP サーバーから

RCEP 原産国は原産地証明上の必要的記載事項となっています( ※ ) 。第三者証明 制度(原産地証明書)

何日受付第何号の登記識別情報に関する証明の請求については,請求人は,請求人

FSIS が実施する HACCP の検証には、基本的検証と HACCP 運用に関する検証から構 成されている。基本的検証では、危害分析などの

すべての Web ページで HTTPS でのアクセスを提供することが必要である。サーバー証 明書を使った HTTPS

出典: Oil Economist Handbook “Energy Balances of OECD countries” “Energy Balances of

税関に対して、原産地証明書又は 原産品申告書等 ※1 及び(必要に応じ) 運送要件証明書 ※2 を提出するなど、.

太陽光発電設備 ○○社製△△ 品番:×× 太陽光モジュール定格出力