demo鎖屏面試題-http必問
====什么是http協(xié)議?
http(Hyper Text Transfer Protocol)協(xié)議是對客戶端和服務(wù)器端之間數(shù)據(jù)之間實現(xiàn)可靠性的傳輸文字、圖片、音頻、視頻等超文本數(shù)據(jù)的規(guī)范,格式簡稱為“超文本傳輸協(xié)議”
http協(xié)議屬于應(yīng)用層。
?
====http請求的請求報文和響應(yīng)報文的格式?(重點)
1)http請求報文:一個HTTP請求報文由請求行(request line)、請求頭部(header)、空行和請求數(shù)據(jù)4個部分組成
①請求行:請求行由請求方法字段、URL字段和HTTP協(xié)議版本字段3個字段組成,它們用空格分隔。例如,GET /index.html HTTP/1.1。
②請求頭部:請求頭部由關(guān)鍵字/值對組成,每行一對,關(guān)鍵字和值用英文冒號“:”分隔。請求頭部通知服務(wù)器有關(guān)于客戶端請求的信息,典型的請求頭有:
?
User-Agent:產(chǎn)生請求的瀏覽器類型。
?
Accept:客戶端可識別的內(nèi)容類型列表。
?
Host:請求的主機(jī)名,允許多個域名同處一個IP地址,即虛擬主機(jī)
③空行:最后一個請求頭之后是一個空行,發(fā)送回車符和換行符,通知服務(wù)器以下不再有請求頭。
④請求數(shù)據(jù):請求數(shù)據(jù)不在GET方法中使用,而是在POST方法中使用。POST方法適用于需要客戶填寫表單的場合。與請求數(shù)據(jù)相關(guān)的最常使用的請求頭是Content-Type和Content-Length
?
2)?http響應(yīng)報文:HTTP響應(yīng)由三個部分組成,分別是:狀態(tài)行、消息報頭、響應(yīng)正文。
①狀態(tài)行:由協(xié)議類型及版本號、狀態(tài)碼、狀態(tài)碼的文字描述組成它們之間用空格分隔,如:HTTP/1.1 200 OK
②消息報頭:與請求頭部格式一致
③響應(yīng)正文:響應(yīng)返回的主要信息內(nèi)容
?
====http和https的區(qū)別?
其實HTTPS就是從HTTP加上加密處理(一般是SSL安全通信線路)+認(rèn)證+完整性保護(hù)
區(qū)別:
1. https需要拿到ca證書
2. 端口不一樣,http是80,https443
3. http是超文本傳輸協(xié)議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協(xié)議。
4. http和https使用的是完全不同的連接方式(http的連接很簡單,是無狀態(tài)的;HTTPS 協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比http協(xié)議安全。)
?
====HTTPS工作原理?
一、首先HTTP請求服務(wù)端生成證書,客戶端對證書的有效期、合法性、域名是否與請求的域名一致、證書的公鑰(RSA加密)等進(jìn)行校驗;
二、客戶端如果校驗通過后,就根據(jù)證書的公鑰的有效, 生成隨機(jī)數(shù),隨機(jī)數(shù)使用公鑰進(jìn)行加密(RSA加密);
三、消息體產(chǎn)生的后,對它的摘要進(jìn)行MD5(或者SHA1)算法加密,此時就得到了RSA簽名;
四、發(fā)送給服務(wù)端,此時只有服務(wù)端(RSA私鑰)能解密。
五、解密得到的隨機(jī)數(shù),再用AES加密,作為密鑰(此時的密鑰只有客戶端和服務(wù)端知道)。
?
====一次完整的HTTP請求所經(jīng)歷幾個步驟?
1. 建立TCP連接
怎么建立連接的,看上面的三次捂手
2. Web瀏覽器向Web服務(wù)器發(fā)送請求行
一旦建立了TCP連接,Web瀏覽器就會向Web服務(wù)器發(fā)送請求命令。例如:GET /sample/hello.jsp?HTTP/1.1。
3. Web瀏覽器發(fā)送請求頭
瀏覽器發(fā)送其請求命令之后,還要以頭信息的形式向Web服務(wù)器發(fā)送一些別的信息,之后瀏覽器發(fā)送了一空白行來通知服務(wù)器,它已經(jīng)結(jié)束了該頭信息的發(fā)送。
4. Web服務(wù)器應(yīng)答
客戶機(jī)向服務(wù)器發(fā)出請求后,服務(wù)器會客戶機(jī)回送應(yīng)答, HTTP/1.1 200 OK ,應(yīng)答的第一部分是協(xié)議的版本號和應(yīng)答狀態(tài)碼。
5. Web服務(wù)器發(fā)送應(yīng)答頭
正如客戶端會隨同請求發(fā)送關(guān)于自身的信息一樣,服務(wù)器也會隨同應(yīng)答向用戶發(fā)送關(guān)于它自己的數(shù)據(jù)及被請求的文檔。
6. Web服務(wù)器向瀏覽器發(fā)送數(shù)據(jù)
?Web服務(wù)器向瀏覽器發(fā)送頭信息后,它會發(fā)送一個空白行來表示頭信息的發(fā)送到此為結(jié)束,接著,它就以Content-Type應(yīng)答頭信息所描述的格式發(fā)送用戶所請求的實際數(shù)據(jù)。
7.?Web服務(wù)器關(guān)閉TCP連接
?
====常用HTTP狀態(tài)碼是怎么分類的,有哪些常見的狀態(tài)碼?(重點)
類別:
1xx: 指示信息–表示請求已接收,正在處理
2xx: 成功–表示請求已被成功接收、理解、接受
3xx: 重定向–要完成請求必須進(jìn)行更進(jìn)一步的操作
4xx: 客戶端錯誤–請求有語法錯誤或請求無法實現(xiàn)
5xx: 服務(wù)器端錯誤–服務(wù)器未能實現(xiàn)合法的請求
常見狀態(tài)碼:
200: 請求被正常處理
204: 請求被受理但沒有資源可以返回
206:?客戶端只是請求資源的一部分,服務(wù)器只對請求的部分資源執(zhí)行GET方法,相應(yīng)
報文中通過Content-Range指定范圍的資源。
301: 永久性重定向
302: 臨時重定向
303: 與302狀態(tài)碼有相似功能,只是它希望客戶端在請求一個URI的時候,能通過GET
方法重定向到另一個URI上
304: 發(fā)送附帶條件的請求時,條件不滿足時返回,與重定向無關(guān)
307: 臨時重定向,與302類似,只是強制要求使用POST方法
400: 請求報文語法有誤,服務(wù)器無法識別
401: 請求需要認(rèn)證
403: 請求的對應(yīng)資源禁止被訪問
404: 服務(wù)器無法找到對應(yīng)資源
500: 服務(wù)器內(nèi)部錯誤
503: 服務(wù)器正忙
?
====Http協(xié)議中有那些請求方式?
GET:用于請求訪問已經(jīng)被URI(統(tǒng)一資源標(biāo)識符)識別的資源,可以通過URL傳
參給服務(wù)器
POST:用于傳輸信息給服務(wù)器,主要功能與GET方法類似,但一般推薦使用POST
方式。
PUT: 傳輸文件,報文主體中包含文件內(nèi)容,保存到對應(yīng)URI位置。
HEAD:獲得報文首部,與GET方法類似,只是不返回報文主體,一般用于驗證URI
是否有效。
PATCH: 客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容(部分取代)
TRACE: 回顯客戶端請求服務(wù)器的原始請求報文,用于"回環(huán)"診斷
DELETE: 刪除文件,與PUT方法相反,刪除對應(yīng)URI位置的文件。
OPTIONS: 查詢相應(yīng)URI支持的HTTP方法。
?
====GET方法與POST方法的區(qū)別?
區(qū)別一: get重點在從服務(wù)器上獲取資源,post重點在向服務(wù)器發(fā)送數(shù)據(jù);
區(qū)別二: Get傳輸?shù)臄?shù)據(jù)量小,因為受URL長度限制,但效率較高; Post可以傳輸大量數(shù)據(jù),所以上傳文件時只能用Post方式;
區(qū)別三: get是不安全的,因為get請求發(fā)送數(shù)據(jù)是在URL上,是可見的,可能會泄露私密信息,如密碼等; post是放在請求數(shù)據(jù)中的,是安全的
?
====http版本的對比?
HTTP1.0版本的特性:
?
==早先1.0的HTTP版本,是一種無狀態(tài)、無連接的應(yīng)用層協(xié)議。
==HTTP1.0規(guī)定瀏覽器和服務(wù)器保持短暫的連接,瀏覽器的每次請求都需要與服務(wù)器建立一個TCP連接,服務(wù)器處理完成后立即斷開TCP連接(無連接),服務(wù)器不跟蹤每個客戶端也不記錄過去的請求(無狀態(tài))。
?
HTTP1.1版本新特性
?
==默認(rèn)持久連接節(jié)省通信量,只要客戶端服務(wù)端任意一端沒有明確提出斷開TCP連接,就一直保持連接,可以發(fā)送多次HTTP請求
==管線化,客戶端可以同時發(fā)出多個HTTP請求,而不用一個個等待響應(yīng)
==斷點續(xù)傳原理
?
HTTP2.0版本的特性
?
==二進(jìn)制分幀(采用二進(jìn)制格式的編碼將其封裝)
==首部壓縮(設(shè)置了專門的首部壓縮設(shè)計的HPACK算法。)
==流量控制(設(shè)置了接收某個數(shù)據(jù)流的多少字節(jié)一些流量控制)
==多路復(fù)用(可以在共享TCP鏈接的基礎(chǔ)上同時發(fā)送請求和響應(yīng))
==請求優(yōu)先級(可以通過優(yōu)化這些幀的交錯和傳輸順序進(jìn)一步優(yōu)化性能)
==服務(wù)器推送(就是服務(wù)器可以對一個客戶端請求發(fā)送多個響應(yīng)。服務(wù)器向客戶端推送資源無需客戶端明確的請求。(重大更新))
?
====什么是cookie和session?
cookie是由Web服務(wù)器保存在用戶瀏覽器上的文件(key-value格式),可以包含用戶相關(guān)的信息??蛻舳讼蚍?wù)器發(fā)起請求,就提取瀏覽器中的用戶信息由http發(fā)送給服務(wù)器。
session 是瀏覽器和服務(wù)器會話過程中,服務(wù)器會分配的一塊儲存空間給session。
服務(wù)器默認(rèn)為客戶瀏覽器的cookie中設(shè)置 sessionid,這個sessionid就和cookie對應(yīng),瀏覽器在向服務(wù)器請求過程中傳輸?shù)腸ookie 包含 sessionid ,服務(wù)器根據(jù)傳輸cookie 中的 sessionid 獲取出會話中存儲的信息,然后確定會話的身份信息。
?
====cookie與session區(qū)別?
1. cookie數(shù)據(jù)存放在客戶端上,安全性較差,session數(shù)據(jù)放在服務(wù)器上,安全性相對更高
2. 單個cookie保存的數(shù)據(jù)不能超過4K,session無此限制 信息后,使用自己的私鑰進(jìn)行解密。 由于非對稱加密的方式不需要發(fā)送用來解密的私鑰,所以可以保證安全性;但是和對稱加密比起來,非常的慢
更多面試題或?qū)W習(xí)資源可查看我主頁或評論獲取