| 導語
手Q馬上就要全量https了,很多業務都有跨域ajax請求的需求,原來使用的CORS頭在HTTPS環境中還繼續能用嗎?我搜遍了谷歌、百度,都沒看到有明確的答案,那么就自己來嘗試一下吧。
關於CORS在HTTPS環境下到底效果如何,一直沒找到明確的答案。在MDN等網頁只能看到CORS是解決HTTP跨域的方案,或者HTTP訪問HTTPS/HTTPS訪問HTTP都屬於跨域范圍,但沒有人提到兩個HTTPS站點能否通過CORS互相訪問。那么,就自己動手吧。
首先,使用nodejs搭建一個https服務器。
而搭建https服務器前,我們需要先手工搞個證書。
具體可以使用openssl自行創建,我參考的是:https://cnodejs.org/topic/54745ac22804a0997d38b32d
然后代碼跑起來
const https = require('https'); const fs = require('fs'); const options = { key: fs.readFileSync('./cert/ca-key.pem'), cert: fs.readFileSync('./cert/ca-cert.pem'), passphrase: '123456' }; https.createServer(options, function (req, res) { res.writeHead(200); res.end(fs.readFileSync('./https.html')); }).listen(443);
頁面代碼
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <script> /* Zepto v1.2.0 - zepto event ajax form ie - zeptojs.com/license */ //這里省略10000字節的代碼,自行補充吧 </script> <script> $.get('//imgcache.qq.com/zzapp/health/js/config/qqhealth_score_strategy.json', function (ret) { console.log(ret); }); </script> </body> </html>
這次測試的域名是weather.mp.qq.com,ajax訪問的域名是imgcache.qq.com,原來http時代,已經做好了cors授權了。
那么運行后,能看到打印的json信息,就表示正常訪問。
好了,等了半天,估計大家只需要一個答案:OK,正常訪問。