目錄
前言
一、跨域問題
1.什么是跨域
?2.CORS
二、Nginx跨域處理
三.補充
前言
這幾天出現(xiàn)了一個問題,我們中的一個A系統(tǒng)需要給B系統(tǒng)調(diào)用,造成了跨域問題。
一、跨域問題
1.什么是跨域
當一個請求url的協(xié)議、域名、端口三者之間任意一個與當前頁面url不同即為跨域。
?2.CORS
CORS是一個W3C標準,全稱是跨域資源共享(Cross-origin resource sharing)。它允許瀏覽器向跨源服務器,發(fā)出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制。
簡單來說就是跨域的目標服務器要返回一系列的Headers,通過這些Headers來控制是否同意跨域。
CORS提供的Headers,在Request包和Response包中都有一部分:
二、Nginx跨域處理
下面就是我Nginx的一些配置:
server {
listen 443 ssl;
server_name 這里是域名;
#定義跨域變量
set $cors_origin "";
#訪問的域名與填寫的域名比較
if ($http_origin ~* "^這里填寫調(diào)用我們系統(tǒng)的域名地址$") {
set $cors_origin $http_origin;
}
//這里填*就是任何域名都允許跨域
add_header Access-Control-Allow-Origin $cors_origin;
#CORS請求默認不發(fā)送Cookie和HTTP認證信息。但是如果要把Cookie發(fā)到服務器,要服務器同意,指定
#Access-Control-Allow-Credentials字段。
add_header Access-Control-Allow-Credentials 'true';
#設置跨域請求允許的Header頭信息字段,以逗號分隔的字符串
add_header Access-Control-Allow-Headers 'Origin,X-Requested-With,Content-Type,Accept,Authorization,token';
#設置跨域允許的請求
add_header Access-Control-Allow-Metthods 'POST,GET,PUT,OPTIONS,DELETE';
# 預檢請求處理
if ($request_method = OPTIONS) {
return 204;
}
三.補充
我們前面的預檢請求我們簡單來說一說,CORS請求,會在正式通信之前,增加一次HTTP查詢請求,稱為"預檢"請求(preflight);瀏覽器先詢問服務器,當前網(wǎng)頁所在的域名是否在服務器的許可名單之中,以及可以使用哪些HTTP動詞和頭信息字段。只有得到肯定答復,瀏覽器才會發(fā)出正式的XMLHttpRequest請求,否則就報錯。我前面就是沒有設置token,預檢請求就沒有通過,我本地啟動后端打斷點,看請求頭一直沒有token這個字段,預檢請求沒有把token傳過來,接口一直訪問不通。
"預檢"請求用的請求方法是OPTIONS,表示這個請求是用來詢問的,因此我們需要在Nginx配置中,針對預檢請求進行處理,直接返回204 & Response Header,表示服務器支持允許跨源的訪問。文章來源:http://www.zghlxwxcb.cn/news/detail-598733.html
? 文章來源地址http://www.zghlxwxcb.cn/news/detail-598733.html
到了這里,關于Nginx解決跨域問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!