一個(gè)服務(wù)于移動(dòng)用戶的網(wǎng)站是指其對(duì)客戶請(qǐng)求做出響應(yīng)的格式是由移動(dòng)設(shè)施備或?yàn)g覽器的種類決定的。為了一方面服務(wù)于移動(dòng)客戶,同時(shí)又緩存web服務(wù)器的響應(yīng),這類網(wǎng)站就必須將用戶代理信息作為緩存設(shè)備對(duì)請(qǐng)求做出正確響應(yīng)的部分識(shí)別依據(jù)。
比如說,有三臺(tái)不同的移動(dòng)設(shè)備都同樣訪問 “news.html” 這個(gè)站點(diǎn),然而,由于它們的用戶代理字符串不同,我們?nèi)孕枰彺嫒齻€(gè)不同的響應(yīng),這樣很可能會(huì)極大增加被緩存的響應(yīng)的數(shù)量(因?yàn)槠渲型徽军c(diǎn)的資料文本在成倍增加)。
現(xiàn)在,通過配置aiCache, 我們可將刪減或改寫后的用戶代理字符串作為aiCache服務(wù)器對(duì)用戶請(qǐng)求做出正確響應(yīng)的部分識(shí)別依據(jù)(此特性只有mobile-enabled版本才可做到),從而為上述問題提供了完美的解決方案。
在之前各項(xiàng)功能的基礎(chǔ)上,aiCache的這項(xiàng)性能解決了市面上存在多種移動(dòng)設(shè)備所帶來的難題。以前,不同的固件文本,移動(dòng)設(shè)備提供商和運(yùn)營(yíng)者都會(huì)導(dǎo)致移動(dòng)設(shè)備向網(wǎng)站發(fā)送一個(gè)不同的用戶代理字符串,而想要緩存所有移動(dòng)設(shè)備各不相同的響應(yīng)數(shù)據(jù)是十分困難的。
然而其實(shí)我們不難發(fā)現(xiàn),市場(chǎng)上絕大部分的移動(dòng)設(shè)備可被歸納為幾類不同的“家族”。例如,按照效能,對(duì)Javascript 的支持程度以及屏幕大小不同,Blackberries 可以被歸納為兩個(gè)類別,Iphones’本身就是一個(gè)類別,等等。這樣就簡(jiǎn)化了先前的問題。
aiCache就充分利用了這一點(diǎn)。您只需對(duì)用戶代理字符串具體設(shè)定改寫規(guī)則,改寫或刪減后新的字符串可就作為aiCache服務(wù)器緩存響應(yīng)的部分簽名。
另外,這個(gè)被“壓縮”了的客戶代理字符串還會(huì)與用戶請(qǐng)求中的X-UA-Rewrite header 一并送交原始服務(wù)器。然后,原始服務(wù)器會(huì)讀取并作用于這個(gè)報(bào)頭參數(shù)(header value),希望修改響應(yīng)以便配合移動(dòng)設(shè)備的差異。
例如,將本不支持Javascript的設(shè)備文本轉(zhuǎn)為支持Javascript,調(diào)整頁面大小以配合不同尺寸的屏幕。
當(dāng)然,原始服務(wù)器也可依照用戶代理字符串的實(shí)際參數(shù)來形成響應(yīng)。(aiCache從不修改它,而是從請(qǐng)求設(shè)備向原始服務(wù)器逐字上傳)但如果這樣的話,服務(wù)器端的代碼就必須能夠配合如此多不同的移動(dòng)設(shè)備。
將大量不同的用戶代理字符串減少為一小部分除了對(duì)原始服務(wù)器有好處,對(duì)緩存本身也有積極的影響——這包括提高緩存效率,部分減少網(wǎng)絡(luò)擁堵,降低對(duì)原始服務(wù)器配置的要求等。
這也極大的簡(jiǎn)化了web服務(wù)器應(yīng)對(duì)當(dāng)今市面上所有五花八門的移動(dòng)設(shè)備的邏輯流程。
一直以來,人們的理想就是訪問URL不隨自己使用移動(dòng)設(shè)備的種類而改變。這樣的話,無論使用的是哪種移動(dòng)設(shè)備,訪問任何新聞網(wǎng)都只用輸入news.html ,而訪問任何體育板塊都只用輸入sports.html。
遺憾的是,現(xiàn)實(shí)中對(duì)于URL變化情況的處理方法要復(fù)雜得多,例如給每個(gè)網(wǎng)址都加上移動(dòng)設(shè)備種類的前綴。這往往讓用戶覺得十分麻煩。
幸好,正如前所述,aiCache對(duì)此提供了漂亮的的解決方案。