1. OSI 七層模型指什么 (難度***
)
OSI(Open System Interconnection,開放系統(tǒng)互連),七層網(wǎng)絡模型稱為開放式系統(tǒng)互聯(lián)參考模型,是一個邏輯上的定義,一個規(guī)范,它把網(wǎng)絡從邏輯上分為了7層。通過七個層次化的結(jié)構(gòu)模型使不同的系統(tǒng)不同的網(wǎng)絡之間實現(xiàn)可靠的通訊 。這七層由下往上可分為:
2. HTTP 的工作原理是什么? (難度***
)
HTTP協(xié)議定義web客戶端如何從web服務器請求web頁面,以及服務器如何把web頁面?zhèn)魉徒o客戶端。HTTP協(xié)議采用了請求/響應模型。客戶端向服務器發(fā)送一個請求報文,請求報文包含請求的方法、URL、協(xié)議版本、請求頭部和請求數(shù)據(jù)。服務器以一個狀態(tài)行作為響應,響應的內(nèi)容包括協(xié)議的版本、成功或者錯誤代碼、服務器信息、響應頭部和響應數(shù)據(jù)。下圖表明了這種請求/響應模型。
以下是HTTP請求/響應的步驟:
(1)客戶端連接到web服務器
一個HTTP客戶端,通常是瀏覽器,與web服務器的HTTP端口(默認80)建立一個TCP套接字連接。
(2)發(fā)送HTTP請求
通過TCP套接字,客戶端向web服務器發(fā)送一個文本的請求報文,一個請求報文交由請求行、請求頭部、空行和請求數(shù)據(jù)4部分組成。
(3)服務器接收請求并返回HTTP響應
web拂去其解析請求,定位請求資源。服務器將資源復本寫到TCP套接字,由客戶端讀取。一個響應由狀態(tài)行、響應頭部、空行和響應數(shù)據(jù)4部分組成。
(4)釋放連接TCP連接
web服務器主動關閉TCP套接字,釋放TCP連接;客戶端被動關閉TCP套接字,釋放TCP連接。
(5)客戶端瀏覽器解析HTML內(nèi)容
客戶端瀏覽器首先解析狀態(tài)行,查看表明請求是否成功的狀態(tài)碼。然后解析每一個響應頭,響應頭告知以下為若干字節(jié)的HTML文檔和文檔的字符集。客戶端瀏覽器讀取響應數(shù)據(jù)HTML,根據(jù)HTML的預付對其進行格式化,并在瀏覽器窗口中顯示。
3. URI 的格式是什么?常見的協(xié)議有哪些 (難度***
)
URI( Uniform Resource Identifier)統(tǒng)一資源標識符
格式:
- 協(xié)議名方案
定義Internet服務的類型。最常見的類型是http。 - 登錄信息(認證)
指定用戶名和密碼作為從服務器端獲取資源時必要的登錄信息,即身份認證。 - 服務器地址
使用URI必須指定帶訪問的服務器地址。地址可以是DNS可解析的名稱,也可以是IP地址。 - 服務器端口號
指定服務器連接的網(wǎng)絡端口號。一般情況下使用默認端口號。 - 帶層次的文件路徑
指定服務器上的文件路徑來定位特制的資源。 - 查詢字符串
針對已指定的文件路徑內(nèi)的資源,可以使用查詢字符串傳入任意參數(shù)。 - 片段標識符
使用片段標識符通常標記以獲取資源中的子資源。
常見協(xié)議:
IP(Internet Protocol):網(wǎng)絡協(xié)議
HTTP (HyperText Transfer Protocol):超文本傳輸協(xié)議
HTTPS(Hypertext Transport Protocol Server):超文本傳輸安全協(xié)議
ARP(Address Resolution Protocol):地址解析協(xié)議
FTP(File Transfer Protocol):文件傳輸協(xié)議
SMTP(Simple Mail Transfer Protocol):簡單郵件傳輸協(xié)議
SFTP(Simple File Transfer Protocol ):簡單文件傳輸協(xié)議
TCP(Transfer Control Protocol):傳輸控制協(xié)議
UDP(User Datagram Protocol):用戶數(shù)據(jù)包協(xié)議
4. HTTP 協(xié)議有幾種和服務器交互的方法 (難度***
)
- GET:最常用,通常用于請求服務器發(fā)送某個資源,我們平時在瀏覽器輸入網(wǎng)頁地址,就是給服務器發(fā)送了一個GET請求。
- POST:用于向服務器發(fā)送數(shù)據(jù),通常用來支持HTML表單(input、select、textarea),表單中的數(shù)據(jù)會被發(fā)送到服務器。
- HEAD:該方法與GET類似,只是不返回報文主體部分,用于確認URI的有效性及資源更新的日期時間等。
- PUT:和GET從服務器獲取資源相反,PUT用于向服務器寫入資源;PUT的語義就是讓服務器用請求的主體部分創(chuàng)建一個請求URL命名的文檔,如果存在就替換;出于安全原因不是所有的服務器都能實現(xiàn)。
- TRACE:該方法是讓WEB服務器端將之前的請求通信環(huán)回給客戶端的方法。可以用來確認連接過程中發(fā)生的一系列操作。
- DELET:此方法用于要求服務器刪除請求的URL,和PUT一樣,服務器可能會不支持(刪除資源)。
- OPTIONS:此方法用于請求 web服務器告知其支持的各種功能。
5. 狀態(tài)碼200,301,304,403,404,500,503分別代表什么意思 (難度****
)
- 200 OK:請求被成功地完成,所請求的資源發(fā)送回客戶端。
- 301 Moved Permanently:客戶請求的文檔在其他地方,新的URL在Location頭中給出,瀏覽器應該自動地訪問新的URL。
- 304 Not Modified:客戶端有緩沖的文檔并發(fā)出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務器告訴客戶,原來緩沖的文檔還可以繼續(xù)使用。
- 403 Forbidden:對請求資源的訪問被服務器拒絕了。
- 404 Not Found:請求所希望得到的資源在服務器上無法找到。
- 500 Internal Server Error:服務器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理。
- 503 Service Unavailable:服務器暫時處于超負荷或正在進行停機維護,現(xiàn)在無法處理請求。
6. 報文有哪幾部分組成? (可選 難度****
)
- HTTP報文有兩類:
- 請求端(客戶端)的HTTP報文叫做請求報文。
- 響應端(服務端)的HTTP報文叫做響應報文。
- HTTP報文大致可以分為報文首部和報文主體兩部分:
- 請求報文:(報文首部+空行+報文主體)
- 請求報文首部:
- 請求行:(包含用于請求的方法、URI、HTTP版本)
- 請求首部字段
- 通用首部字段
- 實體首部字段
- 其他
- 響應報文:(報文首部+空行+報文主體)
- 響應報文首部:
- 狀態(tài)行:(包含表明響應結(jié)果的狀態(tài)碼,HTTP版本)
- 響應首部字段
- 通用首部字段
- 實體首部字段
- 其他
7. 請求頭的格式和作用是什么?給個范例截圖說明 (可選 難度****
)
Host:URI信息
Accept:瀏覽器能接收的資源類型
Accept-Encoding:告訴服務器能夠發(fā)送哪些編碼
Accept-Language:告訴服務器能夠發(fā)送哪些語言
Cache-Control:緩存控制
Connection:客戶端和服務器是否保持連接
Cookie:瀏覽器緩存
User-Agent:HTTP客戶端程序的信息
8. 首部的格式和作用是什么?給個范例截圖說明 (可選 難度****
)
首部包括:普通首部(General)、請求首部(Request Headers)、響應首部(Response Headers)。
- 普通首部:請求報文和響應報文雙方都會使用的首部。
首部 |描述
-------| ------| ------
Cache-Control| 控制緩存
Connection|控制不再轉(zhuǎn)發(fā)給代理的首部字段、管理持久連接
Data|創(chuàng)建HTTP報文的時間和日期
pragma|報文指令
Trailer|事先說明在報文主體后記錄了哪些首部字段,可以應用在HTTP1.1版本分塊傳輸編碼時使用。
Transfer-Encoding|規(guī)定了傳輸報文主體時采用的編碼方式
Upgrade|用于檢測HTTP協(xié)議及其他協(xié)議是否可以使用更高版本進行通信
Via|追蹤客戶端與服務器之間的請求響應和響應報文的傳輸途徑。還可以避免請求回環(huán)的發(fā)生。
Warning|告知用戶一些與緩存相關問題的警告
- 請求首部:從客戶端往服務器端發(fā)送請求報文中所使用的首部。用于補充請求的附加信息、客戶端信息、對響應內(nèi)容相關優(yōu)先級等內(nèi)容。
首部 |描述
-------| ------| ------
Accept |用戶代理可處理的媒體類型
Accept-Charset |優(yōu)先的字符集
Accept-Encoding |優(yōu)先的內(nèi)容編碼
Accept-Language |優(yōu)先的語言(自然語言)
Authorization Web |認證信息
Expect |期待服務器的特定行為
From |用戶的電子郵箱地址
Host |請求資源所在服務器
If-Match |比較實體標記(ETag)
If-Modified-Since |比較資源的更新時間
If-None-Match |比較實體標記(與 If-Match 相反)
If-Range |資源未更新時發(fā)送實體 Byte 的范圍請求
If-Unmodified-Since |比較資源的更新時間(與If-Modified-Since相反)
Max-Forwards |最大傳輸逐跳數(shù)
Proxy-Authorization |代理服務器要求客戶端的認證信息
Range |實體的字節(jié)范圍請求
Referer |對請求中 URI 的原始獲取方
TE |傳輸編碼的優(yōu)先級
User-Agent |HTTP 客戶端程序的信息
- 響應首部:從服務器端向客戶端返回響應報文時使用的首部。用于補充響應的附加信息、服務器信息,以及對客戶端的附加要求等信息。
首部 |描述
-------| ------| ------
Accept-Ranges|是否接受字節(jié)范圍請求
Age|推算資源創(chuàng)建經(jīng)過時間
ETag|資源的匹配信息
Location|令客戶端重定向至指定URI
Proxy-Authenticate|代理服務器對客戶端的認證信息
Retry-After|對再次發(fā)起請求的時機要求
Server|HTTP服務器的安裝信息
Vary|代理服務器緩存的管理信息
WWW-Authenticate |服務器對客戶端的認證信息
9. 主體的作用是什么?給個范例(可選 截圖說明難度****
)
主體就是客戶端和服務端之間傳輸?shù)闹饕獌?nèi)容。
主體可以承載很多類型的數(shù)字數(shù)據(jù):圖片、視頻、HTML文檔、軟件應用程序等。
10. 簡述瀏覽器緩存是如何控制的(可選 難度*****
)
(1)緩存的分類
緩存分為服務端側(cè)(server side,比如 Nginx、Apache)和客戶端側(cè)(client side,比如 web browser)。
服務端緩存又分為 代理服務器緩存 和 反向代理服務器緩存(也叫網(wǎng)關緩存,比如 Nginx反向代理、Squid等),其實廣泛使用的 CDN 也是一種服務端緩存,目的都是讓用戶的請求走”捷徑“,并且都是緩存圖片、文件等靜態(tài)資源。
客戶端側(cè)緩存一般指的是瀏覽器緩存,目的就是加速各種靜態(tài)資源的訪問,想想現(xiàn)在的大型網(wǎng)站,隨便一個頁面都是一兩百個請求,每天 pv 都是億級別,如果沒有緩存,用戶體驗會急劇下降、同時服務器壓力和網(wǎng)絡帶寬都面臨嚴重的考驗。
(2)瀏覽器緩存控制機制有兩種:HTML Meta標簽 vs. HTTP頭信息
①HTML Meta標簽控制緩存
瀏覽器緩存機制,其實主要就是HTTP協(xié)議定義的緩存機制(如: Expires; Cache-control等)。但是也有非HTTP協(xié)議定義的緩存機制,如使用HTML Meta 標簽,Web開發(fā)者可以在HTML頁面的<head>節(jié)點中加入<meta>標簽,代碼如下:
<pre>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
</pre>
上述代碼的作用是告訴瀏覽器當前頁面不被緩存,每次訪問都需要去服務器拉取。使用上很簡單,但只有部分瀏覽器可以支持,而且所有緩存代理服務器都不支持,因為代理不解析HTML內(nèi)容本身。而廣泛應用的還是 HTTP頭信息 來控制緩存,下面我主要介紹HTTP協(xié)議定義的緩存機制。
②HTTP頭信息控制緩存
- 瀏覽器請求流程
-
控制緩存策略:
Expires :Expires是Web服務器響應消息頭字段,在響應http請求時告訴瀏覽器在過期時間前瀏覽器可以直接從瀏覽器緩存取數(shù)據(jù),而無需再次請求。不過Expires 是HTTP 1.0的東西,現(xiàn)在默認瀏覽器均默認使用HTTP 1.1,所以它的作用基本忽略。Expires 的一個缺點就是,返回的到期時間是服務器端的時間,這樣存在一個問題,如果客戶端的時間與服務器的時間相差很大(比如時鐘不同步,或者跨時區(qū)),那么誤差就很大,所以在HTTP 1.1版開始,使用Cache-Control: max-age=秒替代。
Cache-control:Cache-Control與Expires的作用一致,都是指明當前資源的有效期,控制瀏覽器是否直接從瀏覽器緩存取數(shù)據(jù)還是重新發(fā)請求到服務器取數(shù)據(jù)。只不過Cache-Control的選擇更多,設置更細致,如果同時設置的話,其優(yōu)先級高于Expires。
Last-Modified/If-Modified-Since:Last-Modified/If-Modified-Since要配合Cache-Control使用。- Last-Modified:標示這個響應資源的最后修改時間。web服務器在響應請求時,告訴瀏覽器資源的最后修改時間。
- If-Modified-Since:當資源過期時(使用Cache-Control標識的max-age),發(fā)現(xiàn)資源具有Last-Modified聲明,則再次向web服務器請求時帶上頭 If-Modified-Since,表示請求時間。web服務器收到請求后發(fā)現(xiàn)有頭If-Modified-Since 則與被請求資源的最后修改時間進行比對。若最后修改時間較新,說明資源又被改動過,則響應整片資源內(nèi)容(寫在響應消息包體內(nèi)),HTTP 200;若最后修改時間較舊,說明資源無新修改,則響應HTTP 304 (無需包體,節(jié)省瀏覽),告知瀏覽器繼續(xù)使用所保存的cache。
Etag/If-None-Match:Etag/If-None-Match也要配合Cache-Control使用。
- Etag:web服務器響應請求時,告訴瀏覽器當前資源在服務器的唯一標識(生成規(guī)則由服務器決定)。Apache中,ETag的值,默認是對文件的索引節(jié)(INode),大小(Size)和最后修改時間(MTime)進行Hash后得到的。
- If-None-Match:當資源過期時(使用Cache-Control標識的max-age),發(fā)現(xiàn)資源具有Etage聲明,則再次向web服務器請求時帶上頭If-None-Match (Etag的值)。web服務器收到請求后發(fā)現(xiàn)有頭If-None-Match 則與被請求資源的相應校驗串進行比對,決定返回200或304。
11. 下圖各個參數(shù)是什么意思(可選 難度*****
)
-
General
Request URL: 請求的資源地址。
Request Method: 請求的方式,此時為PUT。
Status Code: 狀態(tài)碼,此時為200,成功。
Remote Address: 請求的服務器的IP地址和端口號,此時為121.40.201.213:80。 -
Response Headers
Connection: keep-alive: 使客戶端到服務器端的連接持續(xù)有效。
Content-Length: Content-Length首部告訴瀏覽器報文中實體主體的大小。此時為12。
Content-Type: 決定如何顯示返回的消息實體,此時是json格式。
Date: 創(chuàng)建HTTP報文的時間和日期。
Server: 服務器上使用的應用程序的信息,此時為nginx/1.6.2。
X-Powered-By: 告訴HTTP客戶端處理請求和響應的是什么引擎,此時為Express。 -
Request Headers
Accept: 用戶代理可處理的媒體類型。
Accept-Encoding: 優(yōu)先的內(nèi)容編碼。
Accept-Language: 優(yōu)先的語言(自然語言)。
Connection: keep-alive: 使客戶端到服務器端的連接持續(xù)有效。
Content-Length: Content-Length首部告訴瀏覽器報文中實體主體的大小。此時為56。
Content-Type: 決定如何顯示返回的消息實體,此時設置編碼為UTF-8。
Cookie: 瀏覽器緩存。
Host: 使用的主機。
Origin: 說明最初的請求時從哪里發(fā)出。
Referer: 告訴瀏覽器頁面是從哪個頁面連接過來。
User-Agent: HTTP客戶端程序的信息。
X-Requested-With: 在服務器段判斷request來自Ajax請求(異步)還是傳統(tǒng)請求(同步)。此時為Ajax請求(異步)。
版權(quán)歸本人及饑人谷所有,轉(zhuǎn)載請注明出處。