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

Nginx 解決WebApi跨域二次請(qǐng)求以及Vue單頁(yè)面的問(wèn)題

 更新時(shí)間:2018年01月10日 09:09:36   作者:簡(jiǎn)玄冰  
下面小編就為大家分享一篇Nginx 解決WebApi跨域二次請(qǐng)求以及Vue單頁(yè)面的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

一、前言

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

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

二、原因

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

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

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

使用CORS解決跨域問(wèn)題

三、解決方案

3.1 Nginx

3.1.1 思路

將前端項(xiàng)目部署在Nginx當(dāng)中,通過(guò)代理的方式來(lái)解決跨域請(qǐng)求問(wèn)題

3.1.2 實(shí)現(xiàn)

3.1.2.1 安裝 Nginx

Windows 下 安裝 Nginx 最簡(jiǎn)單,直接下載壓縮包,然后解壓后

3.1.2.2 配置 Nginx

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

配置文件如下:

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

3.1.2.3 Nginx 常用命令

啟動(dòng):start nginx

重新加載配置:nginx -s reload

重新打開(kāi)日志文件:nginx -s reopen

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

快速停止:nginx -s stop

有序停止:nginx -s quit

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

支持

Vue、Angular、React

原因

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

注意點(diǎn)

在使用Nginx中URL重寫(xiě)的時(shí)候,一直報(bào)錯(cuò)如下

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

3.2 Other

3.2.1 思路

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

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

3.2.2 實(shí)現(xiàn)

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

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

Access-Control-Allow-Methods

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

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

Access-Control-Allow-Headers

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

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

Access-Control-Allow-Credentials

該字段與簡(jiǎn)單請(qǐng)求時(shí)的含義相同。

Access-Control-Max-Age

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

Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: X-Custom-Header
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 1728000

以上這篇Nginx 解決WebApi跨域二次請(qǐng)求以及Vue單頁(yè)面的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Nginx服務(wù)器限制訪問(wèn)速度的配置方法

    Nginx服務(wù)器限制訪問(wèn)速度的配置方法

    這篇文章主要介紹了Nginx服務(wù)器限制訪問(wèn)速度的配置方法,尤其是當(dāng)服務(wù)器中存在ftp下載等服務(wù)時(shí)尤為有用,需要的朋友可以參考下
    2015-07-07
  • Nginx限制帶寬配置示例

    Nginx限制帶寬配置示例

    這篇文章主要介紹了Nginx限制帶寬配置示例,本文網(wǎng)羅了3個(gè)方法,希望可以幫到大家,需要的朋友可以參考下
    2014-09-09
  • nginx安裝第三方模塊的方法

    nginx安裝第三方模塊的方法

    這篇文章主要介紹了nginx安裝第三方模塊的方法,包含在未安裝nginx的情況下安裝nginx第三方模塊和在已安裝nginx情況下安裝nginx第三方模塊,需要的朋友可以參考下
    2014-06-06
  • Crontab和Shell腳本切割Nginx日志使用詳解

    Crontab和Shell腳本切割Nginx日志使用詳解

    這篇文章主要為大家介紹了Crontab和Shell腳本切割Nginx日志,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • nginx代理80端口不生效的解決方案

    nginx代理80端口不生效的解決方案

    如果你的 Nginx 代理配置了端口 80,并且訪問(wèn)時(shí)仍然顯示默認(rèn)的 Nginx 頁(yè)面,可能有許多原因?qū)е?本文給大家介紹了產(chǎn)生的原因和解決方案,具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-02-02
  • nginx地址重寫(xiě)、反向代理方式

    nginx地址重寫(xiě)、反向代理方式

    這篇文章主要介紹了nginx地址重寫(xiě)、反向代理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Nginx服務(wù)器作反向代理實(shí)現(xiàn)內(nèi)部局域網(wǎng)的url轉(zhuǎn)發(fā)配置

    Nginx服務(wù)器作反向代理實(shí)現(xiàn)內(nèi)部局域網(wǎng)的url轉(zhuǎn)發(fā)配置

    這篇文章主要介紹了Nginx服務(wù)器作反向代理實(shí)現(xiàn)內(nèi)部局域網(wǎng)的url轉(zhuǎn)發(fā)實(shí)例,文中提到需要注意proxy_read_timeout參數(shù)的相關(guān)調(diào)整,需要的朋友可以參考下
    2016-01-01
  • Nginx虛擬主機(jī)的配置步驟過(guò)程全解

    Nginx虛擬主機(jī)的配置步驟過(guò)程全解

    這篇文章主要為大家介紹了Nginx虛擬主機(jī)的配置步驟過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-03-03
  • Nginx解決轉(zhuǎn)發(fā)地址時(shí)跨域的問(wèn)題

    Nginx解決轉(zhuǎn)發(fā)地址時(shí)跨域的問(wèn)題

    這篇文章主要介紹了Nginx實(shí)現(xiàn)轉(zhuǎn)發(fā)地址解決跨域問(wèn)題的方法,文中介紹的很詳細(xì),對(duì)大家的學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-01-01
  • 服務(wù)器使用Nginx部署Springboot項(xiàng)目的詳細(xì)教程(jar包)

    服務(wù)器使用Nginx部署Springboot項(xiàng)目的詳細(xì)教程(jar包)

    這篇文章主要介紹了服務(wù)器使用Nginx部署Springboot項(xiàng)目的詳細(xì)教程(jar包),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07

最新評(píng)論