CORS跨域請求之簡單請求與非簡單請求

2021-09-24 10:31:57 字數 2982 閱讀 8095

先來看乙個例子

定義 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跨域請求

瀏覽器的同源策略會導致跨域,這裡同源策略又分為以下兩種 只要協議 網域名稱 埠有任何乙個不同,都被當作是不同的域,之間的請求就是跨域操作。在同源策略下會禁止跨域,實際上跨域請求時,請求會向伺服器發出,伺服器也會進行響應,但是當收到返回的資料時發現跨域所以忽略了返回的內容並報錯。當請求同時滿足下面兩個...