什麼是同源/跨域?什麼是CORS?什麼是JSONP?

什麼是跨域?

跨域,指的是瀏覽器不能執行其餘網站的腳本。它是由瀏覽器的同源策略形成的,是瀏覽器施加的安全限制。php

同源又是什麼呢?

所謂同源是指,域名,協議,端口均相同。
如:
http://www.abc.com/index.html 調用 http://www.abc.com/server.php (非跨域)html

http://www.abc.com/index.html 調用 http://www.bcd.com/server.php (主域名不一樣:abc/bcd,跨域)後端

http://abc.123.com/index.html 調用 http://bcd.123.com/server.php (子域名不一樣:abc/bcd,跨域)跨域

http://www.abc.com:8080/index.html 調用 http://www.abc.com:8081/server.php (端口不一樣:8080/8081,跨域)瀏覽器

http://www.abc.com/index.html 調用 https://www.abc.com/server.php (協議不一樣:http/https,跨域)安全

什麼是CORS?

查閱mdn關於CORS可知,跨域資源共享(CORS) 是一種機制,它使用額外的 HTTP 頭來告訴瀏覽器 讓運行在一個 origin (domain) 上的Web應用被准許訪問來自不一樣源服務器上的指定的資源。當一個資源從與該資源自己所在的服務器不一樣的域、協議或端口請求一個資源時,資源會發起一個跨域 HTTP 請求。服務器

什麼是JSONP?

JSONP就能夠解決跨域問題。JSONP是網頁經過動態建立<script>元素向服務器發起請求,當服務器接收到請求後,將數據放在一個指定名字的回調函數裏傳回來。而正所以<script>只能GET不能POST,JSONP也只能GET不能POST。dom

解決跨域問題

  1. JSONP
  2. 代理
    例如www.abc.com/index.html須要調用www.bcd.com/server.php,能夠寫一個接口www.abc.com/server.php,由這個接口在後端去調用www.bcd.com/server.php並拿到返回值,而後再返回給index.html,這就是一個代理的模式。至關於繞過了瀏覽器端,天然就不存在跨域問題。
  3. PHP端修改header(XHR2方式)

    在php接口腳本中加入如下兩句便可:函數

header('Access-Control-Allow-Origin:*');//容許全部來源訪問
    header('Access-Control-Allow-Method:POST,GET');//容許訪問的方式
相關文章
相關標籤/搜索