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