今日もまた踏みました

非定期更新:主に何とも言えない事態にあった際に更新しています

Excel で URL をクリックした場合とブラウザに URL を貼り付けた場合で違うページが開かれる事案が発生

前提条件です

基本的なところですが、下記の様な手順で URL のリンクを作成し、クリックにて URL を開いた時の事になります
また、Excel と記載していますが、Word や PowerPoint など Office 製品全般に言える様ですが、ここでは代表して Excel にて説明をします

1. Excel を開きますf:id:itrident_kumakawa:20160309120125p:plain

2. セルに URL を入力しますf:id:itrident_kumakawa:20160309120129p:plain

3. Enter キーなどで入力内容を確定します ( 入力内容がリンクになります )f:id:itrident_kumakawa:20160309120133p:plain

4. このリンクをダブルクリックして開きますf:id:itrident_kumakawa:20160309120137p:plain

上記の様な手順を実行したときに直接ブラウザで開いた場合と異なるページが開かれる場合があります

「お断り事項」
当内容は、2016/01/01時点でのExcel 2010 および 2013にて確認を行っております。
この動作が Microsoft 社の想定している動作か否かはわかりません。
よって知らぬ間に修正されている可能性はあります

 

どの様な事が起きるのか

参考用サイトを作成しました(誤って消してしまっていたらごめんなさい)
http://www.hhsb.jp/exceltest/subpage.php

 普通の操作Excel リンククリック

ログインページが開く
User:hoge
Password:hogehoge
を入力しログイン

f:id:itrident_kumakawa:20160309121103p:plain f:id:itrident_kumakawa:20160309121103p:plain

 

ログイン後のページへ遷移する
f:id:itrident_kumakawa:20160309121453p:plain f:id:itrident_kumakawa:20160309121544p:plain

このサイトはサブページを参照する際にログインを必要としています
そのため、普通の操作および Excel リンククリックでの操作ともに最初はログインの画面が表示されます。本来であればログイン後にサブページへと画面が移りますが、Excelのリンクをクリックした場合は、サブページではないページへと移ってしまいます

 

どの様なサイトで発生するのか

下記の様な構成になっている場合に発生します

f:id:itrident_kumakawa:20160329174519p:plain

特徴として、ログインしていない場合の画面遷移を Forward ではなく Redirect で行っているところです(処理として間違っている訳ではないです)
そして Excel で開いたリンク先でリダイレクトが発生した場合に想定と異なります

 

なぜ、このような現象が発生するのか

Excel にて リンクをクリックした場合、まずは Excel 内部で持っているブラウザにて URL へのアクセスを試みます
特にリダイレクトされている訳でもなく、また初めて開く URL の場合は、次の様な流れとなります

内部ブラウザにて URL のヘッダーを確認 (HEAD リクエスト)
→ 内部ブラウザにて URL のダウンロードを実施 (GET リクエスト)
→ デフォルトブラウザを URL 指定で起動

具体的に何をやっているのかはわかりませんが、HEAD リクエスト後に GET リクエストが発生している関係上、内部でキャッシュを持っており、そのキャッシュの更新確認を行っていると思われます
あくまでも推測の域を出ませんが、URL の信頼性などの確認を行っている様です

 

問題のケースとなりますが、間にリダイレクトが入ると下記の様な動作に変わります

内部ブラウザにて URL1 のヘッダーを確認 (HEAD リクエスト)
→ レスポンスにより URL2 への 302 リダイレクトを受けとる
→ 内部ブラウザにて URL2 のヘッダーを確認 (HEAD リクエスト)
→ 内部ブラウザにて URL1 のダウンロードを実施 (GET リクエスト)
→ レスポンスにより URL2 への 302 リダイレクトを受けとる
→ 内部ブラウザにて URL2 のダウンロードを実施 (GET リクエスト)
→ デフォルトブラウザを URL2 指定で起動

なぜか途中でリダイレクトを受け取ると、最後にデフォルトブラウザを呼び出す段階になって、リダイレクト先の URL を渡してしまっています
上記のサンプルもそうですが、ログイン後にアクセスされた URL へと戻る様に作成してありますが、Excel のリンククリックより起動した場合は、最初からリダイレクト先の URL で渡されてしまうため、戻る先がわからなくなります
そのため、普通に開いた場合と Excel のリンクを開いた場合で動作が異なってしまう事になります

この動作を狙って作ってあるのか、それとも何らかミスなのかはわかりませんが、現象としては、この様に動くようです
狙ったページが開かれない場合は、URL をコピペして開く様にした方が良いです

 

ついでにこの現象を経てわかった事

Excel のリンクをクリックした場合は、ダウンロードが 2 回発生する…
1GB のファイルがダウンロードされる URL をクリックしたら、1GB のファイルを 2 回ダウンロードする様です…

また、URL の先が無い場合は、タイムアウト待ちを行った後にブラウザが起動されます…たまにもっさりとした動作になるのは、これが原因の様です

こういった事より、基本的に Office 製品に貼りついている URL のリンクはクリックで開かずにコピペにて直接開いた方が良さそうです