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

相关文章
相关标签/搜索