1. 程式人生 > >HTTP常考面試題

HTTP常考面試題

HTTP與HTTPS的區別 HTTP 的URL 以http:// 開頭,而HTTPS 的URL 以https:// 開頭 HTTP 是不安全的,而 HTTPS 是安全的 HTTP 標準埠是80 ,而 HTTPS 的標準埠是443 在OSI 網路模型中,HTTP工作於應用層,而HTTPS 的安全傳輸機制工作在傳輸層 HTTP 無法加密,而HTTPS 對傳輸的資料進行加密 HTTP無需證書,而HTTPS 需要CA機構wosign的頒發的SSL證書 HTTPS工作原理 一、首先HTTP請求服務端生成證書,客戶端對證書的有效期、合法性、域名是否與請求的域名一致、證書的公鑰(RSA加密)等進行校驗; 二、客戶端如果校驗通過後,就根據證書的公鑰的有效, 生成隨機數,隨機數使用公鑰進行加密(RSA加密); 三、訊息體產生的後,對它的摘要進行MD5(或者SHA1)演算法加密,此時就得到了RSA簽名; 四、傳送給服務端,此時只有服務端(RSA私鑰)能解密。 五、解密得到的隨機數,再用AES加密,作為金鑰(此時的金鑰只有客戶端和服務端知道)。 什麼是Http協議無狀態協議?怎麼解決Http協議無狀態協議?

(1)無狀態協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊也就是說,當客戶端一次HTTP請求完成以後,客戶端再發送一次HTTP請求,HTTP並不知道當前客戶端是一個”老使用者“。 (2)可以使用Cookie來解決無狀態的問題,Cookie就相當於一個通行證,第一次訪問的時候給客戶端傳送一個Cookie,當客戶端再次來的時候,拿著Cookie(通行證),那麼伺服器就知道這個是”老使用者“。 URI,URL,URN的區別

URI,是uniform resource identifier,統一資源識別符號,用來唯一的標識一個資源。 Web上可用的每種資源如HTML文件、影象、視訊片段、程式等都是一個來URI來定位的 URI一般由三部組成: ①訪問資源的命名機制 ②存放資源的主機名 ③資源自身的名稱,由路徑表示,著重強調於資源。 URL是uniform resource locator,統一資源定位器,它是一種具體的URI,即URL可以用來標識一個資源,而且還指明瞭如何locate這個資源。 URL是Internet上用來描述資訊資源的字串,主要用在各種WWW客戶程式和伺服器程式上,特別是著名的Mosaic。 採用URL可以用一種統一的格式來描述各種資訊資源,包括檔案、伺服器的地址和目錄等。URL一般由三部組成: ①協議(或稱為服務方式) ②存有該資源的主機IP地址(有時也包括埠號) ③主機資源的具體地址。如目錄和檔名等 URN,uniform resource name,統一資源命名,是通過名字來標識資源,比如mailto:

[email protected]。 URI是以一種抽象的,高層次概念定義統一資源標識,而URL和URN則是具體的資源標識的方式。URL和URN都是一種URI。籠統地說,每個 URL 都是 URI,但不一定每個 URI 都是 URL。這是因為 URI 還包括一個子類,即統一資源名稱 (URN),它命名資源但不指定如何定位資源。上面的 mailto、news 和 isbn URI 都是 URN 的示例。 常用的HTTP方法有哪些? GET: 用於請求訪問已經被URI(統一資源識別符號)識別的資源,可以通過URL傳參給伺服器 POST:用於傳輸資訊給伺服器,主要功能與GET方法類似,但一般推薦使用POST方式。 PUT: 傳輸檔案,報文主體中包含檔案內容,儲存到對應URI位置。 HEAD: 獲得報文首部,與GET方法類似,只是不返回報文主體,一般用於驗證URI是否有效。 DELETE:刪除檔案,與PUT方法相反,刪除對應URI位置的檔案。 OPTIONS:查詢相應URI支援的HTTP方法。 常見的首部:

通用首部欄位(請求報文與響應報文都會使用的首部欄位) Date:建立報文時間 Connection:連線的管理 Cache-Control:快取的控制 Transfer-Encoding:報文主體的傳輸編碼方式 請求首部欄位(請求報文會使用的首部欄位) Host:請求資源所在伺服器 Accept:可處理的媒體型別 Accept-Charset:可接收的字符集 Accept-Encoding:可接受的內容編碼 Accept-Language:可接受的自然語言 響應首部欄位(響應報文會使用的首部欄位) Accept-Ranges:可接受的位元組範圍 Location:令客戶端重新定向到的URI Server:HTTP伺服器的安裝資訊 實體首部欄位(請求報文與響應報文的的實體部分使用的首部欄位) Allow:資源可支援的HTTP方法 Content-Type:實體主類的型別 Content-Encoding:實體主體適用的編碼方式 Content-Language:實體主體的自然語言 Content-Length:實體主體的的位元組數 Content-Range:實體主體的位置範圍,一般用於發出部分請求時使用 一次完整的HTTP請求所經歷的7個步驟 1、建立TCP連線 在HTTP工作開始之前,Web瀏覽器首先要通過網路與Web伺服器建立連線,該連線是通過TCP來完成的,該協議與IP協議共同構建 Internet,即著名的TCP/IP協議族,因此Internet又被稱作是TCP/IP網路。HTTP是比TCP更高層次的應用層協議,根據規則, 只有低層協議建立之後才能,才能進行更層協議的連線,因此,首先要建立TCP連線,一般TCP連線的埠號是80。 2、Web瀏覽器向Web伺服器傳送請求行 一旦建立了TCP連線,Web瀏覽器就會向Web伺服器傳送請求命令。例如:GET /sample/hello.jsp HTTP/1.1。 3、Web瀏覽器傳送請求頭 瀏覽器傳送其請求命令之後,還要以頭資訊的形式向Web伺服器傳送一些別的資訊,之後瀏覽器傳送了一空白行來通知伺服器,它已經結束了該頭資訊的傳送。 4、Web伺服器應答 客戶機向伺服器發出請求後,伺服器會客戶機回送應答, HTTP/1.1 200 OK ,應答的第一部分是協議的版本號和應答狀態碼。 5、Web伺服器傳送應答頭 正如客戶端會隨同請求傳送關於自身的資訊一樣,伺服器也會隨同應答向用戶傳送關於它自己的資料及被請求的文件。 6、Web伺服器向瀏覽器傳送資料 Web伺服器向瀏覽器傳送頭資訊後,它會發送一個空白行來表示頭資訊的傳送到此為結束,接著,它就以Content-Type應答頭資訊所描述的格式傳送使用者所請求的實際資料。 7、Web伺服器關閉TCP連線 一般情況下,一旦Web伺服器向瀏覽器傳送了請求資料,它就要關閉TCP連線,然後如果瀏覽器或者伺服器在其頭資訊加入了這行程式碼: Connection:keep-alive TCP連線在傳送後將仍然保持開啟狀態,於是,瀏覽器可以繼續通過相同的連線傳送請求。保持連線節省了為每個請求建立新連線所需的時間,還節約了網路頻寬。 建立TCP連線->傳送請求行->傳送請求頭->(到達伺服器)傳送狀態行->傳送響應頭->傳送響應資料->斷TCP連線 常見的HTTP相應狀態碼 200:請求被正常處理 204:請求被受理但沒有資源可以返回 206:客戶端只是請求資源的一部分,伺服器只對請求的部分資源執行GET方法,相應報文中通過Content-Range指定範圍的資源。 301:永久性重定向 302:臨時重定向 303:與302狀態碼有相似功能,只是它希望客戶端在請求一個URI的時候,能通過GET方法重定向到另一個URI上 304:傳送附帶條件的請求時,條件不滿足時返回,與重定向無關 307:臨時重定向,與302類似,只是強制要求使用POST方法 400:請求報文語法有誤,伺服器無法識別 401:請求需要認證 403:請求的對應資源禁止被訪問 404:伺服器無法找到對應資源 500:伺服器內部錯誤 503:伺服器正忙 HTTP1.1版本新特性

a、預設持久連線節省通訊量,只要客戶端服務端任意一端沒有明確提出斷開TCP連線,就一直保持連線,可以傳送多次HTTP請求 b、管線化,客戶端可以同時發出多個HTTP請求,而不用一個個等待響應 c、斷點續傳 HTTP優化 實際上就是利用HTTP訊息頭使用分塊傳輸編碼,將實體主體分塊傳輸。 TCP複用:TCP連線複用是將多個客戶端的HTTP請求複用到一個伺服器端TCP連線上,而HTTP複用則是一個客戶端的多個HTTP請求通過一個TCP連線進行處理。前者是負載均衡裝置的獨特功能;而後者是HTTP 1.1協議所支援的新功能,目前被大多數瀏覽器所支援。 內容快取:將經常用到的內容進行快取起來,那麼客戶端就可以直接在記憶體中獲取相應的資料了。 壓縮:將文字資料進行壓縮,減少頻寬 SSL加速(SSL Acceleration):使用SSL協議對HTTP協議進行加密,在通道內加密並加速 TCP緩衝:通過採用TCP緩衝技術,可以提高伺服器端響應時間和處理效率,減少由於通訊鏈路問題給伺服器造成的連線負擔。 GET方法和POST方法的區別 區別一: get重點在從伺服器上獲取資源,post重點在向伺服器傳送資料; 區別二: get傳輸資料是通過URL請求,以field(欄位)= value的形式,置於URL後,並用"?“連線,多個請求資料間用”&"連線,如http://127.0.0.1/Test/login.action?name=admin&password=admin,這個過程使用者是可見的; post傳輸資料通過Http的post機制,將欄位與對應值封存在請求實體中傳送給伺服器,這個過程對使用者是不可見的; 區別三: Get傳輸的資料量小,因為受URL長度限制,但效率較高;1024k Post可以傳輸大量資料,所以上傳檔案時只能用Post方式; 區別四: get是不安全的,因為URL是可見的,可能會洩露私密資訊,如密碼等; post較get安全性較高; 區別五: get方式只能支援ASCII字元,向伺服器傳的中文字元可能會亂碼。 post支援標準字符集,可以正確傳遞中文字元。 HTTP請求報文與響應報文格式 請求報文包含三部分: a、請求行:包含請求方法、URI、HTTP版本資訊 b、請求首部欄位 c、請求內容實體 響應報文包含三部分: a、狀態行:包含HTTP版本、狀態碼、狀態碼的原因短語 b、響應首部欄位 c、響應內容實體 cookie與session的區別 https://blog.csdn.net/wyn126/article/details/82700817 當我們輸入url,瀏覽器後臺發生了什麼? 1.首先當然是瀏覽器紅輸入url地址, 但是當你輸入baidu 為什麼最終的URL地址是www.baidu.com呢? 當你輸入baidu的時候,在url的後面是不是預設的給你新增上.com,如果是這樣,哈哈,那這第一步就是沒有錯誤的。 當你的URL程式設計baidu.com的時候,baidu.com是一個一級域名,那你訪問一個域名的時候,在Apache或者nginx上面的配置中就會給你訪問一個預設的二級域名(當你沒有寫完整時),這中間的過程十分的複雜,因為你直接訪問baidu.com和訪問www.baidu.com不僅僅是名字上的差別,而涉及到了一個重定向的問題,有想深入的孩子可以多查閱一下資料,或者也可以和我交流

2.輸入你的url地址之後,瀏覽器就開始好好工作了,尋找瀏覽器快取(可以從瀏覽器快取中取資料),系統快取,路由器(有時候也叫DNS快取)快取,看看有沒有快取過這個url中的資訊啊,這對於快速反應有著很大的幫助,有快取就可以直接呼叫快取了,沒有的話就去訪問DNS伺服器吧 瀏覽器快取參考:點選開啟連結 http://blog.csdn.net/longxibendi/article/details/41630389 DNS快取:首先客戶機將域名查詢請求傳送到本地DNS伺服器,本地DNS伺服器先在之前的記錄(快取)中查詢,如果有快取,則直接利用快取進行解析,如果沒有快取,則進入本地的快取的尋找。 本地快取:如果本地伺服器不能在本地找到快取,則將請求傳送到根域名DNS伺服器(全球13臺呢哈哈哈) 本地伺服器與網路伺服器:本地伺服器是內部區域網的裝置才能訪問,沒有公網的IP,網路伺服器有公網IP,屬於都會網路更大的巴拉巴拉,即屬於internet

3.請求終於來到了DNS伺服器,DNS伺服器將域名解析成IP地址, 域名解析:由於網路識別不認識什麼域名,這些都是字元組合的,計算機當然不認識,IP地址就認識了,域名解析就是將域名轉化成ip地址 DNS:domain name system 域名系統 域名為什麼存在呢,就是看一串ip地址會很難記住啊,就有了域名 域名結構:我們來看一個域名 .com 頂級域名 這是全球頂級域名 baidu.com 這是一級域名,一級域名就是在頂級域名前面加上一級 www.baidu.com 這是二級域名,百度的二級域名很多,還有tieba.baidu.com等等,可以上網搜一搜 http://:大家基友疑問了,這不是域名嗎?這是一種傳輸協議,還有很多其他的傳輸協議,就是網上傳輸東西的時候遵循的原則 IP地址:網際網路上面的每一臺主機有一個屬於自己的IP地址,用來遮蔽物理性的差異,IP地址就像現實中的住址一樣,有了IP就有了目標地了。