當 IE8 IE9 碰到 AJAX 跨域請求 Cross Origin Resource Sharing (CORS)

就會爆炸拉~

現在 PC 中還配備著 IE9 含以下版本瀏覽器的,扣除不常使用的族群(不會去更新)大概就剩 銀行政府 為多數了 Orz

要做銀行活動的案子,通常就是要求前端視覺要夠力,而後輔助功能要fancy,輔助功能會動到後端的大多就是填表單做問卷之類的,然後這一類後端功能在活動前期會要求廠商配合開發與介接,之後轉移為銀行自己的系統。前面是時程上的問題,後面是安全性的問題。

說到這,大概就清楚這篇的來由了吧?XD

以下針對 AJAX 跨域請求的問題簡短說明

就是對不同網域使用 JavaScript 請求資源時會因為瀏覽器的安全限制而遭到阻擋

一般情況解套的辦法是由後端回應接受請求的標頭(header)如下,瀏覽器就會放行

Access-Control-Allow-Origin: https://www.mxp.tw
Access-Control-Allow-Methods: GET, POST

這個標頭還可以針對請求的方法限制

不過面對IE8 – IE9 特殊案例前端要另外處理,使用 jQuery 1.5 以上版本可以外掛這款

jQuery-ajaxTransport-XDomainRequest

然後特別注意以下幾種案例:

  1. HTTP://s1.mxp.tw 向->請求 HTTP://s2.mxp.tw (支援)

  2. HTTP://s1.mxp.tw 向->請求 HTTPS://s2.mxp.tw (不支援)

  3. HTTPS://s1.mxp.tw 向->請求 HTTPS://s2.mxp.tw (某種程度支援)

  4. HTTPS://s1.mxp.tw 向->請求 HTTP://s2.mxp.tw (不支援)

其中案例3,經過測試在一般 Domain Validation 的憑證下是可以使用GET & POST方法,但是 Symantec Class 3 EV SSL SGC CA 的憑證下GET方法OK,POST方法會回傳 ERR_INSECURE_RESPONSE 錯誤,無法使用,關於這點的原因還在查,不確定是否因為憑證等級不同而造成服務請求上的限制,為了避免驗收要過兩次,這次的方法還是改成支援GET方法傳資料保險!

Facebook 功能:

Share: