人生就像一列開往墳?zāi)沟牧熊?,路途上?huì)有很多站,很難有人至始至終陪你走完全程,當(dāng)陪你的人要下車時(shí),即便不舍,也要心存感激,然后揮手告別。---sunnyhuang
HTTP
1. OSI 七層模型指什么

開放式系統(tǒng)互聯(lián)通信參考模型(OSI)
主機(jī)層
Data(數(shù)據(jù)層)7.應(yīng)用層 6. 表示層 5.會(huì)話層
Segments(數(shù)據(jù)段) 4.傳輸層
媒介層
網(wǎng)絡(luò)分組/數(shù)據(jù)報(bào)文 3. 網(wǎng)絡(luò)層
Bit/Frame(數(shù)據(jù)幀) 2. 數(shù)據(jù)鏈路層
Bit(比特) 1. 物理層
應(yīng)用層: 規(guī)定了數(shù)據(jù)的傳輸協(xié)議,提供為應(yīng)用軟件而設(shè)的界面,以設(shè)置與另一應(yīng)用軟件之間的通信。例如: HTTP,HTTPS,F(xiàn)TP,TELNET,SSH,SMTP,POP3等。
表示層:解決不同系統(tǒng)之間的通信。例如:linux下的qq和windows下的qq可以通信
會(huì)話層:建立一個(gè)連接(自動(dòng)的手機(jī)信息,自動(dòng)的網(wǎng)絡(luò)尋址)
傳輸層:每一個(gè)應(yīng)用程序都會(huì)在網(wǎng)卡注冊(cè)一個(gè)端口號(hào),該層就是端口和端口之間的通信,常用的是TCP/IP協(xié)議
網(wǎng)絡(luò)層:此處需要確定計(jì)算機(jī)的位置,怎么確定?IPv4,IPv6!
數(shù)據(jù)鏈路層:可以簡單的理解為:規(guī)定了0和1的分包形式,確定了網(wǎng)絡(luò)數(shù)據(jù)包的形式
物理層:物理層負(fù)責(zé)最后將信息編碼成電流脈沖或其它信號(hào)用于網(wǎng)上傳輸
2.HTTP 的工作原理是什么?
HTTP(超文本傳輸協(xié)議)是應(yīng)用層協(xié)議。HTTP協(xié)議采用的是請(qǐng)求/響應(yīng)模型,當(dāng)客戶端給服務(wù)器建立連接后,向服務(wù)器發(fā)送一個(gè)請(qǐng)求,服務(wù)器接收到相應(yīng)的請(qǐng)求后,給客戶端一個(gè)響應(yīng)信息。
- 客戶端連接到web服務(wù)器:HTTP客戶端與web服務(wù)器建立一個(gè)TCP連接
- 客戶端向服務(wù)器發(fā)起HTTP請(qǐng)求:通過已經(jīng)創(chuàng)建好了的TCP連接,客戶端給服務(wù)器發(fā)送一個(gè)請(qǐng)求報(bào)文
- 服務(wù)器接收HTTP請(qǐng)求并返回HTTP響應(yīng):服務(wù)器解析請(qǐng)求,定位請(qǐng)求資源,服務(wù)器將資源副本寫到TCP連接,由客戶端讀取
- 釋放TCP連接:若connection模式為close,則服務(wù)器主動(dòng)關(guān)閉TCP連接,釋放TCP連接,若connection模式為keep alive,則該連接會(huì)保持一段時(shí)間,在該時(shí)間內(nèi)可以繼續(xù)接受請(qǐng)求
3.URL的格式是什么?常見的協(xié)議
URL(統(tǒng)一資源定位符):協(xié)議+域名+端口+路徑組成
常見的協(xié)議
- 網(wǎng)絡(luò)層協(xié)議: IP協(xié)議、ICMP協(xié)議、ARP協(xié)議、RARP協(xié)議。
- 傳輸層協(xié)議:TCP協(xié)議、UDP協(xié)議。
- 應(yīng)用層協(xié)議: FTP、Talnet、HTTP、SMTP
4.HTTP 協(xié)議有幾種和服務(wù)器交互的方法
- GET:最常用的方法,通常用于請(qǐng)求服務(wù)器發(fā)送某個(gè)資源,通常返回在響應(yīng)主體
- POST: 向指定資源提交數(shù)據(jù),請(qǐng)求服務(wù)器進(jìn)行處理,如:表單的數(shù)據(jù)提交,文件的上傳等,請(qǐng)求數(shù)據(jù)會(huì)被包含在請(qǐng)求體中。
- HEAD: 和GET方法類似,但是它不會(huì)資源的內(nèi)容,而是返回資源的一些基本信息。主要運(yùn)用于
- 在不獲取資源的情況下獲取資源信息(類型、大小等)
- 通過狀態(tài)碼產(chǎn)看資源是否存在
- 通過查看首部,測(cè)試資源是否被修改了
-
HEAD方法常被用于客戶端查看服務(wù)器的性能。
- PUT: 和GET從服務(wù)器獲取資源相反,PUT用于想服務(wù)器寫入資源。PUT的語義就是讓服務(wù)器用請(qǐng)求的主體部分創(chuàng)建一個(gè)請(qǐng)求URL命名的文檔,如果存在就替換。
- TRACE: 客戶端發(fā)送一個(gè)請(qǐng)求的時(shí)候,這個(gè)請(qǐng)求可能會(huì)穿過防火墻、代理、網(wǎng)關(guān)和一些其它應(yīng)用程序,沒個(gè)中間節(jié)點(diǎn)都可能修改HTTP請(qǐng)求,TRACE方法允許客戶端在最終請(qǐng)求發(fā)往服務(wù)器的時(shí)候,看看它變成了什么樣子。
- DELETTE:用于要求服務(wù)器刪除請(qǐng)求的URL。
- OPTIONS: OPTIONS方法用于請(qǐng)求 web服務(wù)器告知其支持的各種功能
5.狀態(tài)碼200,301,304,403,404,500,503分別代表什么意思
200: 表示請(qǐng)求得到響應(yīng)的相應(yīng) OK
**301: **表示客戶請(qǐng)求的文檔在其他地方,新的URL在Location中指出,瀏覽器會(huì)自動(dòng)地訪問新的URL地址 Moved Permanently(永久行的移動(dòng))

**302: ** ---類似于301,但是表示臨時(shí)的替代,而不是永久性替代,瀏覽器也會(huì)自動(dòng)跳到新的URL地址, “Moved Temporatily”(臨時(shí)的移動(dòng))
304: ---(未修改)自從上次請(qǐng)求后,請(qǐng)求的內(nèi)容沒有被修改過,不會(huì)返回內(nèi)容,直接用瀏覽器的緩存內(nèi)容。通常(If-Modified-Since在請(qǐng)求頭中,瀏覽器端緩存頁面的最后修改時(shí)間一起發(fā)到服務(wù)器去,服務(wù)器會(huì)把這個(gè)時(shí)間與服務(wù)器上實(shí)際文件的最后修改時(shí)間Last-Modified進(jìn)行比較,如果時(shí)間一致,就使用緩存)If-Modified-Since解析
403: ---(禁止)資源不可用,服務(wù)器理解客戶的請(qǐng)求,但拒絕處理它。通常由于服務(wù)器上文件或目錄的權(quán)限設(shè)置導(dǎo)致。Forbidden
404: ---(未找到) 找不到資源 Not Found
500: ---(服務(wù)器內(nèi)部錯(cuò)誤)服務(wù)器遇到了意料不到的情況,不能完成客戶的請(qǐng)求
503: --- (服務(wù)不可用)服務(wù)器目前無法使用(由于超載或停機(jī)維護(hù))
6.報(bào)文有哪幾部分組成?
一個(gè)HTTO報(bào)文有三部分組成
- 對(duì)報(bào)文進(jìn)行描述的起始行 ----start line
- 包含屬性的首部塊 ----header
- 可選的包含數(shù)據(jù)的主體部分 ----body
HTTP報(bào)文分2大類
請(qǐng)求報(bào)文 :向web服務(wù)器請(qǐng)求一個(gè)動(dòng)作
<method><request-URL><version>
<headers>
<entity-body> /*請(qǐng)求一般沒有數(shù)據(jù)的內(nèi)容*/
響應(yīng)報(bào)文: 將請(qǐng)求結(jié)果返回給客戶端
<version><status><reason-phrase>
<headers>
<entity-body>
7.請(qǐng)求頭的格式和作用是什么?給個(gè)范例截圖說明
格式:鍵值對(duì)
作用:告訴客戶端一些請(qǐng)求的基本要求和樣式

8.首部的格式和作用是什么?給個(gè)范例截圖說明
格式: 鍵值對(duì)
首部的分類:1. 通用首部字段(General)2. 請(qǐng)求首部字段(Request),3. 響應(yīng)首部字段(Response),4. 實(shí)體首部字段(Entity)

9主體的作用是什么?給個(gè)范例
主體: 主體是HTTP的第三個(gè)部分,該部分是可選擇的,一般有主體的請(qǐng)求方法是post。主體是HTTP報(bào)文的負(fù)荷,就是HTTP所要傳輸?shù)膬?nèi)容。

10 簡述瀏覽器緩存是如何控制的
第一次請(qǐng)求

有緩存后第二次請(qǐng)求

- Cache-control:每個(gè)資源都可以通過設(shè)置cache-control來簡歷緩存策略。例如,若設(shè)定Cache-Control: max-age=604800,(單位為秒),則表示這個(gè)資源的有效時(shí)間為 7 天。 ----服務(wù)器返回Cache- Control指定請(qǐng)求和響應(yīng)遵循的緩存機(jī)制。在請(qǐng)求消息或響應(yīng)消息中設(shè)置 Cache-Control并不會(huì)修改另一個(gè)消息處理過程中的緩存處理過程
- Expires:響應(yīng)頭從另一個(gè)角度——指明緩存的具體過期日期,來控制資源何時(shí)過期。在過期時(shí)間以內(nèi),若再次發(fā)起請(qǐng)求,通常瀏覽器都不會(huì)與服務(wù)器進(jìn)行任何通信,而是直接使用本地副本。當(dāng) Expires 和 Cache-Control 同時(shí)出現(xiàn)時(shí),通常后者會(huì)覆蓋前者的設(shè)定。 ----Response Headers中,指定過期時(shí)間
- Last-Modified和ETag:服務(wù)器可在 HTTP 返回頭中包含Last-Modified字段或者ETag字段。Last-Modified 表示被請(qǐng)求資源在服務(wù)器端的上次修改時(shí)間,而 ETag 則是一個(gè)唯一文件標(biāo)識(shí)符,每次文件修改后都會(huì)生成一個(gè)新的 ETag。服務(wù)器通過向?yàn)g覽器發(fā)送這兩個(gè)字段,來告知瀏覽器其獲得的資源的版本。
無論通過 Cache-Control 還是 Expires 設(shè)置緩存,在過期時(shí)間以內(nèi),當(dāng)用戶點(diǎn)擊瀏覽器刷新按鈕時(shí),為了確保用戶所加載的資源是最新的,大部分瀏覽器不會(huì)再直接使用緩存中的數(shù)據(jù),而是發(fā)出一個(gè)條件請(qǐng)求(Conditional GET Request)。對(duì)于這類請(qǐng)求,瀏覽器會(huì)在請(qǐng)求頭中包含If-Modified-Since或If-None-Match字段。前者即瀏覽器當(dāng)初得到的 Last-Modified;后者即瀏覽器當(dāng)初得到的 ETag。當(dāng)服務(wù)器發(fā)現(xiàn)資源的更新時(shí)間晚于 If-Modified-Since 所提供的時(shí)間,或者資源在服務(wù)器端當(dāng)前的 ETag 和 If-None-Match 提供的不符時(shí),會(huì)響應(yīng)整個(gè)資源,否則只會(huì)響應(yīng)一個(gè) 304 Not Modified 狀態(tài)碼(因此瀏覽器將不需要重新下載整個(gè)資源)。這種機(jī)制可以最大程度上減少數(shù)據(jù)下載量。此外,如果緩存的資源已過期,瀏覽器通常有兩種選擇:重新下載這個(gè)資源,或發(fā)出一個(gè)條件請(qǐng)求。很多瀏覽器都會(huì)采取后者,以節(jié)約資源。 - ---Last-modified實(shí)體頭指定服務(wù)器上保存內(nèi)容的最后修訂時(shí)間。
- Pragma:指定“no-cache”值表示服務(wù)器必須返回一個(gè)刷新后的文檔,即使它是代理服務(wù)器而且已經(jīng)有了頁面的本地拷貝。
11.下圖各個(gè)參數(shù)是什么意思
通用首部General
- Request URL: 資源的路徑
- Request Method: 資源的請(qǐng)求的方法
- Status Code: 返回的狀態(tài)碼
- Remote Address: 遠(yuǎn)程服務(wù)器的ip地址和端口號(hào)
反應(yīng)頭部(Response Headers)
- Connection:表示是否需要持久連接(close/keep-alive ),如果Servlet看到這里的值為“Keep- Alive”,或者看到請(qǐng)求使用的是HTTP 1.1(HTTP 1.1默認(rèn)進(jìn)行持久連接),它就可以利用持久連接的優(yōu)點(diǎn),當(dāng)頁面包含多個(gè)元素時(shí)(例如Applet,圖片),顯著地減少下載所需要的時(shí)間。
- Content-Length: 表示實(shí)際傳輸返回的長度
- Date: 返回文檔的當(dāng)?shù)貢r(shí)間
- server: 表示服務(wù)器的類型
- X-Powered-By: 表示語言解析器
請(qǐng)求頭(Request Headers)
- accept: 瀏覽器可接受的MIME類型。
- Accept-Encoding 瀏覽器能夠進(jìn)行解碼的數(shù)據(jù)編碼方式,比如gzip。Servlet能夠向支持gzip的瀏覽器返回經(jīng)gzip編碼的HTML頁面。許多情形下這可以減少5到10倍的下載時(shí)間。
- Accept-Language:瀏覽器所希望的語言種類,當(dāng)服務(wù)器能夠提供一種以上的語言版本時(shí)要用到。
- Connection:表示是否需要持久連接
- Content-Length:表示請(qǐng)求消息正文的長度。
- Content- Type 表示后面的文檔屬于什么MIME類型。Servlet默認(rèn)為text/plain,但通常需要顯式地指定為text/html。由于經(jīng)常要設(shè)置 Content-Type,因此HttpServletResponse提供了一個(gè)專用的方法setContentTyep。
- Cookie: 個(gè)人的信息保存量,來區(qū)分不同的人不同的界面
- Host: 指定請(qǐng)求資源的Intenet主機(jī)和端口號(hào),必須表示請(qǐng)求url的原始服務(wù)器或網(wǎng)關(guān)的位置。
- Origin: 用來說明最初請(qǐng)求是從哪里發(fā)起的,只用于post請(qǐng)求
- Referer: 表示上一個(gè)頁面的地址,包含一個(gè)URL,用戶從該URL代表的頁面出發(fā)訪問當(dāng)前請(qǐng)求的頁面。
- User-agent: 瀏覽器類型,如果Servlet返回的內(nèi)容與瀏覽器類型有關(guān)則該值非常有用。
- X-Requested-With: 用于區(qū)分是傳統(tǒng)的同步請(qǐng)求,還是AJAX異步請(qǐng)求