Python全棧之路-Django(十七)

1 JSONP原理剖析

解決瀏覽器對ajax存在同源策略,可是對script的src屬性不限制ajax

開發需求:向其餘網站發送Http請求獲取數據json

  • 瀏覽器直接發送請求(考慮同源)
  • 服務器代替用戶發送請求(不考慮同源)

1.1 JSONP要求:

  • 客戶端
URL?callback=xxx
function xxx(arg){}
  • 服務端
獲取funcname = request.GET.get(callback)
返回funcname(...)

1.2 JSONP使用

1.本身寫動態建立script跨域

function getUsers(){
     var tag = document.createElement('script');
    tag.src = 'http://www.s4.com:8001/users/?callback=list';
    document.head.appendChild(tag);
}

2.jQuery瀏覽器

$.ajax({
    url: 'http://www.s4.com:8001/users/',
    type: 'GET',
    dataType: 'JSONP',
    jsonp: 'funcname',
    jsonpCallback: 'bbb'
})

1.3 JSONP總結

  • 只能發GET請求
  • 約定

JSONP是一種方式,目的解決跨域問題服務器

2 CORS

簡單請求:app

def new_users(request):
    obj = HttpResponse('返回內容')
    obj['Access-Control-Allow-Origin'] = "*"
    return obj

複雜請求:cors

def new_users(request):

    if request.method == "OPTIONS":
        obj = HttpResponse()
        obj['Access-Control-Allow-Origin'] = "*"
        obj['Access-Control-Allow-Methods'] = "DELETE"
        return obj

    obj = HttpResponse('asdfasdf')
    obj['Access-Control-Allow-Origin'] = "*"
    return obj

其餘:CORS能夠處理任何請求,JSONP只能處理GET請求jsonp

相關文章
相關標籤/搜索