一、jsonp方式
同源策略会阻止ajaxa请求,但不阻止src。
jsonp方式其实是利用了<script>标签可以直接跨域的性质,在body中生成一个<script>标签,然后通过个这标签发送请求并拿到数据。
<script> $.ajax({ url:"xxxxxxx", type:"GET", dataType:"jsonp", jsonp:"callbacks" #给跨域的返回数据的键 //jsonpCallbacks:"xxx" #给定的返回函数的函数名 success:function(arg){ console.log(arg) } }) </script>
二、cors方式
跨域的两种原因:域名不同或端口不同
默认发送请求时只发送了一个响应体,cores解决跨域的本质是添加一个响应头。
(1)单个请求
response = HttpResponse(") response["Access-Control-Allow-Origin"] = "xxxx" #发送请求的urlIP和端口
(2)全局(中间件)
class CORESMiddleware(MiddlewareMixin): def process_response(self,request,response): #添加响应头 response["Access-Control-Allow-Origin"] = "http://xxxxx,http://xxxxx" #表示允许这些域名跨域访问,如果对所有域名开放,则使用*号 #如果是复杂请求 response["Access-Control-Allow-Header"] = "Content-Type,xxx" #不能使用*号 #允许某些方法 response["Access-Control-Allow-Method"] = "DELETE,PUT" return response
复杂请求会首先发送一个OPTIONS请求,进行预检。