人生就像一列開(kāi)往墳?zāi)沟牧熊囍5吠旧蠒?huì)有很多站夜赵,很難有人至始至終陪你走完全程,當(dāng)陪你的人要下車時(shí)乡革,即便不舍寇僧,也要心存感激,然后揮手告別沸版。---sunnyhuang
HTTP
1. OSI 七層模型指什么
開(kāi)放式系統(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ù)鏈路層:可以簡(jiǎn)單的理解為:規(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)求:通過(guò)已經(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ù)器將資源副本寫(xiě)到TCP連接,由客戶端讀取
- 釋放TCP連接:若connection模式為close俊性,則服務(wù)器主動(dòng)關(guān)閉TCP連接略步,釋放TCP連接,若connection模式為keep alive定页,則該連接會(huì)保持一段時(shí)間典徊,在該時(shí)間內(nèi)可以繼續(xù)接受請(qǐng)求
3.URL的格式是什么卒落?常見(jiàn)的協(xié)議
URL(統(tǒng)一資源定位符):協(xié)議+域名+端口+路徑組成
常見(jiàn)的協(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)用于
- 在不獲取資源的情況下獲取資源信息(類型峡迷、大小等)
- 通過(guò)狀態(tài)碼產(chǎn)看資源是否存在
- 通過(guò)查看首部凉当,測(cè)試資源是否被修改了
-
HEAD
方法常被用于客戶端查看服務(wù)器的性能看杭。
- PUT: 和GET從服務(wù)器獲取資源相反,PUT用于想服務(wù)器寫(xiě)入資源模孩。PUT的語(yǔ)義就是讓服務(wù)器用請(qǐng)求的主體部分創(chuàng)建一個(gè)請(qǐng)求URL命名的文檔榨咐,如果存在就替換块茁。
- TRACE: 客戶端發(fā)送一個(gè)請(qǐng)求的時(shí)候,這個(gè)請(qǐng)求可能會(huì)穿過(guò)防火墻崎场、代理谭跨、網(wǎng)關(guān)和一些其它應(yīng)用程序,沒(méi)個(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)地訪問(wèn)新的URL地址 Moved Permanently(永久行的移動(dòng))
**302: ** ---類似于301妓笙,但是表示臨時(shí)的替代,而不是永久性替代捧灰,瀏覽器也會(huì)自動(dòng)跳到新的URL地址, “Moved Temporatily”(臨時(shí)的移動(dòng))
304: ---(未修改)自從上次請(qǐng)求后饲窿,請(qǐng)求的內(nèi)容沒(méi)有被修改過(guò)逾雄,不會(huì)返回內(nèi)容鸦泳,直接用瀏覽器的緩存內(nèi)容。通常(If-Modified-Since在請(qǐng)求頭中钾麸,瀏覽器端緩存頁(yè)面的最后修改時(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ù)器目前無(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)求一般沒(méi)有數(shù)據(jù)的內(nèi)容*/
響應(yīng)報(bào)文: 將請(qǐng)求結(jié)果返回給客戶端
<version><status><reason-phrase>
<headers>
<entity-body>
7.請(qǐng)求頭的格式和作用是什么寂殉?給個(gè)范例截圖說(shuō)明
格式:鍵值對(duì)
作用:告訴客戶端一些請(qǐng)求的基本要求和樣式
8.首部的格式和作用是什么囚巴?給個(gè)范例截圖說(shuō)明
格式: 鍵值對(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 簡(jiǎn)述瀏覽器緩存是如何控制的
第一次請(qǐng)求
有緩存后第二次請(qǐng)求
- Cache-control:每個(gè)資源都可以通過(guò)設(shè)置cache-control來(lái)簡(jiǎn)歷緩存策略。例如,若設(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è)消息處理過(guò)程中的緩存處理過(guò)程
- Expires:響應(yīng)頭從另一個(gè)角度——指明緩存的具體過(guò)期日期,來(lái)控制資源何時(shí)過(guò)期衙四。在過(guò)期時(shí)間以內(nèi),若再次發(fā)起請(qǐng)求,通常瀏覽器都不會(huì)與服務(wù)器進(jìn)行任何通信灾搏,而是直接使用本地副本拷肌。當(dāng) Expires 和 Cache-Control 同時(shí)出現(xiàn)時(shí)若锁,通常后者會(huì)覆蓋前者的設(shè)定乏冀。 ----Response Headers中,指定過(guò)期時(shí)間
- Last-Modified和ETag:服務(wù)器可在 HTTP 返回頭中包含Last-Modified字段或者ETag字段。Last-Modified 表示被請(qǐng)求資源在服務(wù)器端的上次修改時(shí)間,而 ETag 則是一個(gè)唯一文件標(biāo)識(shí)符,每次文件修改后都會(huì)生成一個(gè)新的 ETag析蝴。服務(wù)器通過(guò)向?yàn)g覽器發(fā)送這兩個(gè)字段裁赠,來(lái)告知瀏覽器其獲得的資源的版本佩捞。
無(wú)論通過(guò) Cache-Control 還是 Expires 設(shè)置緩存绞幌,在過(guò)期時(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ù)下載量胶背。此外,如果緩存的資源已過(guò)期喘先,瀏覽器通常有兩種選擇:重新下載這個(gè)資源钳吟,或發(fā)出一個(gè)條件請(qǐng)求。很多瀏覽器都會(huì)采取后者窘拯,以節(jié)約資源红且。 - ---Last-modified實(shí)體頭指定服務(wù)器上保存內(nèi)容的最后修訂時(shí)間。
- Pragma:指定“no-cache”值表示服務(wù)器必須返回一個(gè)刷新后的文檔涤姊,即使它是代理服務(wù)器而且已經(jīng)有了頁(yè)面的本地拷貝暇番。
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)頁(yè)面包含多個(gè)元素時(shí)(例如Applet,圖片)恨课,顯著地減少下載所需要的時(shí)間舆乔。
- Content-Length: 表示實(shí)際傳輸返回的長(zhǎng)度
- Date: 返回文檔的當(dāng)?shù)貢r(shí)間
- server: 表示服務(wù)器的類型
- X-Powered-By: 表示語(yǔ)言解析器
請(qǐng)求頭(Request Headers)
- accept: 瀏覽器可接受的MIME類型。
- Accept-Encoding 瀏覽器能夠進(jìn)行解碼的數(shù)據(jù)編碼方式剂公,比如gzip希俩。Servlet能夠向支持gzip的瀏覽器返回經(jīng)gzip編碼的HTML頁(yè)面。許多情形下這可以減少5到10倍的下載時(shí)間纲辽。
- Accept-Language:瀏覽器所希望的語(yǔ)言種類颜武,當(dāng)服務(wù)器能夠提供一種以上的語(yǔ)言版本時(shí)要用到。
- Connection:表示是否需要持久連接
- Content-Length:表示請(qǐng)求消息正文的長(zhǎng)度拖吼。
- Content- Type 表示后面的文檔屬于什么MIME類型盒刚。Servlet默認(rèn)為text/plain,但通常需要顯式地指定為text/html绿贞。由于經(jīng)常要設(shè)置 Content-Type,因此HttpServletResponse提供了一個(gè)專用的方法setContentTyep橘原。
- Cookie: 個(gè)人的信息保存量籍铁,來(lái)區(qū)分不同的人不同的界面
- Host: 指定請(qǐng)求資源的Intenet主機(jī)和端口號(hào),必須表示請(qǐng)求url的原始服務(wù)器或網(wǎng)關(guān)的位置趾断。
- Origin: 用來(lái)說(shuō)明最初請(qǐng)求是從哪里發(fā)起的,只用于post請(qǐng)求
- Referer: 表示上一個(gè)頁(yè)面的地址拒名,包含一個(gè)URL,用戶從該URL代表的頁(yè)面出發(fā)訪問(wèn)當(dāng)前請(qǐng)求的頁(yè)面芋酌。
- User-agent: 瀏覽器類型增显,如果Servlet返回的內(nèi)容與瀏覽器類型有關(guān)則該值非常有用。
- X-Requested-With: 用于區(qū)分是傳統(tǒng)的同步請(qǐng)求脐帝,還是AJAX異步請(qǐng)求