Python全栈之路-Django(十七)

1 JSONP原理剖析

解决浏览器对ajax存在同源策略,但是对script的src属性不限制

开发需求:向其他网站发送Http请求获取数据

  • 浏览器直接发送请求(考虑同源)
  • 服务器代替用户发送请求(不考虑同源)

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

简单请求:

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

复杂请求:

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请求

posted on 2017-07-12 21:27  万越天  阅读(176)  评论(0编辑  收藏  举报