Apache HTTP サームãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.2
説明: | mod_proxy 㧠AJP
をサãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« |
---|---|
ステータス: | Extension |
モジュールè˜åˆ¥å: | proxy_ajp_module |
ソースファイル: | mod_proxy_ajp.c |
本モジュールã«ã¯ mod_proxy
ãŒå¿…è¦ã§ã™ã€‚
Apache JServ Protocol version 1.3
(ä»¥é™ AJP13)
をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚
AJP13
プãƒãƒˆã‚³ãƒ«ã‚’扱ãˆã‚‹ã‚ˆã†ã«ã™ã‚‹ã«ã¯
mod_proxy
㨠mod_proxy_ajp
をサーãƒã«çµ„ã¿è¾¼ã‚€å¿…è¦ãŒã‚りã¾ã™ã€‚
安全ãªã‚µãƒ¼ãƒã«ã™ã‚‹ã¾ã§ãƒ—ãƒã‚¯ã‚·æ©Ÿèƒ½ã¯æœ‰åйã«ã—ãªã„ã§ãã ã•ã„。 オープンプãƒã‚シサーãƒã¯ã‚ãªãŸè‡ªèº«ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«ã¨ã£ã¦ã‚‚〠インターãƒãƒƒãƒˆå…¨ä½“ã«ã¨ã£ã¦ã‚‚å±é™ºã§ã™ã€‚
ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–ã¯ã‚りã¾ã›ã‚“。
AJP13
プãƒãƒˆã‚³ãƒ«ã¯ãƒ‘ケット指å‘ã§ã™ã€‚
å¯èªãªãƒ—レーンテã‚スト形å¼ã§ã¯ãªããƒã‚¤ãƒŠãƒªå½¢å¼ã«ãªã£ãŸã®ã¯ã€
ãŠãらãパフォーマンス上ã®ç†ç”±ã«ã‚ˆã‚Šã¾ã™ã€‚
ウェブサーãƒã¯ã‚µãƒ¼ãƒ–レットコンテナ㨠TCP コãƒã‚¯ã‚·ãƒ§ãƒ³ã§é€šä¿¡ã—ã¾ã™ã€‚
ソケット生æˆã¯é‡ã„処ç†ãªã®ã§ã€è² è·ã‚’減らã™ãŸã‚ã«ã€ã‚µãƒ¼ãƒ–レットコンテナã¨ã®
TCP æŽ¥ç¶šã‚’ç¶æŒã—ã€è¤‡æ•°ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒ»ãƒ¬ã‚¹ãƒãƒ³ã‚¹å‡¦ç†ã‚µã‚¤ã‚¯ãƒ«ã«å¯¾ã—ã¦ä¸€ã¤ã®
コãƒã‚¯ã‚·ãƒ§ãƒ³ã‚’使ã„ã¾ã‚ã™ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ã€‚
ã‚るリクエストã«ã‚³ãƒã‚¯ã‚·ãƒ§ãƒ³ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã‚‹ã¨ã€ãã®å‡¦ç†ã‚µã‚¤ã‚¯ãƒ«ãŒ 完了ã™ã‚‹ã¾ã§ä»–ã®ã‚‚ã®ã«ä½¿ã‚れるã“ã¨ã¯ã‚りã¾ã›ã‚“。 ã¤ã¾ã‚Šã‚³ãƒã‚¯ã‚·ãƒ§ãƒ³ä¸Šã§ã¯ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®åŒæ™‚処ç†ã¯è¡Œã‚れã¾ã›ã‚“。 ã“ã®ãŸã‚ã€ã‚³ãƒã‚¯ã‚·ãƒ§ãƒ³ä¸¡ç«¯ã§ã®å®Ÿè¡Œã™ã‚‹ã‚³ãƒ¼ãƒ‰ã‚’ç°¡æ½”ã«ã§ãる一方ã§ã€ åŒæ™‚ã«é–‹ãコãƒã‚¯ã‚·ãƒ§ãƒ³ã¯å¤šããªã£ã¦ã„ã¾ã™ã€‚
サーブレットコンテナã¸ã®ã‚³ãƒã‚¯ã‚·ãƒ§ãƒ³ã‚’é–‹ã„ãŸå¾Œã¯ã€ã‚³ãƒã‚¯ã‚·ãƒ§ãƒ³ã®çŠ¶æ…‹ã¯ æ¬¡ã®ã©ã‚Œã‹ã«ãªã‚Šã¾ã™:
コãƒã‚¯ã‚·ãƒ§ãƒ³ãŒç‰¹å®šã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ã‚¢ã‚µã‚¤ãƒ³ã•れるã¨ã€åŸºæœ¬çš„ãªæƒ…å ± (例ãˆã°
HTTP ヘッダç‰) ãŒåœ§ç¸®ã•れãŸå½¢ (例ãˆã°é€šå¸¸ã®æ–‡å—åˆ—ã¯æ•´æ•°ã«ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•れã¾ã™)
ã§è»¢é€ã•れã¾ã™ã€‚詳細ã¯ä¸‹è¨˜ã®ã€Œãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒ‘ã‚±ãƒƒãƒˆã®æ§‹é€ ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
リクエストã«ãƒœãƒ‡ã‚£ãŒå˜åœ¨ (content-length > 0)
ã™ã‚Œã°ã€
åŸºæœ¬çš„ãªæƒ…å ±ã®ç›´å¾Œã«åˆ¥ãƒ‘ケットã§è»¢é€ã•れã¾ã™ã€‚
ã“ã®æ™‚点ã§ãŠãらãã€ã‚µãƒ¼ãƒ–レットコンテナã¯å‡¦ç†ã‚’é–‹å§‹ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ ã§ã™ã®ã§ã€æ¬¡ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ウェブサーãƒã«æˆ»ã—ã¦çŸ¥ã‚‰ã›ã‚‰ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
個々ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ãれãžã‚Œç•°ãªã‚‹ãƒ‡ãƒ¼ã‚¿ãƒ‘ケット形å¼ã«ãªã£ã¦ã„ã¾ã™ã€‚ 後述ã®ã€Œãƒ¬ã‚¹ãƒãƒ³ã‚¹ãƒ‘ã‚±ãƒƒãƒˆã®æ§‹é€ ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
ã“ã®ãƒ—ãƒãƒˆã‚³ãƒ«ã«ã¯ XDR ã‹ã‚‰å—ã‘ç¶™ã„ã 部分ãŒå°‘ã—ã‚りã¾ã™ãŒã€å¤šãã®ç‚¹ã§ ç•°ãªã‚Šã¾ã™ (例ãˆã° 4 ãƒã‚¤ãƒˆã‚¢ãƒ©ã‚¤ãƒ¡ãƒ³ãƒˆã§ãªã„ã“ã¨ãªã©) 。
ãƒã‚¤ãƒˆã‚ªãƒ¼ãƒ€ãƒ¼: 個々ã®ãƒã‚¤ãƒˆã®ã‚¨ãƒ³ãƒ‡ã‚£ã‚¢ãƒ³ãŒã©ã†ãªã£ã¦ã„ã‚‹ã‹ã¯ã€ ç§ã¯è©³ã—ããªã„ã®ã§ã™ãŒã€ãƒªãƒˆãƒ«ã‚¨ãƒ³ãƒ‡ã‚£ã‚¢ãƒ³ã«ãªã£ã¦ã„ã‚‹ã¨æ€ã„ã¾ã™ã€‚ XDR 仕様ã§ãã†ãªã£ã¦ã„ã‚‹ã®ã¨ã€ç´ 晴らã—ã„ã“ã¨ã« sys/socket ライブラリ㌠(C ã§) ãã†ã„ã†é¢¨ã«ã§ãã¦ã„ã‚‹ã®ã§ãã†ãªã®ã ã¨æ€ã„ã¾ã—ãŸã€‚ ソケット呼ã³å‡ºã—ã®å†…部ã«ã¤ã„ã¦ã‚ˆã‚Šè©³ã—ã„æ–¹ãŒã„らã£ã—ゃã„ã¾ã—ãŸã‚‰ã€ ã”æ•™æŽˆãã ã•ã„。
プãƒãƒˆã‚³ãƒ«ã«ã¯ 4 ã¤ã®ãƒ‡ãƒ¼ã‚¿ã‚¿ã‚¤ãƒ—ãŒã‚りã¾ã™: byte, boolean, integer, string ã§ã™ã€‚
1 = true
, 0 = false
ã§ã™ã€‚
(C ã®ã‚ˆã†ã«) éžé›¶ã‚’真ã¨ã—ã¦æ‰±ã£ã¦ã—ã¾ã†ã¨ã€ã‚ã‚‹å ´åˆã¯å‹•ãã‹ã‚‚ã—れã¾ã›ã‚“ã—ã€
å‹•ã‹ãªã„ã‹ã‚‚ã—れã¾ã›ã‚“。0 ã‹ã‚‰ 2^16 (32768)
ã®ç¯„å›²ã®æ•°å—。高次㮠2 ãƒã‚¤ãƒˆãŒ
å…ˆã«æ ¼ç´ã•れã¾ã™ã€‚strlen
ã¨åŒæ§˜ã§ã™ã€‚
ã“れらã®çµ‚端文å—をスã‚ップã™ã‚‹ãŸã‚ã«ã€ã‚ã¾ã‚Šæ„味ã®ç„¡ã„インクリメント文
ã‚’ãŸãã•ん書ã‹ãªã„ã¨ã„ã‘ãªã„ã®ã¯ã€
Java ã®å´ã‹ã‚‰è¦‹ã‚‹ã¨å°‘ã—紛らã‚ã—ãæ„Ÿã˜ã‚‰ã‚Œã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。
ã“ã†ãªã£ãŸç†ç”±ã¯ãŠãらãã€Servlet コンテナã‹ã‚‰è¿”ã•れる文å—列をèªã¿å‡ºã™æ™‚ã«ã€
効率よã C ã®ã‚³ãƒ¼ãƒ‰ã‚’書ã‘るよã†ã«ã™ã‚‹â€•―サーブレットã‹ã‚‰è¿”ã•れる
æ–‡å—列㯠\0 æ–‡å—ã§çµ‚端ã•れã¦ã„ã‚‹ã®ã§ã€C ã®ã‚³ãƒ¼ãƒ‰ã§ã¯ã‚ã–ã‚ã–コピーをã›ãšã«ã€
一ã¤ã®ãƒãƒƒãƒ•ã‚¡ã¸ã®ãƒªãƒ•ァレンスをå–り回ã™ã‚ˆã†ã«æ›¸ãã“ã¨ãŒã§ãる――
ãŸã‚ã ã¨æ€ã‚れã¾ã™ã€‚
'\0' æ–‡å—ãŒãªã„å ´åˆã¯ã€C ã§ã¯æ–‡å—列ã®è¦å‰‡ã«åˆã†ã‚ˆã†ã«ã‚³ãƒ”ーã—ãªã‘れã°
ã„ã‘ãªããªã£ã¦ã—ã¾ã„ã¾ã™ã€‚多ãã®ã‚³ãƒ¼ãƒ‰ã§ãã†ãªã£ã¦ã„ã‚‹ã®ã§ã™ãŒã€ãƒ‘ã‚±ãƒƒãƒˆã‚µã‚¤ã‚ºã®æœ€å¤§ã‚µã‚¤ã‚ºã¯
8 * 1024 (8K)
ã§ã™ã€‚パケットã®å®Ÿéš›ã®é•·ã•ã¯ãƒ˜ãƒƒãƒ€ã«
エンコードã•れã¦å…¥ã£ã¦ã„ã¾ã™ã€‚
サーãƒã‹ã‚‰ã‚³ãƒ³ãƒ†ãƒŠã«é€å‡ºã•れるパケット㯠0x1234
ã§å§‹ã¾ã‚Šã¾ã™ã€‚
コンテナã‹ã‚‰ã‚µãƒ¼ãƒã«é€ã‚‰ã‚Œã‚‹ãƒ‘ケット㯠AB
(ASCII コード A ã¨
ASCII コード B) ã§å§‹ã¾ã‚Šã¾ã™ã€‚ã“ã®äºŒãƒã‚¤ãƒˆã®å¾Œã«ã€ãƒšã‚¤ãƒãƒ¼ãƒ‰é•·ãŒ (上記ã®å½¢å¼ã§)
ç¶šãã¾ã™ã€‚ã“ã®ãŸã‚ã€ãƒšã‚¤ãƒãƒ¼ãƒ‰é•·ã®æœ€å¤§å€¤ã¯ 2^16 ã«ã§ãるよã†ã«æ€ãˆã¾ã™ãŒã€
実際ã«ã¯ã‚³ãƒ¼ãƒ‰ã§ã¯æœ€å¤§å€¤ã¯ 8K ã«è¨å®šã•れã¦ã„ã¾ã™ã€‚
ãƒ‘ã‚±ãƒƒãƒˆå½¢å¼ (Server->Container) | |||||
Byte | 0 | 1 | 2 | 3 | 4...(n+3) |
Contents | 0x12 | 0x34 | データ長 (n) | Data |
ãƒ‘ã‚±ãƒƒãƒˆå½¢å¼ (Container->Server) | |||||
Byte | 0 | 1 | 2 | 3 | 4...(n+3) |
Contents | A | B | データ長 (n) | Data |
ã»ã¨ã‚“ã©ã®ãƒ‘ケットã§ã€ãƒšã‚¤ãƒãƒ¼ãƒ‰ã®æœ€åˆã®ãƒã‚¤ãƒˆãŒãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®åž‹ã‚’エンコード
ã—ã¦ã„ã¾ã™ã€‚例外ã¯ã‚µãƒ¼ãƒã‹ã‚‰ã‚³ãƒ³ãƒ†ãƒŠã«é€ã‚‰ã‚Œã‚‹ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒœãƒ‡ã‚£ãƒ‘ケットã§ã™
――ã“ã‚Œã‚‰ã¯æ¨™æº–çš„ãªãƒ‘ã‚±ãƒƒãƒˆå½¢å¼ (0x1234
ã¨ãƒ‘ケット長)
ã§ã™ãŒã€ãã®å¾Œã«ç¶šãプレフィックスコードãŒã‚りã¾ã›ã‚“。
ウェブサーãƒã¯æ¬¡ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’サーブレットコンテナã«é€å‡ºã§ãã¾ã™ã€‚
コード | パケットã®åž‹ | æ„味 |
2 | Forward Request | リクエスト処ç†ã‚µã‚¤ã‚¯ãƒ«ã‚’後続ã®ãƒ‡ãƒ¼ã‚¿ã¨ã¨ã‚‚ã«é–‹å§‹ã™ã‚‹ã€‚ |
7 | Shutdown | ウェブサーãƒãŒã‚³ãƒ³ãƒ†ãƒŠã«ã€ã‚³ãƒ³ãƒ†ãƒŠã‚’終了ã™ã‚‹ã‚ˆã†ã«ä¼ãˆã‚‹ã€‚ |
8 | Ping | ウェブサーãƒãŒã‚³ãƒ³ãƒ†ãƒŠã«åˆ¶å¾¡ã‚’å—ã‘æŒã¤ã‚ˆã†ã«ä¼ãˆã‚‹ (ã‚»ã‚ュアãƒã‚°ã‚¤ãƒ³ãƒ•ェーズ) 。 |
10 | CPing | ウェブサーãƒãŒã‚³ãƒ³ãƒ†ãƒŠã« CPong ã§å³åº§ã«å¿œç”ã™ã‚‹ã‚ˆã†ã«ä¼ãˆã‚‹ã€‚ |
none | Data | サイズ (2 ãƒã‚¤ãƒˆ) ã¨ãれã«ç¶šãボディデータ。 |
基本的ãªã‚»ã‚ュリティを確ä¿ã™ã‚‹ãŸã‚ã€ãƒ›ã‚¹ãƒˆã•れã¦ã„るマシンã¨åŒä¸€ã®
マシンã‹ã‚‰ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«å¯¾ã—ã¦ã®ã¿ã€ã‚³ãƒ³ãƒ†ãƒŠã¯å®Ÿéš›ã« Shutdown
を実行ã—ã¾ã™ã€‚
最åˆã® Data
パケットã¯ã€Forward Request
ã®ç›´å¾Œã«ã‚¦ã‚§ãƒ–サーãƒã‹ã‚‰é€ã‚‰ã‚Œã¾ã™ã€‚
サーブレットコンテナã¯ã‚¦ã‚§ãƒ–サーãƒã«ã€æ¬¡ã®ã‚¿ã‚¤ãƒ—ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ã‚‹ã“ã¨ãŒ ã§ãã¾ã™ :
コード | パケットã®åž‹ | æ„味 |
3 | Send Body Chunk | サーブレットコンテナã‹ã‚‰ã‚¦ã‚§ãƒ–サーãƒã« (ãã—ã¦ãŠãらããã®ã¾ã¾ãƒ–ラウザã«)ã€ãƒœãƒ‡ã‚£ã®ãƒãƒ£ãƒ³ã‚¯ã‚’é€ã‚‹ã€‚ |
4 | Send Headers | サーブレットコンテナã‹ã‚‰ã‚¦ã‚§ãƒ–サーãƒã« (ãã—ã¦ãŠãらããã®ã¾ã¾ãƒ–ラウザã«) レスãƒãƒ³ã‚¹ãƒ˜ãƒƒãƒ€ã‚’é€ã‚‹ã€‚ |
5 | End Response | レスãƒãƒ³ã‚¹ (ã¤ã¾ã‚Šãƒªã‚¯ã‚¨ã‚¹ãƒˆå‡¦ç†ã‚µã‚¤ã‚¯ãƒ«) 終了ã®ç›®å°ã‚’é€ã‚‹ã€‚ |
6 | Get Body Chunk | ã¾ã å…¨ã¦è»¢é€ã•れã¦ã„ãªã„å ´åˆã€æ®‹ã£ã¦ã„るリクエストã®ãƒ‡ãƒ¼ã‚¿ã‚’å—ã‘å–る。 |
9 | CPong å¿œç” | CPing リクエストã«å¿œç”ã™ã‚‹ã€‚ |
上記メッセージã¯ã€ãれãžã‚Œå†…éƒ¨æ§‹é€ ãŒç•°ãªã£ã¦ã„ã¾ã™ã€‚詳細ã¯ä¸‹è¨˜ã‚’ã”覧ãã ã•ã„。
サーãƒã‹ã‚‰ã‚³ãƒ³ãƒ†ãƒŠã¸é€ã‚‰ã‚Œã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒ Forward Request åž‹ã®å ´åˆ :
AJP13_FORWARD_REQUEST := prefix_code (byte) 0x02 = JK_AJP13_FORWARD_REQUEST method (byte) protocol (string) req_uri (string) remote_addr (string) remote_host (string) server_name (string) server_port (integer) is_ssl (boolean) num_headers (integer) request_headers *(req_header_name req_header_value) attributes *(attribut_name attribute_value) request_terminator (byte) OxFF
request_headers
ã¯æ¬¡ã®ã‚ˆã†ãªæ§‹é€ ã«ãªã£ã¦ã„ã¾ã™ :
req_header_name := sc_req_header_name | (string) [see below for how this is parsed] sc_req_header_name := 0xA0xx (integer) req_header_value := (string)
属性
ã¯ã‚ªãƒ—ションã§ã€æ¬¡ã®ã‚ˆã†ãªæ§‹é€ ã‚’ã—ã¦ã„ã¾ã™ :
attribute_name := sc_a_name | (sc_a_req_attribute string) attribute_value := (string)
ã‚‚ã£ã¨ã‚‚é‡è¦ãªãƒ˜ãƒƒãƒ€ã¯ content-length
ã ã¨ã„ã†ã“ã¨ã«
注æ„ã—ã¦ãã ã•ã„ã€‚ã‚³ãƒ³ãƒ†ãƒŠã¯æ¬¡ã®ãƒ‘ケットを探ã™ã‹ã©ã†ã‹ã‚’ã€
ãã‚Œã‚’è¦‹ã¦æ±ºã‚ã‚‹ã‹ã‚‰ã§ã™ã€‚
リクエストã«ã¤ã„ã¦ã¯å…¨ã¦ã€ã“ã®å€¤ã¯ 2 ã«ãªã‚Šã¾ã™ã€‚ä»–ã® Prefix コードã®è©³ç´°ã¯ 上記をã”覧ãã ã•ã„。
HTTP メソッド㯠1 ãƒã‚¤ãƒˆã«ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•れã¾ã™ :
Command Name | Code |
OPTIONS | 1 |
GET | 2 |
HEAD | 3 |
POST | 4 |
PUT | 5 |
DELETE | 6 |
TRACE | 7 |
PROPFIND | 8 |
PROPPATCH | 9 |
MKCOL | 10 |
COPY | 11 |
MOVE | 12 |
LOCK | 13 |
UNLOCK | 14 |
ACL | 15 |
REPORT | 16 |
VERSION-CONTROL | 17 |
CHECKIN | 18 |
CHECKOUT | 19 |
UNCHECKOUT | 20 |
SEARCH | 21 |
MKWORKSPACE | 22 |
UPDATE | 23 |
LABEL | 24 |
MERGE | 25 |
BASELINE_CONTROL | 26 |
MKACTIVITY | 27 |
今後㮠ajp13 ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€ã“ã®ä¸€è¦§ã«ãªã„ã€ä»Šå¾Œè¿½åŠ ã•れるメソッドを é€ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。
ã“れらã¯ã¾ã•ã«æ–‡å—通りã®ã‚‚ã®ã§ã™ã€‚ã©ã‚Œã‚‚å¿…è¦ã§ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®æ¯Žå›žã«ã¤ã é€ã‚‰ã‚Œã¾ã™ã€‚
request_headers
ã®æ§‹é€ ã¯æ¬¡ã®ã‚ˆã†ãªã‚‚ã®ã§ã™ :
ã¾ãšãƒ˜ãƒƒãƒ€ã®æ•° num_headers
ãŒã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•れã¾ã™ã€‚
次ã«ãƒ˜ãƒƒãƒ€å req_header_name
/ 値 req_header_value
ã®çµ„ãŒç¶šãã¾ã™ã€‚効率ã®ãŸã‚ã€ä¸€èˆ¬çš„ãªãƒ˜ãƒƒãƒ€ã¯æ•´æ•°ã§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã—ã¦è»¢é€ã—ã¾ã™ã€‚
ヘッダåãŒåŸºæœ¬ãƒ˜ãƒƒãƒ€ã®ä¸€è¦§ã«ç„¡ã„å ´åˆã¯ã€é€šå¸¸é€šã‚Š (æ–‡å—列ã¨ã—ã¦ã€é•·ã•
プレフィックス付ãã§) 転é€ã•れã¾ã™ã€‚一般的ãªãƒ˜ãƒƒãƒ€
sc_req_header_name
ã®ä¸€è¦§ã¨ãã®ã‚³ãƒ¼ãƒ‰ã¯æ¬¡ã®é€šã‚Šã§ã™
(ã©ã‚Œã‚‚大文å—å°æ–‡å—を区別ã—ã¾ã™) :
åå‰ | コードã®å€¤ | コードå |
accept | 0xA001 | SC_REQ_ACCEPT |
accept-charset | 0xA002 | SC_REQ_ACCEPT_CHARSET |
accept-encoding | 0xA003 | SC_REQ_ACCEPT_ENCODING |
accept-language | 0xA004 | SC_REQ_ACCEPT_LANGUAGE |
authorization | 0xA005 | SC_REQ_AUTHORIZATION |
connection | 0xA006 | SC_REQ_CONNECTION |
content-type | 0xA007 | SC_REQ_CONTENT_TYPE |
content-length | 0xA008 | SC_REQ_CONTENT_LENGTH |
cookie | 0xA009 | SC_REQ_COOKIE |
cookie2 | 0xA00A | SC_REQ_COOKIE2 |
host | 0xA00B | SC_REQ_HOST |
pragma | 0xA00C | SC_REQ_PRAGMA |
referer | 0xA00D | SC_REQ_REFERER |
user-agent | 0xA00E | SC_REQ_USER_AGENT |
ã“れをèªã¿è¾¼ã‚€ Java ã®ã‚³ãƒ¼ãƒ‰ã§ã¯ã€æœ€åˆã® 2 ãƒã‚¤ãƒˆæ•´æ•°ã‚’å–り込ã¿ã€
ç›®å°ã«ãªã‚‹ãƒã‚¤ãƒˆ '0xA0'
ã§ã‚れã°ã€ãƒ˜ãƒƒãƒ€åã®é…列ã®
インデックスを使ã„ã¾ã™ã€‚å…ˆé ãƒã‚¤ãƒˆãŒ 0xA0
ã§ãªã„å ´åˆã¯ã€
å…ˆé 2 ãƒã‚¤ãƒˆã¯æ–‡å—åˆ—é•·ã‚’è¡¨ã™æ•´æ•°ã§ã‚ã‚‹ã¨è§£é‡ˆã—ã€èªã¿è¾¼ã¿ã¯ã˜ã‚ã¾ã™ã€‚
ヘッダåã®é•·ã•㯠0x9999 (==0xA000 -1)
以上ã«ãªã‚‰ãªã„ã¨ã„ã†
仮定ã®ä¸‹ã«å‹•ã„ã¦ã„ã¦ã€å°‘ã—ã‚ã„ã¾ã„ã§ã™ãŒåˆç†çš„ãªæŒ™å‹•ã«ãªã£ã¦ã„ã¾ã™ã€‚
content-length
ヘッダã¯ã¨ã¦ã‚‚é‡è¦ã§ã™ã€‚
å˜åœ¨ã—ã¦ã„ã¦éžã‚¼ãƒã§ã‚れã°ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ã¯ãƒœãƒ‡ã‚£ãŒã‚ã‚‹ (例ãˆã° POST
リクエスト) ã¨æŽ¨æ¸¬ã—ã€ãã®ãƒœãƒ‡ã‚£ã‚’å–り込むãŸã‚ã«
直後ã®ãƒ‘ケットを入力ストリームã‹ã‚‰èªã¿è¾¼ã¿ã¯ã˜ã‚ã¾ã™ã€‚
?
プレフィックスã§å§‹ã¾ã‚‹å±žæ€§ (例 ?context
)
ã¯ã€‚çœç•¥å¯èƒ½ã§ã™ã€‚ãれãžã‚Œå±žæ€§ã®åž‹ã‚’示㙠1 ãƒã‚¤ãƒˆã®ã‚³ãƒ¼ãƒ‰ã¨ã€
å€¤ã®æ–‡å—列ãŒç¶šãã¾ã™ã€‚
ã“れらã¯é †ä¸åŒã§é€ã‚‹ã“ã¨ãŒã§ãã¾ã™ (C ã®ã‚³ãƒ¼ãƒ‰ã¯å¸¸ã«ä¸‹ã®ä¸€è¦§é †ã«
é€ã‚‹ã‚ˆã†ã§ã™ãŒ) 。
オプションã®å±žæ€§ã®ãƒªã‚¹ãƒˆã®æœ€å¾Œã«ã¯ã€ç‰¹åˆ¥ãªçµ‚了コードãŒé€ã‚‰ã‚Œã¾ã™ã€‚
コードã®ä¸€è¦§ã¯ :
Information | Code Value | Note |
?context | 0x01 | 未実装 |
?servlet_path | 0x02 | 未実装 |
?remote_user | 0x03 | |
?auth_type | 0x04 | |
?query_string | 0x05 | |
?jvm_route | 0x06 | |
?ssl_cert | 0x07 | |
?ssl_cipher | 0x08 | |
?ssl_session | 0x09 | |
?req_attribute | 0x0A | Name (the name of the attribute follows) |
?ssl_key_size | 0x0B | |
are_done | 0xFF | request_terminator |
context
㨠servlet_path
ã¯ç¾åœ¨ã® C ã®
コードã§ã¯ã‚»ãƒƒãƒˆã•れã¦ã„ã¾ã›ã‚“。ã¾ãŸã€ã»ã¨ã‚“ã©ã® Java ã®ã‚³ãƒ¼ãƒ‰ã§ã‚‚ã€
ã“ã®ãƒ•ィールドã§ä½•ãŒé€ã‚‰ã‚Œã¦ã‚‚無視ã•れã¾ã™ (ã“れらã®ã‚³ãƒ¼ãƒ‰ã®å¾Œã«æ–‡å—列ãŒ
é€ã‚‰ã‚Œã‚‹ã¨å£Šã‚Œã‚‹ã‚‚ã®ã‚‚ã‚りã¾ã™)。
ã“れãŒãƒã‚°ãªã®ã‹ã€å˜ã«æœªå®Ÿè£…ãªã®ã‹ã€æ´å²çš„çµŒç·¯ã§æ®‹ã£ã¦ã„るコードãªã®ã‹
分ã‹ã‚Šã¾ã›ã‚“ãŒã€ã‚³ãƒã‚¯ã‚·ãƒ§ãƒ³ã®ä¸¡å´ã¨ã‚‚ã§è¦‹å½“ãŸã‚Šã¾ã›ã‚“。
remote_user
㨠auth_type
ã¯ãŠãらã
HTTP レベルã®èªè¨¼ã‚’å‚ç…§ã—ã¦ã„ã¦ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ¦ãƒ¼ã‚¶ã®ãƒ¦ãƒ¼ã‚¶åã¨èªè¨¼ã«ä½¿ç”¨ã—ãŸ
タイプ (例 Basic, Digest) ã«ã¤ã„ã¦ã‚„りå–りã—ã¾ã™ã€‚
query_string
, ssl_cert
,
ssl_cipher
, ssl_session
㯠HTTP 㨠HTTPS ã®å¯¾å¿œã™ã‚‹éƒ¨åˆ†ã‚’å‚ç…§ã—ã¾ã™ã€‚
jvm_route
ã¯ã‚¹ãƒ†ã‚£ãƒƒã‚ーセッションã®ã‚µãƒãƒ¼ãƒˆâ€•―
ãƒãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚¹ã—ã¦ã„る複数ã®ã‚µãƒ¼ãƒä¸ã®ç‰¹å®šã® Tomcat インスタンスã¨ã€
ユーザã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã¨ã‚’ç´ä»˜ã‘る機能――ã«ä½¿ã‚れã¾ã™ã€‚
ã“ã®åŸºæœ¬å±žæ€§ä¸€è¦§ã«ç„¡ã„ã‚‚ã®ã«ã¤ã„ã¦ã¯ã€req_attribute
コード 0x0A
経由ã§å±žæ€§ã‚’何個ã§ã‚‚é€ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
属性ã®åå‰ã¨å€¤ã®æ–‡å—列ã®çµ„ã‚’ã€ãれãžã‚Œã“ã®ã‚³ãƒ¼ãƒ‰ã®ç›´å¾Œã«é€ã‚Šã¾ã™ã€‚
環境変数ã¯ã“ã®æ–¹æ³•ã§ä¼ãˆã‚‰ã‚Œã¾ã™ã€‚
最後ã«å±žæ€§ãŒå…¨ã¦é€ä¿¡ã•れãŸå¾Œã«ã€å±žæ€§ã®çµ‚端を示㙠0xFF
ãŒé€å‡ºã•れã¾ã™ã€‚ã“ã®ä¿¡å·ã¯å±žæ€§ã®ä¸€è¦§ã®çµ‚ã‚りを示ã™ã¨åŒæ™‚ã«ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆ
パケットã®çµ‚端をも示ã—ã¦ã„ã¾ã™ã€‚
コンテナãŒã‚µãƒ¼ãƒã«é€ã‚Šè¿”ã™ã“ã¨ã®ã§ãるメッセージ:
AJP13_SEND_BODY_CHUNK := prefix_code 3 chunk_length (integer) chunk *(byte) AJP13_SEND_HEADERS := prefix_code 4 http_status_code (integer) http_status_msg (string) num_headers (integer) response_headers *(res_header_name header_value) res_header_name := sc_res_header_name | (string) [see below for how this is parsed] sc_res_header_name := 0xA0 (byte) header_value := (string) AJP13_END_RESPONSE := prefix_code 5 reuse (boolean) AJP13_GET_BODY_CHUNK := prefix_code 6 requested_length (integer)
ãƒãƒ£ãƒ³ã‚¯ã¯åŸºæœ¬çš„ã«ã¯ãƒã‚¤ãƒŠãƒªãƒ‡ãƒ¼ã‚¿ã§ã€ãƒ–ラウザã«ç›´æŽ¥é€ã‚‰ã‚Œã¾ã™ã€‚
ステータスコードã¨ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒé€šå¸¸ã® HTTP ã®é€šä¿¡ã«ã¯ã‚りã¾ã™ (例
200
㨠OK
)。レスãƒãƒ³ã‚¹ãƒ˜ãƒƒãƒ€åã¯ã€
リクエストヘッダåã¨åŒæ§˜ã®æ–¹æ³•ã§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•れã¾ã™ã€‚
ã‚³ãƒ¼ãƒ‰ã¨æ–‡å—列ã®åˆ¤åˆ¥æ–¹æ³•ã®è©³ç´°ã«é–¢ã—ã¦ã¯ã€ä¸Šè¨˜ã® header_encoding
ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
一般的ãªãƒ˜ãƒƒãƒ€ã®ã‚³ãƒ¼ãƒ‰ã¯ :
åå‰ | コードã®å€¤ |
Content-Type | 0xA001 |
Content-Language | 0xA002 |
Content-Length | 0xA003 |
Date | 0xA004 |
Last-Modified | 0xA005 |
Location | 0xA006 |
Set-Cookie | 0xA007 |
Set-Cookie2 | 0xA008 |
Servlet-Engine | 0xA009 |
Status | 0xA00A |
WWW-Authenticate | 0xA00B |
コードã‹ãƒ˜ãƒƒãƒ€æ–‡å—列ã®ç›´å¾Œã«ã¯ã€ãƒ˜ãƒƒãƒ€ã®å€¤ãŒã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•れã¾ã™ã€‚
リクエスト処ç†ã‚µã‚¤ã‚¯ãƒ«ã®çµ‚了を知らã›ã¾ã™ã€‚reuse
フラグãŒçœŸ
(==1)
ã®å ´åˆã€ç¾åœ¨ä½¿ç”¨ã—ã¦ã„ã‚‹ TCP コãƒã‚¯ã‚·ãƒ§ãƒ³ã¯æ¬¡ã®æ–°ã—ã„
リクエストã«ä½¿ãˆã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚reuse
ãŒå½ (C ã®ã‚³ãƒ¼ãƒ‰ã§ã¯
1 以外ã®å…¨ã¦) ã®å ´åˆã¯ã€ã‚³ãƒã‚¯ã‚·ãƒ§ãƒ³ã‚’é–‰ã˜ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚
(ボディã®ã‚µã‚¤ã‚ºãŒå¤§ãã™ãŽã¦æœ€åˆã®ãƒ‘ケットã«åŽã¾ã‚‰ãªã„å ´åˆã‚„ã€
リクエストãŒãƒãƒ£ãƒ³ã‚¯è»¢é€ã•れãŸå ´åˆãªã©ã«ã¯ã€) コンテナã¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‹ã‚‰ã®
データèªã¿è¾¼ã¿è¦æ±‚ã‚’ã—ã¾ã™ã€‚サーãƒå´ã¯ãれã«å¯¾ã—ã¦ã€æœ€å°
request_length
最大 (8186 (8 Kbytes - 6))
ã®ç¯„囲ã§ã€æœªè»¢é€ã§æ®‹ã£ã¦ã„るリクエストボディã®å¤§ãã•ã®ãƒ‡ãƒ¼ã‚¿ã‚’
é€ã‚Šè¿”ã—ã¾ã™ã€‚
ボディã«ãã‚Œä»¥ä¸Šãƒ‡ãƒ¼ã‚¿ãŒæ®‹ã£ã¦ã„ãªã„å ´åˆ (ã¤ã¾ã‚Šã‚µãƒ¼ãƒ–レットãŒ
ãƒœãƒ‡ã‚£ã®æœ€å¾Œã‚’è¶…ãˆã¦èªã¿è¾¼ã‚‚ã†ã¨ã—ãŸå ´åˆ) ã€ã‚µãƒ¼ãƒã¯
ペイãƒãƒ¼ãƒ‰é•· 0 ã®ç©ºãƒ‘ケット(0x12,0x34,0x00,0x00)
ã‚’é€ã‚Šè¿”ã—ã¾ã™ã€‚