摘要:但是對于一些設(shè)置了的項目,比如這種情況下當你用做反向代理的時候,就必須要轉(zhuǎn)換一下了。多學習,多去關(guān)注一些底層的原理,才會發(fā)現(xiàn)自己理解的錯誤,望諸君共勉如果錯誤,歡迎指出
基本內(nèi)容
Nginx做反向代理的時候,我們一般習慣添加proxy_cookie_domain配置,來做cookie的域名轉(zhuǎn)換,比如
... location /api { proxy_pass https://b.test.com; proxy_cookie_domain b.test.com a.test.com; } ...
在之前的博客中我也是這么寫的,但是最近在項目中發(fā)現(xiàn),不配置這個屬性,依然運轉(zhuǎn)正常,背后冷風陣陣,我發(fā)現(xiàn)自己一直以來可能又理解錯了這個選項,然后還在這給別人講。。。
我們首先來看下proxy_cookie_domain的官方定義,
Syntax: proxy_cookie_domain off;
proxy_cookie_domain domain replacement;
Default:
proxy_cookie_domain off;
Context: http, server, location
This directive appeared in version 1.1.15.Sets a text that should be changed in the domain attribute of the “Set-Cookie” header fields of a proxied server response. Suppose a proxied server returned the “Set-Cookie” header field with the attribute “domain=localhost”. The directive proxy_cookie_domain localhost example.org will rewrite this attribute to “domain=example.org”.
翻譯過來就是proxy_cookie_domain參數(shù)的作用是轉(zhuǎn)換response的set-cookie header中的domain選項,由后端設(shè)置的域名domain轉(zhuǎn)換成你的域名replacement,來保證cookie的順利傳遞并寫入到當前頁面中,注意proxy_cookie_domain負責的只是處理response set-cookie頭中的domain屬性,僅此而已。
但是我們知道response在寫set-cookie的時候,domain是一個可選項,并不是必填項,所以經(jīng)常能看到如下這種情況
這個時候由于set-cookie本身就沒有domain內(nèi)容,proxy_cookie_domain也就不沒有必要了,這也是為什么在部分項目中不配置proxy_cookie_domain依然正常的原因。但是對于一些設(shè)置了domain的項目,比如
這種情況下當你用nginx做反向代理的時候,就必須要轉(zhuǎn)換一下了。
說到這里,我們再看看之前的錯誤理解:
“proxy_cookie_domain的作用是實現(xiàn)前后端cookie域名轉(zhuǎn)換,保證順利傳遞”
乍一看好像也沒錯,但是現(xiàn)在想想,理解還是不夠啊,因為proxy_cookie_domain的作用是單向的,并不是雙向轉(zhuǎn)換的。我們先看下cookie的傳遞過程,盜一張圖先(懶得畫了。。。)
瀏覽器在發(fā)送請求的時候,會在request header中帶上cookie項(有內(nèi)容的話),此時的cookie是一個字符串,一個key=value并用分號分割的字符串,
其中并不包含任何域名信息。這是因為瀏覽器在設(shè)置cookie選項的時候,所選取的內(nèi)容都是緩存中接口域名下的。然后request的只要請求發(fā)送出去之后,cookie中有關(guān)domain信息其實是不存在的,它只是一個普通的字符串,隨便proxy_pass到任何位置,都會正常攜帶下去。因此在前端到后端的request的過程中,proxy_cookie_domain是沒用的
而server端在做響應(yīng)的時候,通過set-cookie的domain屬性,可以控制cookie的生效域名目標,做到諸如二級域名cookie分離等等,如果前端接收到的set-cookie的domain和當前域名不一致,或者一級域名不一致(二級域名可以共享一級域名下的cookie),這個cookie在后續(xù)的通信中就是無效的,所以這里才需要去做domain的轉(zhuǎn)換,也就是說response中set-cookie的domain轉(zhuǎn)換才是有意義的,這也正是proxy_cookie_domain的作用所在。
當reseponse的set-cookie中domain不去設(shè)置時,cookie順利傳入瀏覽器中,瀏覽器會自動設(shè)置這個cookie的生效域名為當前域名。
和這個類似的還有proxy_cookie_path屬性,同樣的該屬性僅作用在修改response set-cookie的path屬性,而一般情況下,用的也比較少。
嘮叨兩句很多問題,有時候都是太過理所當然的以為它是怎么樣的,并且生效了、達到目的了,我們就認為它是這樣的了,但往往大臉就會在后面不期而至。多學習,多去關(guān)注一些底層的原理,才會發(fā)現(xiàn)自己理解的錯誤,望諸君共勉~
如果錯誤,歡迎指出~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/40318.html
摘要:同時由于跨域了,就想利用的反向代理去處理一下跨域,但是在解決問題的同時,發(fā)現(xiàn)網(wǎng)上有些方案的確是存在一些問題,在這里總結(jié)一下基本配置,也聊一下常見的配置問題。 最近公司前后端分離,前端獨立提供頁面和靜態(tài)服務(wù)很自然的就想到了用nginx去做靜態(tài)服務(wù)器。同時由于跨域了,就想利用nginx的反向代理去處理一下跨域,但是在解決問題的同時,發(fā)現(xiàn)網(wǎng)上有些方案的確是存在一些問題,在這里總結(jié)一下基本配置...
摘要:同時由于跨域了,就想利用的反向代理去處理一下跨域,但是在解決問題的同時,發(fā)現(xiàn)網(wǎng)上有些方案的確是存在一些問題,在這里總結(jié)一下基本配置,也聊一下常見的配置問題。 最近公司前后端分離,前端獨立提供頁面和靜態(tài)服務(wù)很自然的就想到了用nginx去做靜態(tài)服務(wù)器。同時由于跨域了,就想利用nginx的反向代理去處理一下跨域,但是在解決問題的同時,發(fā)現(xiàn)網(wǎng)上有些方案的確是存在一些問題,在這里總結(jié)一下基本配置...
摘要:最近寫了一些關(guān)于前后端分離項目之后,跨域相關(guān)方案的基本原理和常見誤區(qū)的帖子,主要包括和反向代理。反向代理此時后端相當于不跨域,和正常請求一致,無需額外配置。 最近寫了一些關(guān)于前后端分離項目之后,跨域相關(guān)方案的基本原理和常見誤區(qū)的帖子,主要包括CORS和Nginx反向代理。這兩種方案項目中都有在用,各有優(yōu)缺,關(guān)于具體使用哪種方案,大家的觀點也不大一致,本文主要就此展開一下,從前后端及服務(wù)...
摘要:同時若不想破壞已經(jīng)做好的的話,也可以不使用,直接轉(zhuǎn)發(fā)到服務(wù)器的內(nèi)網(wǎng)應(yīng)該也是可以的。這樣在安全和效率高上就都能得到一定的提升。 之前寫了一些nginx的東西,這次繼續(xù),主要使用upstream針對proxy_pass轉(zhuǎn)發(fā)做個處理一般情況下我們在使用nginx反向代理的時候,都是如下配置, ... location /api { proxy_pass https://b.test.c...
摘要:作為前端開發(fā),每次調(diào)試接口,把代碼發(fā)到測試服務(wù)器,是很費時費事的一件事情。為了提高效率,想到了反向代理來解決這一問題。如何在手機上調(diào)試呢手機上不可能直接訪問可以把手機和電腦連接到同一個網(wǎng)段,使用電腦的進行訪問。 作為前端開發(fā),每次調(diào)試接口,把代碼發(fā)到測試服務(wù)器,是很費時費事的一件事情。為了提高效率,想到了nginx反向代理來解決這一問題。 接口地址:test.com 訪問地址:loca...
閱讀 2918·2023-04-26 02:14
閱讀 3770·2019-08-30 15:55
閱讀 1851·2019-08-29 16:42
閱讀 2766·2019-08-26 11:55
閱讀 2853·2019-08-23 13:38
閱讀 494·2019-08-23 12:10
閱讀 1319·2019-08-23 11:44
閱讀 2820·2019-08-23 11:43