跨域请求方式,jsonp,cors,ajax

同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现
请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同.
端口不一样就说明跨域了被拦截了,

说明他不是同源,被拦截了
方法一: get 和post 请求都支持
cors 跨域资源共享:
pip install django-cors-headers 0.1
在setting 里面配置:
CORS_ORIGIN_ALLOW_ALL = True
‘corsheaders.middleware.CorsMiddleware’,
‘corsheaders’,
方法二:
在 views 视图添加一行代码:
response[“Access-Control-Allow-Origin”] = “*”
方法三 jsonp 仅支持get 请求
get_info = request.GET
callback = get_info.get(‘callback’)
if get_info.has_key(‘callback’):
print ‘=========’
return HttpResponse(callback+"("+data+")",mimetype=‘application/javascript’)
下面给一个post 的请求的demo
1 创建两个django 项目,一个是ajax 请求api

index.html :

调用api 的api

跨域请求是为了解决同源策略

出现这种问题,需要跨域请求。
jsonp 是json 用来的跨域的东西

浏览器跨域请求–> jsonp (跨域 get)
假设返回给客户端的数据是 {“a”:111, “b”:234}
正常请求:
http://a.gongchang.com/getlist/
返回的数据是 {“a”:111, “b”:234}

跨域请求:
http://a.gongchang.com/getlist?callback=dosomething
返回的数据是 dosomething({“a”:111, “b”:234})

跨域请求必须有一个参数 callback
在 服务器端 获取 callback,并将需要传递的值以 callback(值) 的形式返回给客户端

因为要返回给客户端的是 cookies 中的值,所以先判断是否存在该 cookie,不存在则返回空串;存在的话,将该键值对 json 序列化。
返回时,判断是否是跨域请求 ,不是跨域请求,则正常返回数据;跨域请求则需要加上 callback,并将所要返回的值用小括号括起来。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章