前言
同事詢問一個很怪的問題,
當使用者開啟預設的 Browser 登入 Web AP 後,
再開啟 Word ,點選裡面 Web AP 的 Link,
結果 Browser 開啟的 Url 卻是該 AP 的 登入頁面,
而不是 使用者 按下的那個 Link 的 URL。
一樣的行為,點 PDF 的 Link 卻乖乖的開啟使用者點的 URL,
到底怎麼一回事呢?
研究與解決
請同事使用 Fiddler 錄一下整個的過程,
從原本的 Chrome 登入後,再開啟 Word 並點選 Web AP 的 Link 後,
在 Chrome 變成是 開啟 Web AP 的登入頁面。
從上圖可以發現,
當使用者在 Word 中按下 Link 時,
Word 會先做一次的 HEAD Request(dataSourcesSetting) ,然後被 Redirect 到 登入頁面(login),
然後又會做一次的 GET Request(dataSourcesSetting) ,然後被 Redirect 到 登入頁面(login)。
所以最後 Word 給 Chrome 的 URL 就是那個 回傳 Status Code 為 200 的 登入頁面(login)。
依上述的狀況,在網路上有找到 MS Word validating links after click 這篇,
他的狀況也是一樣,從 Word 中點了 Link 後,總是被導到 登入頁面。
原因是因為 Office 會執行 Microsoft Office Protocol Discovery,
解法 1: 改使用者機碼
所以暫時解的方式就是設定機碼,將 Office 的 ForceShellExecute
() 設定成 1,如下圖,
改完機碼重開機後再來測試,可以發現,
在 Word 中並不會去多做 GET 的行為,如下圖,
所以在 Chrome 中可以正常的操作系統,而不會到 登入頁(login)
解法 2: 調整 Web 系統
如果要改的使用者很多,另一個方式就是判斷 Request 中的 User-Agent ,
如果有 ms-office
或是判斷 Request Header 中是否有什麼特別的 內容,
,然後直接回傳 Status Code 為 200
的空內容。
以下的 User-Agent 就是使用者在 Word 中按下 Link 時,Fiddler 錄到的 User-Agent 的內容,
1 | User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; Win64; x64; |
參考資源
MS Word validating links after click
Office Protocol Discovery Requests
What are “Microsoft Office Protocol Discovery” and “OfficeLiveConnector” and why do they access invalid URLs?
系統會將您重新導向至登入頁面或錯誤頁面,或者當您按一下 Office 檔中 SSO 網站的超連結時,系統會提示您輸入驗證資訊
選取 Office 中的超連結時出現錯誤訊息:「無法找到網際網路伺服器或 proxy 伺服器」