麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網(wǎng)站 > Nginx > 正文

Nginx 解決WebApi跨域二次請求以及Vue單頁面的問題

2024-08-30 12:29:22
字體:
供稿:網(wǎng)友

一、前言

由于項目是前后端分離,API接口與Web前端 部署在不同站點當(dāng)中,因此在前文當(dāng)中WebApi Ajax 跨域請求解決方法(CORS實現(xiàn))使用跨域處理方式處理而不用Jsonp的方式。

但是在一段時間后,發(fā)現(xiàn)一個很奇怪的問題,每次前端發(fā)起請求的時候,通過瀏覽器的開發(fā)者工具都能看到在Network下同一個url有兩條請求,第一條請求的Method為OPTIONS,第二條請求的Method才是真正的Get或者Post,并且,第一條請求無數(shù)據(jù)返回,第二條請求才返回正常的數(shù)據(jù)。

二、原因

第一個OPTIONS的請求是由WEB服務(wù)器處理跨域訪問引發(fā)的。OPTIONS是一種預(yù)檢請求,瀏覽器在處理跨域訪問的請求時,如果判斷請求為復(fù)雜請求,則會先向服務(wù)器發(fā)送一條預(yù)檢請求,根據(jù)服務(wù)器返回的內(nèi)容,瀏覽器判斷服務(wù)器是否允許訪問該請求。如果WEB服務(wù)器采用CORS的方式支持跨域訪問,在處理復(fù)雜請求時這個預(yù)檢請求是不可避免的。

由于我們的WEB服務(wù)器采用CORS來解決跨域訪問的問題,同時在header中添加了自定義參數(shù)以及使用json格式來進行數(shù)據(jù)交互,導(dǎo)致我們的每次請求都是復(fù)雜請求,從而產(chǎn)生每次請求都會發(fā)送兩條請求的現(xiàn)象。

產(chǎn)生原因如下:

使用CORS解決跨域問題

三、解決方案

3.1 Nginx

3.1.1 思路

將前端項目部署在Nginx當(dāng)中,通過代理的方式來解決跨域請求問題

3.1.2 實現(xiàn)

3.1.2.1 安裝 Nginx

Windows 下 安裝 Nginx 最簡單,直接下載壓縮包,然后解壓后

3.1.2.2 配置 Nginx

已自帶默認(rèn)配置,如要部署Vue、Angular這種單頁面應(yīng)用,將打包后的index.html文件以及dist目錄放到發(fā)布目錄中,將路徑復(fù)制,用于配置Nginx服務(wù)指向

配置文件如下:

server { listen 9461; # 監(jiān)聽端口號 server_name localhost 192.168.88.22; # 訪問地址 location / { root 項目路徑; # 例如:E:/Publish/xxx/; index index.html;  # 此處用于處理 Vue、Angular、React 使用H5 的 History時 重寫的問題 if (!-e $request_filename) { rewrite ^(.*) /index.html last; break; } }  # 代理服務(wù)端接口 location /api { proxy_pass http://localhost:9460/api;# 代理接口地址 } }

3.1.2.3 Nginx 常用命令

啟動:start nginx

重新加載配置:nginx -s reload

重新打開日志文件:nginx -s reopen

測試配置文件是否正確:nginx -t [可選:指定路徑]

快速停止:nginx -s stop

有序停止:nginx -s quit

3.1.3 Nginx 單頁面應(yīng)用H5 History Url重寫

支持

Vue、Angular、React

原因

實現(xiàn)單頁面時,刷新頁面會產(chǎn)生頁面找不到的問題,所以需要重寫Url地址到index.html當(dāng)中。

注意點

在使用Nginx中URL重寫的時候,一直報錯如下

Nginx,WebApi,跨域,二次請求,Vue,單頁面

檢查后,發(fā)現(xiàn) if 和 ( 之間必須有個空格。

3.2 Other

3.2.1 思路

既然要發(fā)送預(yù)檢請求,是否可以減少預(yù)檢請求的次數(shù)?

例如可以設(shè)定一個有效期,在有效期內(nèi)不再重復(fù)預(yù)檢。

3.2.2 實現(xiàn)

可以在服務(wù)端處預(yù)檢完成后加入一個Access-Control-Max-Age請求頭來解決這個問題。

3.2.3 CORS 響應(yīng)字段說明

Access-Control-Allow-Methods

該字段必需,它的值是逗號分隔的一個字符串,表明服務(wù)器支持的所有跨域請求的方法。

注意,返回的是所有支持的方法,而不單是瀏覽器請求的那個方法。這是為了避免多次"預(yù)檢"請求。

Access-Control-Allow-Headers

如果瀏覽器請求包括Access-Control-Request-Headers字段,則Access-Control-Allow-Headers字段是必需的。

它也是一個逗號分隔的字符串,表明服務(wù)器支持的所有頭信息字段,不限于瀏覽器在"預(yù)檢"中請求的字段。

Access-Control-Allow-Credentials

該字段與簡單請求時的含義相同。

Access-Control-Max-Age

該字段可選,用來指定本次預(yù)檢請求的有效期,單位為秒。上面結(jié)果中,有效期是20天(1728000秒),即允許緩存該條回應(yīng)1728000秒(即20天),在此期間,不用發(fā)出另一條預(yù)檢請求。

Access-Control-Allow-Methods: GET, POST, PUTAccess-Control-Allow-Headers: X-Custom-HeaderAccess-Control-Allow-Credentials: trueAccess-Control-Max-Age: 1728000

以上這篇Nginx 解決WebApi跨域二次請求以及Vue單頁面的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網(wǎng)。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产一级免费视频 | 久草视频2| 久啪视频| xnxx 日本免费 | 亚洲免费看片网站 | 精品一区二区三区在线观看视频 | 爽爽视频免费看 | 看毛片免费 | 鲁丝一区二区二区四区 | 91九色视频观看 | 午夜色视频在线观看 | 欧美日韩免费在线观看视频 | 亚洲第一成网站 | 色污视频在线观看 | 草草久久久 | 91精品国产92久久久久 | 国内精品久久久久影院不卡 | 久久久麻豆 | 日韩视频一区二区在线观看 | xxxⅹ96日本护士hd | 国产噜噜噜噜久久久久久久久 | 欧美77 | 国产精品色在线网站 | 91嫩草丨国产丨精品入口 | 日本精品久久久久久草草 | 精品国产高清一区二区三区 | 久草视频手机在线观看 | aaaaa国产欧美一区二区 | 日韩视频―中文字幕 | 日韩午夜一区二区三区 | 精品一区二区亚洲 | 精品国产一区二 | www.91操 | 斗罗破苍穹在线观看免费完整观看 | 久久线视频 | 九九热免费观看 | 一区二区国产在线 | 一级看片免费视频 | 精品国产一区二区三区四区在线 | 91网页视频入口在线观看 | 鲁丝片一区二区三区免费入口 |