問題:
我這邊是https的應用,需要請求另一臺http應用的字體資源(woff或者ttf),然後報錯:Mixed Content:the page at'http://XXXX' was loaded over HTTPS
原因:
HTTPS頁面裏動態的引入HTTP資源,會被直接block掉的.在HTTPS頁面裏通過AJAX的方式請求HTTP資源,也會被直接block掉。
看到網上給的方式:
第一種:自動將http的不安全請求升級爲https
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
還有跟這個方案如出一轍的解決方案:(一個什麼鬼草案的(Upgrade Insecure Requests
的草案 ))
此時問題來了,我請求的ttf字體,確實可以升級成https的,但是由於證書爲題會出現如下錯誤:
net::ERR_CERT_AUTHORITY_INVALID
這個需要手動去點擊一下,才能正常下載,但是字體效果總不能讓用戶去點擊下載字體,再強刷瀏覽器顯示效果吧。
網上給的第二種方案:
用nginx代理,這個確實能夠解決,但是在項目本身沒有使用nginx的情況下,專門爲這個問題搞一個nginx有點“殺雞焉用宰牛刀”的感覺了。
我的解決方案:
filter+proxy,過濾器攔截到需要請求的資源,應用中是要請求字體的,例:https://localhost:8084/WMS/ttf/yahei.ttf,但是這個字體是要去另一臺http服務器請求的,本身肯定是不存在的,不出意外應該是會報404的。
我們就在過濾器中強行修改response的內容,本來是要返回404的,我們在返回之前代理請求http的字體,然後修改response,把404替換成查出來的ttf,返回給瀏覽器,就能完美解決。
上點代碼: