概述
本文成於業務
背景
需求:最近由一個需求更新主頁,主要是把www.alibab.com.cn,alibaba.com.cn,china.alibaba.com三者之前的跳轉隔離,外因不說了。即前兩者的任何訪問連接都不可以跳轉到第三者下。
部署:目前這三個域名都邦定到exodus2集羣:
訪問首頁時會用apacherewrite到page集羣,page集羣會根據具體的來源作處理;
訪問其他非登錄頁面,直接訪問;
訪問需要登錄頁面,對於不同的登錄url過來跳轉到login集羣,再跳轉到對應url;
登錄只寫alibaba.com域下的cookie,不會寫alibaba.com.cn域;
問題:用戶訪問需要登錄的頁面,在進行登錄後卻無法登錄,影響用戶體驗。
P3P
對於部分同學在討論時提到用p3p解決該問題,作者之前不瞭解該協議,在閱讀w3c的p3p(1.0,1.1)協議後說明幾個概念。
概念:隱私偏好設定平臺(Platformfor Privacy Preference,P3P)。
目的:隱私策略提供一個標準的可機讀格式,以及一個能使Web瀏覽器自動讀取和處理策略的協議解決了這個問題。
理解:p3p主要用於“跨域”寫cookie(其實更類似於蒐集信息),先通過一張圖來描述跨域概念。
這裏的跨域概念其實是指通過訪問一個A域名的url,間接調用B域名的連接寫B域名的cookie,從而感覺像是A域名跨域寫了B域名的cookie。這個場景比較試用於如廣告投放的信息蒐集。
舉例:anysql.com域名的客戶端要把google的廣告顯示在哪裏,廣告調用者等。
代碼頁面:
google返回的head頭:
注意p3phead,google定義的是簡潔策略再以引用的方式指向具體的隱私策略。
具體策略信息看如下url:
http://www.googleadservices.com/pagead/p3p_full_policy.xml
http://www.googleadservices.com/pagead/p3p.xml
具體使用:p3p也基本看過了,那現在看看是否可解決目前首頁的問題。
在登錄頁面埋個alibaba.com.cn域的連接(寫cookie),通過js去調用該url,把cookie給他進行寫入。
但是這樣引入瞭如下問題:
1.安全問題
2.httpOnly cooke問題
其他方案:
登錄寫cookie根據具體來源的域名寫:
優點:簡單,目前webx是支持這個功能,只需要修改不同請求到登錄的url。
缺點:目前大部分需要登錄的頁面在外部應用,他們跳轉到登錄的url是寫死的,如loginchina.alibaba.com,需要工作量。
成本和價值的問題。