跨域Ajax -- jsonp和cors

时间:2022-12-18 11:01:55
跨域Ajax
- jsonp
- cors

参考博客:
http://www.cnblogs.com/wupeiqi/articles/5703697.html
http://www.cnblogs.com/wupeiqi/articles/5369773.html

JSONP
网站:
- requests发请求时,跨域无限制
- ajax发请求时,浏览器限制【是否可以绕过限制?】

如何绕过浏览器的同源策略?
- ajax,受同源策略限制。
- img,script,iframe,不受同源策略限制。

- JSONP:
	本地:先定义函数
	远程:func("数据")
	
	方式一:手动
			/*
			function funcvvvvvv(arg) {
				alert(arg);

				document.head.removeChild(tag);
			}

			function jsonp(url){
				tag = document.createElement('script');
				tag.src = url;
				document.head.appendChild(tag);
			}*/
	方式二:调用jQuery
			function Jsonp2(){
				$.ajax({
					url: "http://127.0.0.1:8000/get_data.html",
					type: 'GET',
					dataType: 'JSONP',
					success: function(data){
						console.log(data);
					}
				})
			}
	本质:创建script标签	

	编写跨域请求:
		本地:
			
			function list666(arg){
			
			}
			
			$.ajax({
				url: "http://www.jxntv.cn/data/jmd-jxtv2.html",
				type: 'GET',
				dataType: 'JSONP',
				jsonp: 'callback',
				jsonpCallback: 'list666'
			})
			
		远程:
			func_name = request.GET.get('callback')
			return HttpResponse('%s("机密数据")' %func_name)
			
	应用场景:
		 你,调用者
		CEO,服务商,提供API
		
		- JSONP交互
		- requests模块
		
		
		用户,调用者
		  你,服务商,提供API
		  
		  专业:获取用户请求callback,func(内容)
	
	JSONP是否可以发送POST请求?

CORS
本地:无作为
远程:设置响应头
response['Access-Control-Allow-Origin'] = "http://127.0.0.1:8888"
response['Access-Control-Allow-Methods'] = "PUT"
response['Access-Control-Allow-Headers'] = "xxx"