跨域請求方式,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,並將所要返回的值用小括號括起來。

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