跨域 :跨域是指由于同源策略的原因,浏览器不能执行其他网站的脚本。
同源 :域名,协议,端口均相同
jsonp
jsonp是利用html中src属性不受跨域影响的特点来实现的。如html中<script>调用jquery,<img>加载图片等,都不受同源策略的影响。
jsonp只支持get请求。
<script type="text/javascript">
var show_data = function(data){
alert(data);
};
</script>
<script src="http://demo.com?callback=show_data"></script>
<script>
$.ajax({
type : 'get',
url:'http://demo.com',
data : {name : name},
cache :false,
// 回调函数名的参数名(默认callback)
// jsonp: "callback",
// 指定处理函数(默认success)
// jsonpCallback:"success",
dataType : 'jsonp',
success:function(data){
alert(data);
},
error:function(data){
alert('error');
}
})
</script>
cors
服务端处理跨域,用户端正常请求.
服务端对跨域名,请求头,请求方法添加限制
response['Access-Control-Allow-Origin'] = '*' #允许的跨域名
response['Access-Control-Allow-Headers'] = 'h1' #允许的请求头
response['Access-Control-Allow-Methods'] = 'PUT' #允许的请求方法
django-cors
pip install django-cors-headers
install_apps中添加corsheaders
middleware中添加'corsheaders.middleware.CorsMiddleware'
(在csrf之前
)
然后进行跨域处理配置
- CORS_ORIGIN_ALLOW_ALL 默认false,使用白名单配置。true为准许所有
- CORS_ORIGIN_WHITELIST 白名单列表
- CORS_ORIGIN_REGEX_WHITELIST 白名单列表(正则匹配模式)
- CORS_URLS_REGEX 正则限制发送cors标头的url
- CORS_ALLOW_METHODS 准许的http方式
- CORS_ALLOW_HEADERS http标头列表
- CORS_EXPOSE_HEADERS 向浏览器公开的http标头列表