web-dev-qa-db-ja.com

サーバーに、ページ自体をロードしようとせずに、ブラウザーにハイパーリンクを強制的に渡させる

サーバーオプションを使い果たした可能性があるため、これがExcel(SuperUser)またはWebMastersの質問かどうかはわかりません。

ユースケース

このサイトでは、XLS形式の結果リストをダウンロードできます。結果ごとにハイパーリンクが存在し、デフォルトのブラウザに結果がロードされます。

ログファイルを見ると、クリックごとにいくつかのリクエストが見つかります。

  1. OPTIONS(私は今持っています405を生成します-このクエストを開始したとき、すべてのオプションを200OKで返していましたが、 Microsoft Office 2010がSubversionサーバーとの統合を停止します(Sharepoint および KB838028

  2. MSIE 7.0ユーザーエージェントからのリンクプリフェッチHTTP GET(Microsoftの組み込みURLハンドラー)-200 OK-実際のデータの2/3

  3. IE 11ユーザーエージェントからのHTTP GET-200 OK-完全なデータ

ログファイルエントリ

1.2.3.4 - - [17/Oct/2014:11:20:02 +0200] "OPTIONS /myfolder/ HTTP/1.1" 405 36 "-" "Microsoft Office Protocol Discovery" - -
1.2.3.4 - - [17/Oct/2014:11:20:02 +0200] "GET /myfolder/mypage?myparm=myvalue HTTP/1.1" 200 57288 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; ....; InfoPath.3; ms-office)" - -
1.2.3.4 - - [17/Oct/2014:11:20:03 +0200] "GET /myfolder/mypage?myparm=myvalue HTTP/1.1" 200 75326 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" - -

2番目の要求は帯域幅の浪費であり、サーバー処理の可能性が高い

サーバーに、2番目の要求でデータを提供しない方法があります。これは、Excelが表示できるものである場合に備えてロードし、そうでない場合はあきらめると思いますか?

リンクで Microsoft Officeリンクのプリフェッチとシングルサインオン @Perryによって与えられた私は魅力的な

RewriteCond %{HTTP_USER_AGENT} ;\sms-office(\)|;) [I] ...

しかし、デフォルトのブラウザで開く必要があるファイルをExecelが部分的にダウンロードしないようにこれを活用する方法はわかりません

UPDATE

一部のオフィスクライアントがユーザーエージェントの一部として実際にms-officeを送信するのを見ましたが、私のものではありません。 win7 Office 2013が送信する

Mozilla/4.0(互換性; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4。 0C; .NET4.0E; InfoPath.3)

UPDATE:これを放棄しますが、提案があります:

実際のExcelシートでリンクを作成し、実際のページでIE7をサポートしたくないことが確実な場合は、パラメーターをリンクに追加し、MSIE 7ユーザーエージェントに空のペイロードで200OKを返します。

5
mplungjan

興味深い-私はそれを知らなかった!

私のカスタムWebサーバー(Rapid Server)でテストしたところ、同じ結果(ハイパーリンクをクリックした後に3つのGETリクエスト)が得られたため、Webサーバーではないことがわかりました。

127.0.0.1:1062 - - [17/Oct/2014:03:57:45 -0700] "GET / HTTP/1.1" 0 
127.0.0.1:1063 - - [17/Oct/2014:03:57:47 -0700] "GET / HTTP/1.1" 0 
127.0.0.1:1064 - - [17/Oct/2014:03:57:47 -0700] "GET /favicon.ico HTTP/1.1" 404

私が観察したことは、追加の要求を繰り返して行うのではなく、最初に一度だけ実行してからキャッシュされるということです。

これは、Office Protocol Discoveryの動作方法に関連しているようです。 KB838028 それを説明します:

Webリソースを開く方法に関する決定は、ドキュメントの取得元のフォルダーパスを調査し、そのパスを管理するサーバーの機能を調査することで解決されます。サーバーがサポートする機能を決定するために、Office 2003はHTTP 1.1標準のOPTIONSコマンドを発行します。 OPTIONSコマンドは、ドキュメントが置かれているフォルダーに対してサーバーがサポートしているコマンドとメソッドをサーバーが識別することをサーバーに要求します。サーバーの識別は、RFC 2616で概説されている規則に従って行われます。

また、OfficeはWebサーバーの種類を判断しようとします。この決定は、OPTIONS呼び出しによって返されるヘッダー情報に基づいています。具体的には、Officeは、SharePointドキュメントライブラリまたはExchange WebStoreフォルダーとの通信を示すヘッダー値を探します。

基本的に、Officeがうまく再生しようとする方法、またはこれらのハイパーリンクに関連する可能性のある他の共同ソフトウェアに拡張性を提供する方法が原因で発生します。

OPTIONS要求をインターセプトして405を返す書き換えルールを作成できます。 here を参照してください。

編集:この回答を最初に投稿したときにあなたの質問の詳細のいくつかを逃したように見えますが、実際には有用な回答を提供していません。 HTTPの結果は似ていますが、少し異なります。暫定的に、これらの記事はいくつかの追加の洞察を提供するように見えます: 12 、。結果をもう一度見ると、2番目のリクエストのユーザーエージェントは「古い」ので、Officeの内部Webクライアントがそのリクエストを行っていることを意味する可能性があります。奇妙なことに、私の結果にはfavicon.icoのGETが表示されますが、あなたには表示されません。

this の記事から:

Officeファイル(Word文書、Excelスプレッドシート、PowerPointプレゼンテーションなど)のハイパーリンクをクリックしても、URLはすぐにはブラウザーに渡されません。まず、Officeは内部的にアドレスを取得します。リンクが3xxリダイレクトコードを返す場合、Officeは新しいアドレスを要求して繰り返します。リンクが4xxクライアントエラーコードを返した場合、Officeはリクエストを中止し、ブラウザーを一度も開いたことがないため、リンクが利用できないことをユーザーに通知します(これがこの「機能」の要点だと思います)。そして、リンクが2xx成功コードを返す場合、URLは最終的にブラウザで開かれます。最終URLのみがブラウザーに渡されます。リダイレクトはすべてOfficeによってマスクされます。

要約すると、Microsoft Officeプログラムでハイパーリンクをクリックすると、最大4つのHTTPリクエストを作成できます。

  1. Officeは、内部Webクライアントを使用してHTTP OPTIONS要求を行い、Webサーバー機能を確認します。ユーザーエージェントは「Microsoft Office Protocol Discovery」です。
  2. Officeは、内部Webクライアントを使用してクリックされたハイパーリンクURLのHTTP GET要求を行い、WebブラウザーでURLを起動する前にWebサーバーが200 OKを返すことを確認します。
  3. OfficeはWebブラウザーでURLを起動し、WebブラウザーはクリックされたハイパーリンクURLに対して3番目のHTTP GET要求を行います-ユーザーエージェントは「Mozilla/5.0」です。
  4. Webブラウザー(常にではないようですが)favicon.icoに対してHTTP GET要求を行います-ユーザーエージェントは「Mozilla/5.0」です。

参照:

6
perry