python解决跨域,python之路_Cores解决跨域请求

三、服务端解决跨域请求

上述我们介绍了如何在客户端解决跨域请求问题,同样我们可以在服务端进行设置处理,是否还记得在我们不做任何处理的时候,跨域请求时候浏览器给我们报的错误不?如下,翻译过来就是因为相应头没有指定Access-Control-Allow-Origin所允许原始的请求路径,因此原始请求路径http://127.0.0.1:8001不被允许访问。

e369817955d20af25340e504fd783e9c964.jpg

基于上述的原因解释,我们只需要在响应的内容加入上述这样的授权字段,便可解决,实例如下:

项目1客户端请求代码:(路径为:http://127.0.0.1:8001)

$.ajax({

url:"http://127.0.0.1:8002/send_ajax/",

success:function(data) {

alert(data);

console.log(data)

}

})

});

项目2服务端被请求的路径:

defsend_ajax(request):importjson

dic={"k1":"v1"}print("ok")

response=HttpResponse(json.dumps(dic))

response["Access-Control-Allow-Origin"]="http://127.0.0.1:8001"

return response

如上方式,在服务端相应内容中加入response["Access-Control-Allow-Origin"]="http://127.0.0.1:8001"字段后,http://127.0.0.1:8001路径就可以跨域请求此路径下的内容,如果将其设置成response["Access-Control-Allow-Origin"]="*"表示所有的客户端都可以请求此服务器下此路径。

上述这种方式虽然在服务端解决了跨域请求的问题,但是通过上述设置方式,显然不灵活,我们应该访问路径的实际情况进行判断,然后再决定要不要给其跨域返回内容,解决办法可以将服务器代码改为如下:

defsend_ajax(request):importjson

dic={"k1":"v1"}

HttpOrigins=["http://127.0.0.1:8001","http://127.0.0.1:8003","http://127.0.0.1:8005"]print(request.META.get("HTTP_ORIGIN")) #可以取得请求路径的origin

HttpOrigin=request.META.get("HTTP_ORIGIN")if HttpOrigin inHttpOrigins:

response=HttpResponse(json.dumps(dic))

response["Access-Control-Allow-Origin"]=HttpOriginreturn response

PS:

上述讲述的都是基于get请求的情况,假如我们在客户端利用PUT形式进行请求,因为put请求属于上传文件的请求方式,而http协议对此请求方式未做验证,即请求便能成功,显然不合理,所以浏览器给给其增加了预检,即put请求提交时,客户端实际提交的请求方式为OPTIONS,只有在服务端对其进行了验证后,才会继续提交正真put请求。上述的服务端跨域put形式请求可以改写为如下:

defsend_ajax(request):if request.method=="OPTIONS":#预检

response=HttpResponse()

response["Access-Control-Allow-Methods"]="PUT"response["Access-Control-Allow-Origin"] = "http://127.0.0.1:8001"

returnresponseelif request.method=="PUT":importjson

dic= {"k1": "v1"}

response=HttpResponse(json.dumps(dic))

response["Access-Control-Allow-Origin"] = "http://127.0.0.1:8001"

return response

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值