Python框架Django解决跨域API调用问题

前几天,在做质量度量平台时(Python框架Django开发),跨域调用的问题,我前面有一个做法是,在本地server中增加一个API,这个API的功能是远程请求一个API并解析数据,这样浏览器访问本系统时只需要调用同域名下新增加的这个API即可,不存在跨域问题。不过,这次我想直接在AngularJS中调用跨域的远程API。

解决跨域问题,有两个方法:1.使用jsonp 2.使CORS生效

使用jsonp方法,需要让服务器端放回jsonp格式的response,如Django可以加jsonp相关的decorator,如:https://coderwall.com/p/k8vb_a/returning-json-jsonp-from-a-django-view-with-a-little-decorator-help
由于我不太喜欢这种方式,所以这里略过了,可看后面的参考资料。

使用CORS:这个用起来比较方便,现在大多数浏览器都支持了,且我web服务器完全开放给别人调用,所以比较推荐CORS。
首先,CORS是什么?
Cross-Origin Resource Sharing (CORS) is a specification that enables truly open access across domain-boundaries. If you serve public content, please consider using CORS to open it up for universal JavaScript/browser access.
其实,在服务器的response header中,加入“Access-Control-Allow-Origin: *”即可支持CORS,非常的简单,apache/nginx等怎么配置,见参考文档。

在Django中,也有人开发了CORS-header的middleware,只在settings.py中做一些简单的配置即可,见:https://github.com/ottoyiu/django-cors-headers/
现在用起来服务器端完全开放,开启CORS,没有跨域烦恼,真爽!~

时间: 2024-09-17 03:19:18

Python框架Django解决跨域API调用问题的相关文章

ASP.NET配合jQuery解决跨域调用的问题_实用技巧

一. 使用JSONp方式调用 不做详细讲解,可以参考jq文档<jQuery 1.10.3 在线手册> 二. 服务端配置 修改Web.config 文件 <system.webServer> <modules runAllManagedModulesForAllRequests="true"></modules> <httpProtocol> <customHeaders> <add name="Ac

使用Jsonp解决跨域数据访问问题

简介 符合Web2.0特征的众多网站一个明显的特点就是采用Ajax.Ajax提供了在后台提交请求访问数据的功能.其实现主要使用的是XMLHttpRequest函数,这个函数允许客户端的Javascript 发送到服务器端的HTTP请求并获得返回数据.Ajax同时也是目前众多的Mashup背后的驱动力量,他们都利用Ajax来聚合不同来源的信息. 理解同源策略的限制 同源策略是指阻止代码获得或者更改从另一个域名下获得的文件或者信息.也就是说我们的请求地址必须和当前网站的地指相同.同源策略通过隔离来实

js前端解决跨域问题的8种方案(最新最全)_javascript技巧

1.同源策略如下: URL 说明 是否允许通信 http://www.a.com/a.jshttp://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a.jshttp://www.a.com/script/b.js 同一域名下不同文件夹 允许 http://www.a.com:8000/a.js http://www.a.com/b.js 同一域名,不同端口 不允许 http://www.a.com/a.js https://www.a.com/b.j

纯前端解决跨域问题

背景 跨域是由浏览器的同源策略引起的,是指页面请求的url地址,必须与浏览器上的url地址处于同域上(即域名,端口,协议相同). 这是为了防止某域名下的接口被其他域名下的网页非法调用,是浏览器对JavaScript施加的安全限制. 这个措施的出发点是好的,但是程序页面开发的过程中,却常常给前端开发者带来麻烦. 由于前端开发过程中,静态资源是放在本地电脑上的,访问这些资源通常通过IP方式(127.0.0.1)或者localhosts来访问,与线上服务器所在域名不符,不能顺利调用服务的端口. 解决跨

一步一步学习SignalR进行实时通信_3_通过CORS解决跨域

原文:一步一步学习SignalR进行实时通信_3_通过CORS解决跨域 一步一步学习SignalR进行实时通信\_3_通过CORS解决跨域 SignalR 一步一步学习SignalR进行实时通信_3_通过CORS解决跨域 前言 关于start()的补充 跨域解决方案 JSONP CORS CORS跨域演示 结束语 参考文献 前言 这周工作比较忙,一直没有时间学习SignalR,大致希望一周能写一篇关于SignalR的文章.上一篇用Persistent Connections方式实现了个简单的在线

js中利用JSONP解决跨域问题

什么是跨域? 简单的来说,出于安全方面的考虑,javascript不能访问其他服务器上的内容,即"同源策略"(参考1,参考2).跨域就是通过某种手段绕过同源策略去访问不同服务器上的内容.只要域名.端口.协议任何一个不同,就是不同的域.协议或端口不同只能通过后端来解决. URL 说明 是否允许通信 http://www.a.com/a.js http://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a.js http://www.a.com/

window.name解决跨域数据传输问题

原文:http://research.microsoft.com/~helenw/papers/subspace.pdf window.name 传输技术,原本是 Thomas Frank 用于解决 cookie 的一些劣势(每个域名 4 x 20 Kb 的限制.数据只能是字符串.设置和获取 cookie 语法的复杂等等)而发明的(详细见原文:<Session variables without cookies>),后来 Kris Zyp 在此方法的基础上强化了 window.name 传输

在liferay中用serveResource解决跨域访问问题

简介: 众所周知,跨域问题是十分常见的需求,比如让客户端的ext-js控件可以渲染来自服务器端的json对象.我们可以用很多很多方法来解决,比如jsonP.但是,在liferay中,我们可以用serveResource方法来优雅的解决跨域访问问题. 白板分析: 以下是摘自我在技术讨论会上的白板: 解决方法: 首先编写一段serveResource方法,让其和远端的json对象打交道,它作为中间层可以封装来在远程的json资源,然后提供给本域内的ext-js代码来渲染. 当然了,这里我们的资源必须

node js-php应用80端口,使用node.js通过8888端口实现即时推送,怎么解决跨域问题?

问题描述 php应用80端口,使用node.js通过8888端口实现即时推送,怎么解决跨域问题? 项目背景是一个php应用.为了加入即时推送功能,使用node.js写了8888端口用于推送即时消息,并使用socket.io进行数据传输. 如何解决80端口应用页面跨域与8888端口建立socket连接问题?