跨域解決方案等一些問題(jsonp,nginx代理等)

1. 用jsonp跨域須要後臺修改代碼

後臺須要用前臺傳遞的函數名將數據包起來,本質上是一個函數調用,將數據當作參數傳遞回來。ajax

callback({"data": "ok"})

因此普通的ajax請求產生的數據不能用jsonp去請求;
可是一個接口也能夠同時支持普通的ajax請求(返回json對象),和jsonp請求(返回一串js代碼),這須要後臺和前臺約定好一個參數做爲函數名,如callback=cb,後臺判斷是否有這個參數,若是有這個參數就返回jsonp請求。json

2. jsonp的弊端

  1. 服務器須要改動代碼;
  2. 只支持get請求;

因此如今不多用了。跨域

3. 跨域請求帶上cookie

通常的ajax請求都會默認帶上cookie,可是跨域默認不會帶cookie,要帶上cookie必須加一行代碼;服務器

$.ajax({
        url : 'http://remote.domain.com/corsrequest',
        data : data,
        dataType: 'json',
        type : 'POST',
        xhrFields: {
            withCredentials: true
        },
        ...

4. 帶cookie的跨域

  • 後臺不能將Access-Control-Allow-Origin設置爲*
  • 設置Access-Control-Allow-Credentials: true
相關文章
相關標籤/搜索