最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

options預檢請求的前后端解決方式詳解

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

一、前言

最近在試玩openai,發(fā)送請求的時候,總是會看見一個options請求,這請求有什么意義或者作用,為什么每次調用openai的api總是會先發(fā)起option請求呢?

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

二、請求的分類

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

而CORS跨域請求,又分成簡單請求simple request, 和復雜請求not-so-simple request。

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

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

1、簡單請求的定義

(1)請求方式為`GET、HEAD、POST`時的請求;
(2)認為設置規(guī)范集合之內的首部字段,
    如`
    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)請求中的任意 `XMLHttpRequestUpload`對象均沒有注冊任何事件監(jiān)聽器;
(5)請求中沒有使用 `ReadableStream`對象。

2、復雜請求的定義

除了上面的以外的請求,基本上都是復雜請求。

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

3、預檢帶來的小問題

因為預檢,會額外占用服務器資源,還會延遲真正請求的發(fā)起時間,導致頁面上性能變差(這一點在使用openai的api深有體會,因為是國外服務器,加上預檢,基本上每次都要返回好久)。

4、解決方式

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

(1)前端的解決方式

// 引入
import qs from 'qs'
// 然后在請求攔截器的部分
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 后,內容變?yōu)?
 "userId=520b0ec3229&startTime=15489504&endTime=1559999"

(2)后端的解決方式一

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

Access-Control-Max-Age 字段緩存該請求的 OPTIONS 預檢請求的響應結果。

設置大點就可以了

比如設置30天,那就觸發(fā)一次預檢后,后續(xù)30天內,同一請求源頭不會再次觸發(fā)預檢請求。

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

(3) 后端解決方式二

access-control-allow-origin: *;

這種比較危險,因為允許了所有網站都可以跨域共享資源。

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

以上就是options預檢請求的詳細內容,更多關于options預檢請求的資料請關注腳本之家其它相關文章!

相關文章

  • 微信小程序中實現(xiàn)車牌輸入功能

    微信小程序中實現(xiàn)車牌輸入功能

    我們都知道車牌是有一定規(guī)律的,本文實現(xiàn)了微信小程序中實現(xiàn)車牌輸入功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • JS實現(xiàn)炫酷輪播圖

    JS實現(xiàn)炫酷輪播圖

    這篇文章主要為大家詳細介紹了JS實現(xiàn)炫酷輪播圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • JavaScript常用變量聲明方式總結

    JavaScript常用變量聲明方式總結

    JavaScript中有幾種常用的變量聲明,例如:var、let、直接賦值和const?屬性,本文將為大家詳細介紹一下這四種方式的具體使用,需要的可以參考一下
    2023-06-06
  • ES2020系列之空值合并運算符 ''??''

    ES2020系列之空值合并運算符 ''??''

    這篇文章主要介紹了ES2020系列之空值合并運算符 '??',文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • bootstrap配合Masonry插件實現(xiàn)瀑布式布局

    bootstrap配合Masonry插件實現(xiàn)瀑布式布局

    這篇文章主要為大家詳細介紹了bootstrap配合Masonry插件實現(xiàn)瀑布式布局,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • javascript 觸發(fā)HTML元素綁定的函數(shù)

    javascript 觸發(fā)HTML元素綁定的函數(shù)

    只能觸發(fā)函數(shù)的執(zhí)行,并不能完全模擬出實際的點擊。
    2010-09-09
  • 原生js實現(xiàn)淘寶放大鏡效果

    原生js實現(xiàn)淘寶放大鏡效果

    這篇文章主要為大家詳細介紹了原生js實現(xiàn)放大鏡效果,制作一個類似于淘寶的放大鏡效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • JS按位非(~)運算符與~~運算符的理解分析

    JS按位非(~)運算符與~~運算符的理解分析

    按位非運算符,簡單的理解就是改變運算數(shù)的符號并減去1,當然,這是只是簡單的理解能轉換成number類型的數(shù)據(jù)
    2011-07-07
  • JS解析XML的實現(xiàn)代碼

    JS解析XML的實現(xiàn)代碼

    用javascript實現(xiàn)XML的解析的實現(xiàn)代碼,需要的朋友可以參考下。
    2009-11-11
  • JS實現(xiàn)點擊li標簽彈出對應的索引功能【案例】

    JS實現(xiàn)點擊li標簽彈出對應的索引功能【案例】

    這篇文章主要介紹了JS實現(xiàn)點擊li標簽彈出對應的索引功能,結合具體實例形式分析了javascript事件響應、元素遍歷等相關操作技巧,需要的朋友可以參考下
    2019-02-02

最新評論

华宁县| 达日县| 慈利县| 长顺县| 伊金霍洛旗| 呼伦贝尔市| 灌南县| 香河县| 弥勒县| 沁水县| 蒙山县| 宜君县| 弋阳县| 郁南县| 江口县| 西充县| 乐昌市| 扶沟县| 洛南县| 北碚区| 象州县| 北安市| 二连浩特市| 民乐县| 泾川县| 嘉鱼县| 乳源| 伊通| 玉门市| 浏阳市| 阳泉市| 江达县| 赤壁市| 视频| 江油市| 阳春市| 密山市| 文山县| 玉山县| 綦江县| 德江县|