B/S架構(gòu)
- 統(tǒng)一的瀏覽器(Browser):方便,屏蔽了不同服務(wù)商提供服務(wù)的差異性
- 服務(wù)端(Server)統(tǒng)一的HTTP協(xié)議,簡化服務(wù)開發(fā)者和服務(wù)器提供商的開發(fā)
HTTP協(xié)議
無狀態(tài)的短連接的通信方式,一次請求就完成了數(shù)據(jù)交互,然后這次連接就斷開了。這種方式是為了能夠同時服務(wù)更多的用戶。
B/S的基本原則
- 互聯(lián)網(wǎng)上所有的資源都要一個URL(統(tǒng)一資源定位符)表示
- 必須遵循HTTP協(xié)議
- 數(shù)據(jù)展示必須在瀏覽器中進(jìn)行
如何發(fā)起一個HTTP請求
- 發(fā)起一個HTTP請求的過程就是建立一個Socket通信的過程(什么是Socket通信?)
- httpclient 開源的通過程序?qū)崿F(xiàn)的處理HTTP請求的工具包
-
LInux的curl指令 curl+url即可發(fā)起一個簡單的HTTP請求
HTTP請求返回的HTML數(shù)據(jù)
HTTP解析
最重要的就是HTTP Header(控制用戶的數(shù)據(jù)傳輸,關(guān)鍵的是控制著用戶瀏覽器的渲染行為和服務(wù)器的執(zhí)行邏輯)
常見的HTTP請求頭,響應(yīng)頭,狀態(tài)碼見本文:HTTP協(xié)議
瀏覽器緩存機(jī)制
如果我們?yōu)g覽一個頁面發(fā)現(xiàn)有異常情況,通常會考慮是緩存問題,一般做法是Ctrl+F5(mac 下是command+shift+R)刷新頁面(為什么不是F5(mac 下是command+R)),就一定可以拿到最新的頁面。(F5和Ctrl+F5區(qū)別?)
- 使用Ctrl+F5,瀏覽器會直接向目標(biāo)URL發(fā)送請求,而不會使用瀏覽器緩存的數(shù)據(jù)
- 使用Ctrl+F5,在HTTP請求中會增加一些請求頭,它告訴服務(wù)端我們要獲取的是最新數(shù)據(jù)而不是緩存。
即增加的兩個請求頭是:Pragma:no-cache, Cache-Control:no-cache。那么這兩個請求頭有什么作用呢?
Cache-Control/Pragma
這個HTTP Head字段用于指定所有緩存機(jī)制在整個請求/響應(yīng)鏈中必須服從的命令,如果知道該頁面是否為緩存,不僅可以控制瀏覽器,還可以控制和HTTP相關(guān)的緩存或代理服務(wù)器。該HTTP Head字段一些可選值如下:

Cache-Control請求字段被各個瀏覽器支持的很好,而且它的優(yōu)先級也比較高,它和其他請求字段(Expires)同時出現(xiàn)時,Cache-Control會覆蓋其他字段。
Pragma字段的作用和Cache-Control有點類似,它也是在HTTP頭中包含一個特殊的指令,使得相關(guān)的服務(wù)器遵守該指令。最常用的就是Pragma:no-cache, 它和Cache-Control:no-cache的作用一致。
Expires
Expires通常的使用格式是Expires:Sat,25 Feb 2018 12:22:12 GMT,后面跟著一個日期和時間。超過這個時間值之后,緩存的內(nèi)容就會失效。即瀏覽器發(fā)送請求之前會檢查這個頁面的這個字段,看該頁面是否過期,過期了就重新向服務(wù)器發(fā)起請求。
Last-Modified/Etag
Last-Modified這個字段一般用于表示一個服務(wù)器上的資源的最后修改時間。資源可以是靜態(tài)的(靜態(tài)的自動加上Last-Modified字段)也可以是動態(tài)的(如Servlet提供一個getLastModified方法用于檢查某個動態(tài)內(nèi)容是否已經(jīng)更新),通過這個最后修改時間可以判定當(dāng)前請求的資源是否是最新的。
一般服務(wù)端在響應(yīng)頭中返回一個Last-Modified字段,告訴瀏覽器這個頁面的最后修改時間,如Last-Modified: Sat, 25 Feb 2012 12:55:04 GMT,瀏覽器再次請求時在請求頭中增加一個 If-Modified-Since:Sat, 25 Feb 2012 12:55:04 GMT字段,詢問當(dāng)前緩存的頁面是否是最新的,如果是最新的就返回304狀態(tài)碼,告訴瀏覽器是最新的,服務(wù)器也不會傳輸新的數(shù)據(jù)。
與Last-Modified字段有類似功能的還有一個Etag字段,這個字段的作用是讓服務(wù)端給每個頁面分配一個唯一的編號,然后通過這個編號來區(qū)分當(dāng)前這個頁面是否是最新的。這種方式比使用Last- Modified更加靈活,但是在后端的Web服務(wù)器有多臺時比較難處理,因為每個Web服務(wù)器都要記住網(wǎng)站的所有資源,否則瀏覽器返回這個編號就沒有意義了。
才疏學(xué)淺之處,切莫在意。
??????????????????????????????——2019.7.15下午
