先來看乙個例子
定義server01
的專案,在路由表中新增一條路由記錄
url(r'^getdata.html$',views.get_data)
對應的檢視函式
定義server02
專案,在路由表中新增一條路由記錄
url(r'^index.html/',views.index),
對應的檢視函式
from django.shortcuts import render
def index(request):
return render(request,"index.html")
對應的index.html檔案
執行server01
專案,使用8100埠
開啟server02的index.html
網頁,可以看到如下資訊
傳送這個請求使用的是get
方法.如果把server02的index.html網頁中設定為使用put
方法傳送請求,會看到什麼情況呢?
把index.html
中的請求方法修改為put
,然後重新整理瀏覽器
可以看到網頁上顯示的request method變成了options
,可是在網頁中宣告的請求方法是put
呀
為什麼會出現這樣的情況呢???這就涉及到簡單請求
和非簡單請求
了.
簡單請求就是使用設定的請求方式請求資料
而非簡單請求則是在使用設定的請求方式請求資料之前,先傳送乙個options請求,看服務端是否允許客戶端傳送非簡單請求.
只有"預檢"通過後才會再傳送一次請求用於資料傳輸
簡單請求與非簡單請求的區別
* 請求方式:head,get,post
* 請求頭資訊:
accept
accept-language
content-language
last-event-id
content-type 對應的值是以下三個中的任意乙個
multipart/form-data
text/plain
只有同時滿足以上兩個條件時,才是簡單請求,否則為非簡單請求
如果在上面的例子中,在server01中設定響應頭,
再次重新整理網頁,可以看到
先傳送的是options請求
,第二次傳送的是put請求
,而且獲取到目標字串.
由此得知,對於非簡單請求,客戶端以put
方式請求資料,服務端的"預檢"裡邊一定要包含允許客戶端使用非簡單方式請求資料的響應頭
「預檢」請求時,允許請求方式則需伺服器設定響應頭:access-control-request-method
「預檢」請求時,允許請求頭則需伺服器設定響應頭:access-control-request-headers
「預檢」快取時間,伺服器設定響應頭:access-control-max-age
雖然可以通過設定響應頭和響應方式等支援非簡單請求,但是不到萬不得已的情況,不能允許客戶端傳送非簡單請求.
因為非簡單請求會使伺服器比簡單請求的多一倍的壓力.
CORS跨域請求之簡單請求與非簡單請求
先來看乙個例子 定義 server01 的專案,在路由表中新增一條路由記錄 url r getdata.html views.get data 對應的檢視函式 定義 server02 專案,在路由表中新增一條路由記錄 url r index.html views.index 對應的檢視函式 from...
CORS跨域簡單請求與非簡單請求
sr post get head nsr put delete sr one step 瀏覽器直接發出cors請求,並在頭部攜帶乙個origin欄位,伺服器根據這個值決定是否同意請求 origin 說明請求來自哪個源,包括協議 網域名稱 埠 host api.eurus.com nsr one st...
CORS跨域請求
瀏覽器的同源策略會導致跨域,這裡同源策略又分為以下兩種 只要協議 網域名稱 埠有任何乙個不同,都被當作是不同的域,之間的請求就是跨域操作。在同源策略下會禁止跨域,實際上跨域請求時,請求會向伺服器發出,伺服器也會進行響應,但是當收到返回的資料時發現跨域所以忽略了返回的內容並報錯。當請求同時滿足下面兩個...