SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
HTTPD.CONFのブラウザマッチ処理
                    石田 精一郎
             Twitter: @sechiro
(自己紹介は割愛)
本題
お題 212-223:ブラウザマッチ処理
 BrowserMatch は SetEnvIf ディレクティブの 特例で、
  User-Agent HTTP リクエストヘッダに基づいて 環境変
  数を設定します。(コピペ)
 微妙なブラウザに対応するためのサーバ側の対応が
  書いてあります。
 設定されているUser-Agentからのアクセスされた場合、
  対応する環境変数を設定します。
コメント付きで、お題の内容を確認
   大きく二つに分かれてます
    # The following directives modify normal HTTP response behavior to
    # handle known problems with browser implementations.
    #
    BrowserMatch "Mozilla/2" nokeepalive
    BrowserMatch "MSIE 4¥.0b2;" nokeepalive downgrade-1.0 force-response-1.0
    BrowserMatch "RealPlayer 4¥.0" force-response-1.0
    BrowserMatch "Java/1¥.0" force-response-1.0
    BrowserMatch "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-carefully
    BrowserMatch "MS FrontPage" redirect-carefully
    BrowserMatch "^WebDrive" redirect-carefully
    BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
    BrowserMatch "^gnome-vfs/1.0" redirect-carefully
    BrowserMatch "^XML Spy" redirect-carefully
    BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully
まずは上の方
# The following directives modify normal HTTP
response behavior to handle known problems
with browser implementations.

BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4¥.0b2;" nokeepalive
downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4¥.0" force-response-
1.0
BrowserMatch "Java/1¥.0" force-response-1.0
BrowserMatch "JDK/1¥.0" force-response-1.0

⇒一部の変なHTTP実装をしてるブラウザ対応です。
ドキュメントを確認
   force-response-1.0
       これが設定されていると、HTTP/1.0 リクエストを発行するクライアントに対して
        は 常に HTTP/1.0 で応答するようになります。この機能は、 元々は AOL のプ
        ロキシの問題のために実装されました。HTTP/1.0 クライアントの中には、
        HTTP/1.1 の応答を返されると正しく動作しないものがあるかもしれません。 こ
        の機能を使用することで、そのようなクライアントとの間の互換性問題を解決で
        きます。
    ・・・
   おかしな挙動をするクライアントに対してプロトコルの動作を変更する
       クライアントに関する既知の問題に対処するために、以下の行を httpd.conf に
        入れることを推奨しています。
       古いバージョンの Apache では、クライアントの問題に対応するために
        httpd.conf に次の行を加えるよう推奨されていましたが、 今となっては、問題と
        していたクライアントは実際には見かけることは なくなってきたので、この設定
        はもはや必要ないかもしれません。

                         コピペ元:http://httpd.apache.org/docs/2.2/env.html

⇒互換性の問題に苦労してきた歴史が垣間見えます。。。
下の方は一部のWebDAVクライアント対応
 # 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-carefully
BrowserMatch “MS FrontPage” redirect-carefully
BrowserMatch “^WebDrive” redirect-carefully
BrowserMatch “^WebDAVFS/1.[0123]” redirect-carefully
BrowserMatch “^gnome-vfs/1.0” redirect-carefully
BrowserMatch “^XML Spy” redirect-carefully
BrowserMatch “^Dreamweaver-WebDAV-SCM1” redirect-
carefully

⇒「GET」以外の要求で「the trailing slash」がない場合リダイレクトしない?
  「redirect-carefully」って何???
“The Trailing Slash” って?




  こんな感じにURLでディレクトリを指定するときに付ける、
  最後のスラッシュのことです。
普通のブラウザはどう反応するかというと、




 最後のスラッシュなしでアクセスすると、
 いつの間にかスラッシュありのアドレスに移動します。
どうしてこうなる?
① 最後のスラッシュなしのURLを指定すると、



② こういうお返事が返ってきて、
 <title>301 Moved Permanently</title>
 </head><body>
 <h1>Moved Permanently</h1>
 <p>The document has moved <a href="http://www.example.com/dav/">here</a>.</p>



③ ブラウザは「301」の反応はユーザに見せずに、リダイレクト先のアド
レスで同じ操作を繰り返します。
WebDAVのクライアントの場合―普通の例

   Windows Vista/7の標準機能を使った場合
       Apacheのアクセスログを見ると、
           “PROPFIND /dav HTTP/1.1" 301 324 "-"
                 "Microsoft-WebDAV-MiniRedir/6.0.6002”
           “PROPFIND /dav/ HTTP/1.1" 207 836 "-"
                 "Microsoft-WebDAV-MiniRedir/6.0.6002”
                      (PROPFINDはWebDAVのメソッド)

    ⇒基本的にブラウザと同じ動き

   Linuxでcadaverを使った場合
       接続指定先が必ずディレクトリになるので、クライアント側で
        先にTrailing Slashを補完してから接続する。
WebDAVのクライアントの場合―悪い例

   お題の中に出てくる「WebDrive」で実験
       設定をコメントアウトしてApacheを再起動
            # BrowserMatch “^WebDrive” redirect-carefully
       そのあと、WebDAVのディレクトリにアクセスすると、、、




        ⇒301をそのまま返してきた!!!
        そんなWebDAVクライアントでd(ry
デフォルト設定のままだと

   デフォルト設定に戻して接続すると、
       Trailing Slashなしでも、 Trailing Slashありと同じレスポンス
        が返されます。
           "OPTIONS /dav HTTP/1.1" 200 - "-" "WebDrive 9.16.2391 DAV“
           "PROPFIND /dav HTTP/1.1" 207 885 "-" "WebDrive 9.16.2391 DAV“
   つまり、




        一番いいレスポンスを頼む!!
後半のブラウザマッチが意味するもの

   「redirect-carefully」はGET以外のメソッドに対して、リ
    ダイレクトで正しいアドレスに誘導するのではなく、サー
    バ側で空気を読んでお返事してあげるオプションです。
       ちなみにソースの該当部分はこんな感じでした。
        httpd-2.2.3¥modules¥mappers¥mod_dir.cより
        /* Only redirect non-get requests if we have no note to warn
        * that this browser cannot handle redirs on non-GET requests
        * (such as Microsoft's WebFolders).
        */
        if ((r->method_number != M_GET)
               && apr_table_get(r->subprocess_env, "redirect-carefully")) {
            return DECLINE
        }



   WebDAVクライアントは、実装がばらついてるみたいな
    のでご注意!
ここまでです。

Weitere ähnliche Inhalte

Was ist angesagt?

御池サミット20130726
御池サミット20130726御池サミット20130726
御池サミット20130726Takeshiro Kani
 
Express Route で遊んでみた
Express Route で遊んでみたExpress Route で遊んでみた
Express Route で遊んでみたひさし
 
PHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったことPHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったことKentaro Matsui
 
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニングKiyokazu Kaba
 
これから利用拡大?WebSocket
これから利用拡大?WebSocketこれから利用拡大?WebSocket
これから利用拡大?WebSocketAdvancedTechNight
 
Mackerelによる
簡単サーバー管理入門と発展形
Mackerelによる
簡単サーバー管理入門と発展形Mackerelによる
簡単サーバー管理入門と発展形
Mackerelによる
簡単サーバー管理入門と発展形Shinji Tanaka
 
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会Yasutaka Hamada
 
徳丸本VMに脆弱なWordPressを導入する
徳丸本VMに脆弱なWordPressを導入する徳丸本VMに脆弱なWordPressを導入する
徳丸本VMに脆弱なWordPressを導入するHiroshi Tokumaru
 
再入門、サーバープッシュ技術
再入門、サーバープッシュ技術再入門、サーバープッシュ技術
再入門、サーバープッシュ技術Shin Sekaryo
 
はじめてのクラウドサーバー AWSとGCEを使い比べてみた
はじめてのクラウドサーバー AWSとGCEを使い比べてみたはじめてのクラウドサーバー AWSとGCEを使い比べてみた
はじめてのクラウドサーバー AWSとGCEを使い比べてみたEigoro Yamamura
 
MySQL 冗長化モデル
MySQL 冗長化モデルMySQL 冗長化モデル
MySQL 冗長化モデルZaki_XL
 
20130222 osc13tk osc.cms
20130222 osc13tk osc.cms20130222 osc13tk osc.cms
20130222 osc13tk osc.cmsusptomo
 
商用VPSのここだけの話
商用VPSのここだけの話商用VPSのここだけの話
商用VPSのここだけの話joeswebhosting
 
Enterprise Manager 3.0
Enterprise Manager 3.0Enterprise Manager 3.0
Enterprise Manager 3.0Yuji Fujita
 
Html5, Web Applications 2
Html5, Web Applications 2Html5, Web Applications 2
Html5, Web Applications 2totty jp
 
GSLB機能について(MyDNS.JP)
GSLB機能について(MyDNS.JP)GSLB機能について(MyDNS.JP)
GSLB機能について(MyDNS.JP)Takeshi Kabu
 
NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴
NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴
NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴Akihiro Kuwano
 

Was ist angesagt? (20)

御池サミット20130726
御池サミット20130726御池サミット20130726
御池サミット20130726
 
Express Route で遊んでみた
Express Route で遊んでみたExpress Route で遊んでみた
Express Route で遊んでみた
 
PHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったことPHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったこと
 
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング
 
これから利用拡大?WebSocket
これから利用拡大?WebSocketこれから利用拡大?WebSocket
これから利用拡大?WebSocket
 
PowerShell de Azure
PowerShell de AzurePowerShell de Azure
PowerShell de Azure
 
Mackerelによる
簡単サーバー管理入門と発展形
Mackerelによる
簡単サーバー管理入門と発展形Mackerelによる
簡単サーバー管理入門と発展形
Mackerelによる
簡単サーバー管理入門と発展形
 
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
 
Maven tips
Maven tipsMaven tips
Maven tips
 
徳丸本VMに脆弱なWordPressを導入する
徳丸本VMに脆弱なWordPressを導入する徳丸本VMに脆弱なWordPressを導入する
徳丸本VMに脆弱なWordPressを導入する
 
Nodejs
NodejsNodejs
Nodejs
 
再入門、サーバープッシュ技術
再入門、サーバープッシュ技術再入門、サーバープッシュ技術
再入門、サーバープッシュ技術
 
はじめてのクラウドサーバー AWSとGCEを使い比べてみた
はじめてのクラウドサーバー AWSとGCEを使い比べてみたはじめてのクラウドサーバー AWSとGCEを使い比べてみた
はじめてのクラウドサーバー AWSとGCEを使い比べてみた
 
MySQL 冗長化モデル
MySQL 冗長化モデルMySQL 冗長化モデル
MySQL 冗長化モデル
 
20130222 osc13tk osc.cms
20130222 osc13tk osc.cms20130222 osc13tk osc.cms
20130222 osc13tk osc.cms
 
商用VPSのここだけの話
商用VPSのここだけの話商用VPSのここだけの話
商用VPSのここだけの話
 
Enterprise Manager 3.0
Enterprise Manager 3.0Enterprise Manager 3.0
Enterprise Manager 3.0
 
Html5, Web Applications 2
Html5, Web Applications 2Html5, Web Applications 2
Html5, Web Applications 2
 
GSLB機能について(MyDNS.JP)
GSLB機能について(MyDNS.JP)GSLB機能について(MyDNS.JP)
GSLB機能について(MyDNS.JP)
 
NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴
NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴
NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴
 

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

泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21Takakiyo Tanaka
 
Sflt17 meteorではじめる最速ウェブアプリ開発
Sflt17 meteorではじめる最速ウェブアプリ開発Sflt17 meteorではじめる最速ウェブアプリ開発
Sflt17 meteorではじめる最速ウェブアプリ開発Hironao Sekine
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門miso- soup3
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップYasuhito Yabe
 
Flyway使いたい
Flyway使いたいFlyway使いたい
Flyway使いたいfourside
 
MODX on Windows Azure
MODX on Windows AzureMODX on Windows Azure
MODX on Windows AzureKei Mikage
 
これからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみようこれからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみようNobuyuki Sasaki
 
MEANスタック提案プレゼンテーション
MEANスタック提案プレゼンテーションMEANスタック提案プレゼンテーション
MEANスタック提案プレゼンテーションTakumi Yokoyama
 
Webサイト制作の環境構築(for Windows)
Webサイト制作の環境構築(for Windows)Webサイト制作の環境構築(for Windows)
Webサイト制作の環境構築(for Windows)MarlboroLand
 
Engine Yardで作る NetCommons3のクラウド環境
Engine Yardで作る NetCommons3のクラウド環境Engine Yardで作る NetCommons3のクラウド環境
Engine Yardで作る NetCommons3のクラウド環境Yusuke Ando
 
仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製する仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製するjunichi anno
 
AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 - AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 - SORACOM, INC
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
Thunderbird 3のご紹介と企業に求められるカスタマイズ
Thunderbird 3のご紹介と企業に求められるカスタマイズThunderbird 3のご紹介と企業に求められるカスタマイズ
Thunderbird 3のご紹介と企業に求められるカスタマイズMakoto Kato
 
徳丸本に載っていないWebアプリケーションセキュリティ
徳丸本に載っていないWebアプリケーションセキュリティ徳丸本に載っていないWebアプリケーションセキュリティ
徳丸本に載っていないWebアプリケーションセキュリティHiroshi Tokumaru
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
WebサーバのチューニングYu Komiya
 
Docker swarm mode 入門と ECS との比較
Docker swarm mode 入門と ECS との比較Docker swarm mode 入門と ECS との比較
Docker swarm mode 入門と ECS との比較Yoshinori Teraoka
 

Ähnlich wie 第1回Webサーバ勉強会 - 212-223 ブラウザマッチ処理 (20)

泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
 
Sflt17 meteorではじめる最速ウェブアプリ開発
Sflt17 meteorではじめる最速ウェブアプリ開発Sflt17 meteorではじめる最速ウェブアプリ開発
Sflt17 meteorではじめる最速ウェブアプリ開発
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ
 
Flyway使いたい
Flyway使いたいFlyway使いたい
Flyway使いたい
 
MODX on Windows Azure
MODX on Windows AzureMODX on Windows Azure
MODX on Windows Azure
 
これからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみようこれからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみよう
 
MEANスタック提案プレゼンテーション
MEANスタック提案プレゼンテーションMEANスタック提案プレゼンテーション
MEANスタック提案プレゼンテーション
 
Webサイト制作の環境構築(for Windows)
Webサイト制作の環境構築(for Windows)Webサイト制作の環境構築(for Windows)
Webサイト制作の環境構築(for Windows)
 
Engine Yardで作る NetCommons3のクラウド環境
Engine Yardで作る NetCommons3のクラウド環境Engine Yardで作る NetCommons3のクラウド環境
Engine Yardで作る NetCommons3のクラウド環境
 
仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製する仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製する
 
AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 - AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 -
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
Thunderbird 3のご紹介と企業に求められるカスタマイズ
Thunderbird 3のご紹介と企業に求められるカスタマイズThunderbird 3のご紹介と企業に求められるカスタマイズ
Thunderbird 3のご紹介と企業に求められるカスタマイズ
 
徳丸本に載っていないWebアプリケーションセキュリティ
徳丸本に載っていないWebアプリケーションセキュリティ徳丸本に載っていないWebアプリケーションセキュリティ
徳丸本に載っていないWebアプリケーションセキュリティ
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
Webサーバのチューニング
 
Mvc conf session_5_isami
Mvc conf session_5_isamiMvc conf session_5_isami
Mvc conf session_5_isami
 
Docker swarm mode 入門と ECS との比較
Docker swarm mode 入門と ECS との比較Docker swarm mode 入門と ECS との比較
Docker swarm mode 入門と ECS との比較
 

Mehr von Seiichiro Ishida

CEO 3Dモデルお披露目兼会社説明会
CEO 3Dモデルお披露目兼会社説明会CEO 3Dモデルお披露目兼会社説明会
CEO 3Dモデルお披露目兼会社説明会Seiichiro Ishida
 
Infrastructure as code LT AWS + Ansibleのお悩み相談
Infrastructure as code LT AWS + Ansibleのお悩み相談Infrastructure as code LT AWS + Ansibleのお悩み相談
Infrastructure as code LT AWS + Ansibleのお悩み相談Seiichiro Ishida
 
Qpstudy201404 インフラ設計の勘所
Qpstudy201404 インフラ設計の勘所Qpstudy201404 インフラ設計の勘所
Qpstudy201404 インフラ設計の勘所Seiichiro Ishida
 
Qpstudy.2013.07.c84新作発表資料「汝はエンジニアような名状しがたい何かなりや?」
Qpstudy.2013.07.c84新作発表資料「汝はエンジニアような名状しがたい何かなりや?」Qpstudy.2013.07.c84新作発表資料「汝はエンジニアような名状しがたい何かなりや?」
Qpstudy.2013.07.c84新作発表資料「汝はエンジニアような名状しがたい何かなりや?」Seiichiro Ishida
 
Note difference between sysstat on cent os 5 & 6
Note  difference between sysstat on cent os 5 & 6Note  difference between sysstat on cent os 5 & 6
Note difference between sysstat on cent os 5 & 6Seiichiro Ishida
 
Osc2013 spring OpenStackで実現する分散ストレージ「Swift」とプライベートクラウド
Osc2013 spring OpenStackで実現する分散ストレージ「Swift」とプライベートクラウドOsc2013 spring OpenStackで実現する分散ストレージ「Swift」とプライベートクラウド
Osc2013 spring OpenStackで実現する分散ストレージ「Swift」とプライベートクラウドSeiichiro Ishida
 
かるた工場作業一日目
かるた工場作業一日目かるた工場作業一日目
かるた工場作業一日目Seiichiro Ishida
 
俺のZabbixがこんなに可愛いわけがない~北海道巡業編~
俺のZabbixがこんなに可愛いわけがない~北海道巡業編~俺のZabbixがこんなに可愛いわけがない~北海道巡業編~
俺のZabbixがこんなに可愛いわけがない~北海道巡業編~Seiichiro Ishida
 
【Hpcstudy】みんな、ベンチマークどうやってるの?
【Hpcstudy】みんな、ベンチマークどうやってるの?【Hpcstudy】みんな、ベンチマークどうやってるの?
【Hpcstudy】みんな、ベンチマークどうやってるの?Seiichiro Ishida
 
Osc2012 spring HBase Report
Osc2012 spring HBase ReportOsc2012 spring HBase Report
Osc2012 spring HBase ReportSeiichiro Ishida
 
【Zabbix jp】明日から職場で使えるざびたん
【Zabbix jp】明日から職場で使えるざびたん【Zabbix jp】明日から職場で使えるざびたん
【Zabbix jp】明日から職場で使えるざびたんSeiichiro Ishida
 
Zabbix jp勉強会 Hadoop-HBaseの監視_20120512
Zabbix jp勉強会 Hadoop-HBaseの監視_20120512Zabbix jp勉強会 Hadoop-HBaseの監視_20120512
Zabbix jp勉強会 Hadoop-HBaseの監視_20120512Seiichiro Ishida
 
【Qp08】ざびたん2リリース報告lt 20111022
【Qp08】ざびたん2リリース報告lt 20111022【Qp08】ざびたん2リリース報告lt 20111022
【Qp08】ざびたん2リリース報告lt 20111022Seiichiro Ishida
 
サーバ擬人化ユーザ会Lt資料 qpstudy lite
サーバ擬人化ユーザ会Lt資料 qpstudy liteサーバ擬人化ユーザ会Lt資料 qpstudy lite
サーバ擬人化ユーザ会Lt資料 qpstudy liteSeiichiro Ishida
 
サーバ擬人化ユーザ会キックオフ資料 Slideshare ver
サーバ擬人化ユーザ会キックオフ資料 Slideshare verサーバ擬人化ユーザ会キックオフ資料 Slideshare ver
サーバ擬人化ユーザ会キックオフ資料 Slideshare verSeiichiro Ishida
 
俺のZabbixがこんなに可愛いわけがない(おかわり)
俺のZabbixがこんなに可愛いわけがない(おかわり) 俺のZabbixがこんなに可愛いわけがない(おかわり)
俺のZabbixがこんなに可愛いわけがない(おかわり) Seiichiro Ishida
 
俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがない俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがないSeiichiro Ishida
 

Mehr von Seiichiro Ishida (17)

CEO 3Dモデルお披露目兼会社説明会
CEO 3Dモデルお披露目兼会社説明会CEO 3Dモデルお披露目兼会社説明会
CEO 3Dモデルお披露目兼会社説明会
 
Infrastructure as code LT AWS + Ansibleのお悩み相談
Infrastructure as code LT AWS + Ansibleのお悩み相談Infrastructure as code LT AWS + Ansibleのお悩み相談
Infrastructure as code LT AWS + Ansibleのお悩み相談
 
Qpstudy201404 インフラ設計の勘所
Qpstudy201404 インフラ設計の勘所Qpstudy201404 インフラ設計の勘所
Qpstudy201404 インフラ設計の勘所
 
Qpstudy.2013.07.c84新作発表資料「汝はエンジニアような名状しがたい何かなりや?」
Qpstudy.2013.07.c84新作発表資料「汝はエンジニアような名状しがたい何かなりや?」Qpstudy.2013.07.c84新作発表資料「汝はエンジニアような名状しがたい何かなりや?」
Qpstudy.2013.07.c84新作発表資料「汝はエンジニアような名状しがたい何かなりや?」
 
Note difference between sysstat on cent os 5 & 6
Note  difference between sysstat on cent os 5 & 6Note  difference between sysstat on cent os 5 & 6
Note difference between sysstat on cent os 5 & 6
 
Osc2013 spring OpenStackで実現する分散ストレージ「Swift」とプライベートクラウド
Osc2013 spring OpenStackで実現する分散ストレージ「Swift」とプライベートクラウドOsc2013 spring OpenStackで実現する分散ストレージ「Swift」とプライベートクラウド
Osc2013 spring OpenStackで実現する分散ストレージ「Swift」とプライベートクラウド
 
かるた工場作業一日目
かるた工場作業一日目かるた工場作業一日目
かるた工場作業一日目
 
俺のZabbixがこんなに可愛いわけがない~北海道巡業編~
俺のZabbixがこんなに可愛いわけがない~北海道巡業編~俺のZabbixがこんなに可愛いわけがない~北海道巡業編~
俺のZabbixがこんなに可愛いわけがない~北海道巡業編~
 
【Hpcstudy】みんな、ベンチマークどうやってるの?
【Hpcstudy】みんな、ベンチマークどうやってるの?【Hpcstudy】みんな、ベンチマークどうやってるの?
【Hpcstudy】みんな、ベンチマークどうやってるの?
 
Osc2012 spring HBase Report
Osc2012 spring HBase ReportOsc2012 spring HBase Report
Osc2012 spring HBase Report
 
【Zabbix jp】明日から職場で使えるざびたん
【Zabbix jp】明日から職場で使えるざびたん【Zabbix jp】明日から職場で使えるざびたん
【Zabbix jp】明日から職場で使えるざびたん
 
Zabbix jp勉強会 Hadoop-HBaseの監視_20120512
Zabbix jp勉強会 Hadoop-HBaseの監視_20120512Zabbix jp勉強会 Hadoop-HBaseの監視_20120512
Zabbix jp勉強会 Hadoop-HBaseの監視_20120512
 
【Qp08】ざびたん2リリース報告lt 20111022
【Qp08】ざびたん2リリース報告lt 20111022【Qp08】ざびたん2リリース報告lt 20111022
【Qp08】ざびたん2リリース報告lt 20111022
 
サーバ擬人化ユーザ会Lt資料 qpstudy lite
サーバ擬人化ユーザ会Lt資料 qpstudy liteサーバ擬人化ユーザ会Lt資料 qpstudy lite
サーバ擬人化ユーザ会Lt資料 qpstudy lite
 
サーバ擬人化ユーザ会キックオフ資料 Slideshare ver
サーバ擬人化ユーザ会キックオフ資料 Slideshare verサーバ擬人化ユーザ会キックオフ資料 Slideshare ver
サーバ擬人化ユーザ会キックオフ資料 Slideshare ver
 
俺のZabbixがこんなに可愛いわけがない(おかわり)
俺のZabbixがこんなに可愛いわけがない(おかわり) 俺のZabbixがこんなに可愛いわけがない(おかわり)
俺のZabbixがこんなに可愛いわけがない(おかわり)
 
俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがない俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがない
 

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

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