CORS(跨域資源共享)是指瀏覽器和服務器之間解決跨域訪問的一種機制。在前端開發中,我們常常使用AJAX技術來獲取服務端的JSON數據進行渲染,但是由于瀏覽器的同源策略限制,我們會面臨跨域問題。
解決跨域問題的一種方式是使用JSONP,但是它有缺陷,比如只支持GET請求,不支持POST請求等。另一種方式是使用CORS,這里我們主要介紹CORS的方式來實現跨域訪問。
給服務器返回響應頭access-control-allow-origin來允許前端的請求跨域。在HTTP響應頭中增加一個Access-Control-Allow-Origin參數,其值可以是“*”或者前端請求地址,代表著允許所有域名訪問 或者 允許某個域請求。比如:
Access-Control-Allow-Origin: *
對于復雜請求,還需要在響應頭增加下面兩個參數來允許前端的請求跨域:
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept Access-Control-Allow-Methods: GET, POST, OPTIONS
其中Access-Control-Allow-Headers定義了允許跨域請求的特定HTTP標頭字段列表,Access-Control-Allow-Methods定義允許的請求方法(例如GET、POST或OPTIONS)。
最后,前端在發出跨域請求時需要將請求方式設為OPTIONS,然后在響應頭里獲取到服務器對cors json option 的設置:
fetch(url, { method: 'OPTIONS', headers: { 'Content-Type': 'application/json' } }) .then((response) =>{ console.log(response.headers.get('Access-Control-Allow-Origin')); console.log(response.headers.get('Access-Control-Allow-Headers')); console.log(response.headers.get('Access-Control-Allow-Methods')); });
這樣,我們便可以使用CORS跨域訪問服務器中的JSON數據。
上一篇cpp寫入json
下一篇clojure json