httpd.confのブラウザマッチ処理<br />石田 精一郎<br />Twitter: @sechiro<br />
(自己紹介は割愛)<br />
本題<br />
お題 212-223:ブラウザマッチ処理<br />BrowserMatchは SetEnvIfディレクティブの 特例で、User-Agent HTTP リクエストヘッダに基づいて 環境変数を設定します。(コピペ)<br />微妙なブラウザに対...
コメント付きで、お題の内容を確認<br />大きく二つに分かれてます<br /># The following directives modify normal HTTP response behavior to# handle known p...
 # The following directives modify normal HTTP response behavior to handle known problems with browser implementations.Bro...
ドキュメントを確認<br />force-response-1.0<br />これが設定されていると、HTTP/1.0 リクエストを発行するクライアントに対しては 常に HTTP/1.0 で応答するようになります。この機能は、 元々は AOL ...
下の方は一部のWebDAVクライアント対応<br />  # The following directive disables redirects on non-GET requests for a directory that does no...
“The Trailing Slash” って?<br />こんな感じにURLでディレクトリを指定するときに付ける、<br />最後のスラッシュのことです。<br />
普通のブラウザはどう反応するかというと、<br />最後のスラッシュなしでアクセスすると、<br />いつの間にかスラッシュありのアドレスに移動します。<br />
どうしてこうなる?<br />① 最後のスラッシュなしのURLを指定すると、<br />② こういうお返事が返ってきて、<br /><title>301 Moved Permanently</title><br /></head><body><...
WebDAVのクライアントの場合―普通の例<br />Windows Vista/7の標準機能を使った場合<br />Apacheのアクセスログを見ると、<br />“PROPFIND /davHTTP/1.1" 301 324 "-" <br...
WebDAVのクライアントの場合―悪い例<br />お題の中に出てくる「WebDrive」で実験<br />設定をコメントアウトしてApacheを再起動<br /># BrowserMatch “^WebDrive” redirect-care...
デフォルト設定のままだと<br />デフォルト設定に戻して接続すると、<br />Trailing Slashなしでも、 Trailing Slashありと同じレスポンスが返されます。<br />"OPTIONS /dav HTTP/1.1" ...
後半のブラウザマッチが意味するもの<br />「redirect-carefully」はGET以外のメソッドに対して、リダイレクトで正しいアドレスに誘導するのではなく、サーバ側で空気を読んでお返事してあげるオプションです。<br />ちなみにソ...
ここまでです。<br />
Upcoming SlideShare
Loading in …5
×

第1回Webサーバ勉強会 - 212-223 ブラウザマッチ処理

2,479 views

Published on

第1回Webサーバ勉強会
http://atnd.org/events/9124
で担当した部分のスライドです。

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,479
On SlideShare
0
From Embeds
0
Number of Embeds
101
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

第1回Webサーバ勉強会 - 212-223 ブラウザマッチ処理

  1. 1. httpd.confのブラウザマッチ処理<br />石田 精一郎<br />Twitter: @sechiro<br />
  2. 2. (自己紹介は割愛)<br />
  3. 3. 本題<br />
  4. 4. お題 212-223:ブラウザマッチ処理<br />BrowserMatchは SetEnvIfディレクティブの 特例で、User-Agent HTTP リクエストヘッダに基づいて 環境変数を設定します。(コピペ)<br />微妙なブラウザに対応するためのサーバ側の対応が書いてあります。<br />設定されているUser-Agentからのアクセスされた場合、対応する環境変数を設定します。<br />
  5. 5. コメント付きで、お題の内容を確認<br />大きく二つに分かれてます<br /># The following directives modify normal HTTP response behavior to# handle known problems with browser implementations.#BrowserMatch "Mozilla/2" nokeepaliveBrowserMatch "MSIE 4.0b2;" nokeepalive downgrade-1.0 force-response-1.0BrowserMatch "RealPlayer 4.0" force-response-1.0BrowserMatch "Java/1.0" force-response-1.0BrowserMatch "JDK/1.0" force-response-1.0## The following directive disables redirects on non-GET requests for# a directory that does not include the trailing slash.  This fixes a# problem with Microsoft WebFolders which does not appropriately handle# redirects for folders with DAV methods.# Same deal with Apple's DAV filesystem and Gnome VFS support for DAV.#BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefullyBrowserMatch "MS FrontPage" redirect-carefullyBrowserMatch "^WebDrive" redirect-carefullyBrowserMatch "^WebDAVFS/1.[0123]" redirect-carefullyBrowserMatch "^gnome-vfs/1.0" redirect-carefullyBrowserMatch "^XML Spy" redirect-carefullyBrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully<br />
  6. 6.  # The following directives modify normal HTTP response behavior to handle known problems with browser implementations.BrowserMatch "Mozilla/2" nokeepaliveBrowserMatch "MSIE 4.0b2;" nokeepalive downgrade-1.0 force-response-1.0BrowserMatch "RealPlayer 4.0" force-response-1.0BrowserMatch "Java/1.0" force-response-1.0BrowserMatch "JDK/1.0" force-response-1.0<br /> ⇒一部の変なHTTP実装をしてるブラウザ対応です。<br />まずは上の方<br />
  7. 7. ドキュメントを確認<br />force-response-1.0<br />これが設定されていると、HTTP/1.0 リクエストを発行するクライアントに対しては 常に HTTP/1.0 で応答するようになります。この機能は、 元々は AOL のプロキシの問題のために実装されました。HTTP/1.0 クライアントの中には、 HTTP/1.1 の応答を返されると正しく動作しないものがあるかもしれません。 この機能を使用することで、そのようなクライアントとの間の互換性問題を解決できます。<br />  ・・・<br />おかしな挙動をするクライアントに対してプロトコルの動作を変更する<br />クライアントに関する既知の問題に対処するために、以下の行を httpd.confに入れることを推奨しています。<br />古いバージョンの Apache では、クライアントの問題に対応するために httpd.confに次の行を加えるよう推奨されていましたが、 今となっては、問題としていたクライアントは実際には見かけることは なくなってきたので、この設定はもはや必要ないかもしれません。<br />コピペ元:http://httpd.apache.org/docs/2.2/env.html<br />⇒互換性の問題に苦労してきた歴史が垣間見えます。。。<br />
  8. 8. 下の方は一部のWebDAVクライアント対応<br />  # The following directive disables redirects on non-GET requests for a directory that does not include the trailing slash. <br />  # This fixes a problem with Microsoft WebFolders which does not appropriately handle redirects for folders with DAV methods.# Same deal with Apple‘s DAV filesystem and Gnome VFS support for DAV.BrowserMatch “Microsoft Data Access Internet Publishing Provider” redirect-carefullyBrowserMatch “MS FrontPage” redirect-carefullyBrowserMatch “^WebDrive” redirect-carefullyBrowserMatch “^WebDAVFS/1.[0123]” redirect-carefullyBrowserMatch “^gnome-vfs/1.0” redirect-carefullyBrowserMatch “^XML Spy” redirect-carefullyBrowserMatch “^Dreamweaver-WebDAV-SCM1” redirect-carefully <br /> ⇒「GET」以外の要求で「the trailing slash」がない場合リダイレクトしない?<br />   「redirect-carefully」って何???<br />
  9. 9. “The Trailing Slash” って?<br />こんな感じにURLでディレクトリを指定するときに付ける、<br />最後のスラッシュのことです。<br />
  10. 10. 普通のブラウザはどう反応するかというと、<br />最後のスラッシュなしでアクセスすると、<br />いつの間にかスラッシュありのアドレスに移動します。<br />
  11. 11. どうしてこうなる?<br />① 最後のスラッシュなしのURLを指定すると、<br />② こういうお返事が返ってきて、<br /><title>301 Moved Permanently</title><br /></head><body><br /><h1>Moved Permanently</h1><br /><p>The document has moved <a href="http://www.example.com/dav/">here</a>.</p><br />③ ブラウザは「301」の反応はユーザに見せずに、リダイレクト先のアドレスで同じ操作を繰り返します。<br />
  12. 12. WebDAVのクライアントの場合―普通の例<br />Windows Vista/7の標準機能を使った場合<br />Apacheのアクセスログを見ると、<br />“PROPFIND /davHTTP/1.1" 301 324 "-" <br />      "Microsoft-WebDAV-MiniRedir/6.0.6002”<br />“PROPFIND /dav/HTTP/1.1" 207 836 "-" <br />      "Microsoft-WebDAV-MiniRedir/6.0.6002”<br />        (PROPFINDはWebDAVのメソッド)<br />  ⇒基本的にブラウザと同じ動き<br />    <br />Linuxでcadaverを使った場合<br />接続指定先が必ずディレクトリになるので、クライアント側で先にTrailing Slashを補完してから接続する。<br />
  13. 13. WebDAVのクライアントの場合―悪い例<br />お題の中に出てくる「WebDrive」で実験<br />設定をコメントアウトしてApacheを再起動<br /># BrowserMatch “^WebDrive” redirect-carefully<br />そのあと、WebDAVのディレクトリにアクセスすると、、、<br />⇒301をそのまま返してきた!!!<br />そんなWebDAVクライアントでd(ry<br />
  14. 14. デフォルト設定のままだと<br />デフォルト設定に戻して接続すると、<br />Trailing Slashなしでも、 Trailing Slashありと同じレスポンスが返されます。<br />"OPTIONS /dav HTTP/1.1" 200 - "-" "WebDrive 9.16.2391 DAV“<br />"PROPFIND /dav HTTP/1.1" 207 885 "-" "WebDrive 9.16.2391 DAV“<br />つまり、<br />一番いいレスポンスを頼む!!<br />
  15. 15. 後半のブラウザマッチが意味するもの<br />「redirect-carefully」はGET以外のメソッドに対して、リダイレクトで正しいアドレスに誘導するのではなく、サーバ側で空気を読んでお返事してあげるオプションです。<br />ちなみにソースの該当部分はこんな感じでした。<br />httpd-2.2.3modulesmappersmod_dir.cより<br />/* Only redirect non-get requests if we have no note to warn<br />* that this browser cannot handle redirs on non-GET requests<br />* (such as Microsoft's WebFolders).<br />*/<br />if ((r->method_number != M_GET)<br /> && apr_table_get(r->subprocess_env, "redirect-carefully")) {<br /> return DECLINE<br />}<br />WebDAVクライアントは、実装がばらついてるみたいなのでご注意!<br />
  16. 16. ここまでです。<br />

×