[Cookie]解决Cookie跨域访问
前言
隨著工程的不斷擴大,要部署很多不同的服務,這其中就避免不了Cookie的跨域問題,如何實現Cookie在不同域之前實現傳輸,本文將詳細描述。
Cookie介紹
1、path
Cookie路徑是由path設置,例如我們設置path為 / ,代表當前webapps下的所有工程均可訪問此Cookie,若path為 /test ,代表 /test 下的請求才能訪問此Cookie。
2、域
Cookie的域我們如果不設置的話,默認是當前工程,例如:http://www.test.com/index.html ,那么它的域為www.test.com,通過domain我們可以設置Cookie的域
解決頂級域名與二級域名之間的跨域問題
#通過設置domain #頂級域名服務器與二級域名服務器之間哪個設置都能生效 #設置完畢后寫回到客戶端,用另一個服務器即可訪問此Cookie cookie.setDomain("test.com");解決頂級域名于頂級域名之間的跨域問題
我們可以通過Nginx反向代理,將兩個服務器域名統一到一個反向代理服務器。
upstream www.test.com { server 127.0.0.1:8080 weight=1; server 127.0.0.1:8060 weight=1; }server {listen 80;server_name www.test.com;#charset koi8-r;#access_log logs/host.access.log main;location / {proxy_pass http://www.test.com;index index.html index.htm;}}使用Ajax方式實現跨域訪問Cookie
$.ajax({type: 'GET',url: "http://www.cookie.test.com:8080/web2/ajaxServlet",data: {"username":"haha"},dataType: "json",//設置crossDomain與withCredentials的作用 : //允許攜帶cookie,不開啟是不能帶cookie到后臺的,//同時后臺也不能往前臺寫cookiecrossDomain: true,xhrFields: {withCredentials: true},success: function (data){console.info(data);} });最重要的是設置 withCredentials: true。
參數 crossDomain: true 是指發送Ajax時,Request header 中會包含跨域的額外信息,但不會含cookie,建議設置此參數。
因為跨域訪問主要是由后端控制,服務器端也要設置兩個重要參數
Access-Control-Allow-Origin : 控制允許攜帶Cookie訪問的域
Access-Control-Allow-Credentials : 允許客戶端攜帶證書式訪問
一般使用以下方式
if ( request.getHeader("Origin") != null ) {if(request.getHeader("Origin").contains("test.com")) {response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));} }同時還要設置另一個重要參數
//如果ajax里 withCredentials為true,就必須開啟這個選項, //允許攜帶證書式訪問(允許操作cookie),默認是false response.setHeader("Access-Control-Allow-Credentials", "true");服務器端 Access-Control-Allow-Credentials = true時,參數Access-Control-Allow-Origin 的值不能為 *
引入跨域Filter
由于我們頻繁設置 Access-Control-Allow-Origin 很不方便,我們可以引入Filter,它是在tomcat的lib包下的 catalina.jar 中。
<filter><filter-name>CorsFilter</filter-name><filter-class>org.apache.catalina.filters.CorsFilter</filter-class></filter><filter-mapping><filter-name>CorsFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>這樣我們就可以省略以下代碼了
if ( request.getHeader("Origin") != null ) {if(request.getHeader("Origin").contains("test.com")) {response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));} }參考文章:
跨域Ajax請求時是否帶Cookie的設置
解決cookie跨域訪問
總結
以上是生活随笔為你收集整理的[Cookie]解决Cookie跨域访问的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一种基于深度学习的目标检测提取视频图像关
- 下一篇: vue 头像 上传 裁剪