先來看乙個例子
定義 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檔案
lang
="en"
>
>
charset
="utf-8"
>
>
titletitle
>
head
>
>
>
server----002h1
>
src=
"/static/jquery-3.2.1.js"
>
script
>
>
$.ajax(}
)script
>
body
>
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 dja...
CORS跨域簡單請求與非簡單請求
sr post get head nsr put delete sr one step 瀏覽器直接發出cors請求,並在頭部攜帶乙個origin欄位,伺服器根據這個值決定是否同意請求 origin 說明請求來自哪個源,包括協議 網域名稱 埠 host api.eurus.com nsr one st...
CORS跨域請求
瀏覽器的同源策略會導致跨域,這裡同源策略又分為以下兩種 只要協議 網域名稱 埠有任何乙個不同,都被當作是不同的域,之間的請求就是跨域操作。在同源策略下會禁止跨域,實際上跨域請求時,請求會向伺服器發出,伺服器也會進行響應,但是當收到返回的資料時發現跨域所以忽略了返回的內容並報錯。當請求同時滿足下面兩個...