欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

options預(yù)檢請(qǐng)求的前后端解決方式詳解

 更新時(shí)間:2023年04月24日 14:31:19   作者:地霊殿__三無  
這篇文章主要為大家介紹了options預(yù)檢請(qǐng)求的前后端解決方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、前言

最近在試玩openai,發(fā)送請(qǐng)求的時(shí)候,總是會(huì)看見一個(gè)options請(qǐng)求,這請(qǐng)求有什么意義或者作用,為什么每次調(diào)用openai的api總是會(huì)先發(fā)起option請(qǐng)求呢?

好奇心驅(qū)使著我去探索它,揭開它的神秘面紗。

二、請(qǐng)求的分類

這件事還要從瀏覽器說起,基本上我們的請(qǐng)求都是CORS跨域請(qǐng)求(前后端分離嘛,基本上部署位置的IP\端口\協(xié)議不可能完全相同,所以就屬于跨域了),CORS跨域請(qǐng)求需要瀏覽器和服務(wù)器同時(shí)支持。目前,所有瀏覽器都支持該功能,IE瀏覽器不能低于IE10。

而CORS跨域請(qǐng)求,又分成簡(jiǎn)單請(qǐng)求simple request, 和復(fù)雜請(qǐng)求not-so-simple request。

復(fù)雜請(qǐng)求就會(huì)觸發(fā)我們的options預(yù)檢請(qǐng)求,這是符合以下規(guī)范的。

跨域共享標(biāo)準(zhǔn)規(guī)范要求,對(duì)那些可能對(duì)服務(wù)器數(shù)據(jù)產(chǎn)生副作用的 HTTP 請(qǐng)求方法
(特別是 GET 以外的 HTTP 請(qǐng)求,或者搭配某些 MIME 類型的 POST 請(qǐng)求),
瀏覽器必須首先使用 OPTIONS 方法發(fā)起一個(gè)預(yù)檢請(qǐng)求(preflight request),
從而獲知服務(wù)端是否允許該跨域請(qǐng)求。服務(wù)器確認(rèn)允許之后,才發(fā)起實(shí)際的 HTTP 請(qǐng)求。

1、簡(jiǎn)單請(qǐng)求的定義

(1)請(qǐng)求方式為`GET、HEAD、POST`時(shí)的請(qǐng)求;
(2)認(rèn)為設(shè)置規(guī)范集合之內(nèi)的首部字段,
    如`
    Accept/
    Accept-Language/
    Content-Language/
    Content-Type/
    DPR/
    Downlink/
    Save-Data/
    Viewport-Width/
    Width`;
(3)Content-Type 的值僅限于下列三者之一,即`
    application/x-www-form-urlencoded、
    multipart/form-data、
    text/plain`;
(4)請(qǐng)求中的任意 `XMLHttpRequestUpload`對(duì)象均沒有注冊(cè)任何事件監(jiān)聽器;
(5)請(qǐng)求中沒有使用 `ReadableStream`對(duì)象。

2、復(fù)雜請(qǐng)求的定義

除了上面的以外的請(qǐng)求,基本上都是復(fù)雜請(qǐng)求。

比如自定義的token、Authorization等請(qǐng)求頭字段,或者是PUT、DELETE等請(qǐng)求方式。

3、預(yù)檢帶來的小問題

因?yàn)轭A(yù)檢,會(huì)額外占用服務(wù)器資源,還會(huì)延遲真正請(qǐng)求的發(fā)起時(shí)間,導(dǎo)致頁面上性能變差(這一點(diǎn)在使用openai的api深有體會(huì),因?yàn)槭菄?guó)外服務(wù)器,加上預(yù)檢,基本上每次都要返回好久)。

4、解決方式

解決方式可以從前端或者后端入手,選其一就可以了,除了以下方法,可能還有其他的解決方式。

(1)前端的解決方式

// 引入
import qs from 'qs'
// 然后在請(qǐng)求攔截器的部分
axios.interceptors.request.use((config) => {
  if(config.method  === 'post'){
    config.data = qs.stringify(config.data);
  }
  return config;
},(error) =>{
  return Promise.reject(error);
});

如下,從json格式變成了string字符串,后端獲取后需要重新格式化一下才能用。

 // qs.stringify 前
 config.data = {
     "userId": "520b0ec3229",
     "startTime": "15489504",
     "endTime": "1559999"
 }
 // qs.stringify 后,內(nèi)容變?yōu)?
 "userId=520b0ec3229&startTime=15489504&endTime=1559999"

(2)后端的解決方式一

服務(wù)器端設(shè)置 Access-Control-Max-Age 字段,瀏覽器會(huì)根據(jù)返回的

Access-Control-Max-Age 字段緩存該請(qǐng)求的 OPTIONS 預(yù)檢請(qǐng)求的響應(yīng)結(jié)果。

設(shè)置大點(diǎn)就可以了

比如設(shè)置30天,那就觸發(fā)一次預(yù)檢后,后續(xù)30天內(nèi),同一請(qǐng)求源頭不會(huì)再次觸發(fā)預(yù)檢請(qǐng)求。

// 后端設(shè)置,2592000單位秒,這里是30天
response.addHeader( "Access-Control-Max-Age", "2592000" )

(3) 后端解決方式二

access-control-allow-origin: *;

這種比較危險(xiǎn),因?yàn)樵试S了所有網(wǎng)站都可以跨域共享資源。

可以把*改為具體的網(wǎng)址源,也就是白名單。

以上就是options預(yù)檢請(qǐng)求的詳細(xì)內(nèi)容,更多關(guān)于options預(yù)檢請(qǐng)求的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • js比較兩個(gè)單獨(dú)的數(shù)組或?qū)ο笫欠裣嗟鹊膶?shí)例代碼

    js比較兩個(gè)單獨(dú)的數(shù)組或?qū)ο笫欠裣嗟鹊膶?shí)例代碼

    本文通過實(shí)例代碼給大家介紹了js比較兩個(gè)單獨(dú)的數(shù)組或?qū)ο笫欠裣嗟?,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • javascript彈出層輸入框(示例代碼)

    javascript彈出層輸入框(示例代碼)

    這篇文章主要介紹了javascript彈出層輸入框(示例代碼)。需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2013-12-12
  • 微信小程序支付前端源碼

    微信小程序支付前端源碼

    這篇文章主要為大家詳細(xì)介紹了微信小程序支付前端源碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 淺談js里面的InttoStr和StrtoInt

    淺談js里面的InttoStr和StrtoInt

    下面小編就為大家?guī)硪黄獪\談js里面的InttoStr和StrtoInt。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • JavaScript Date對(duì)象詳解及時(shí)間戳和時(shí)間的相互轉(zhuǎn)換問題

    JavaScript Date對(duì)象詳解及時(shí)間戳和時(shí)間的相互轉(zhuǎn)換問題

    這篇文章主要介紹了JavaScript Date對(duì)象詳解及時(shí)間戳和時(shí)間的相互轉(zhuǎn)換問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • JavaScript將坐標(biāo)字符串轉(zhuǎn)為數(shù)組的項(xiàng)目實(shí)踐

    JavaScript將坐標(biāo)字符串轉(zhuǎn)為數(shù)組的項(xiàng)目實(shí)踐

    本文主要介紹了JavaScript將坐標(biāo)字符串轉(zhuǎn)為數(shù)組的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • 基于javascript實(shí)現(xiàn)listbox左右移動(dòng)

    基于javascript實(shí)現(xiàn)listbox左右移動(dòng)

    這篇文章主要介紹了基于javascript實(shí)現(xiàn)listbox左右移動(dòng)的相關(guān)資料,以一個(gè)完整的實(shí)例代碼分析了js實(shí)現(xiàn)listbox左右移動(dòng)的相關(guān)技巧,感興趣的小伙伴們可以參考一下
    2016-01-01
  • JavaScript實(shí)現(xiàn)隨機(jī)點(diǎn)名器實(shí)例詳解

    JavaScript實(shí)現(xiàn)隨機(jī)點(diǎn)名器實(shí)例詳解

    這篇文章主要介紹了JavaScript隨機(jī)點(diǎn)名器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • TypeScript中import?type與import的區(qū)別詳析

    TypeScript中import?type與import的區(qū)別詳析

    ES6引入了模塊化,其設(shè)計(jì)思想是在編譯時(shí)就能確定模塊的依賴關(guān)系,以及輸入和輸出的變量,下面這篇文章主要給大家介紹了關(guān)于TypeScript中import?type與import區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • js中for in語句的用法講解

    js中for in語句的用法講解

    這篇文章主要介紹了js中for in語句的用法講解,本文用多個(gè)實(shí)例講解了for in語句的用法及適合場(chǎng)景,需要的朋友可以參考下
    2015-04-04

最新評(píng)論