HTTP面試題都在這裏

HTTP常見面試題

Http與Https的區別:

Http與Https的區別:html

  1. HTTP 的URL 以http:// 開頭,而HTTPS 的URL 以https:// 開頭
  2. HTTP 是不安全的,而 HTTPS 是安全的
  3. HTTP 標準端口是80 ,而 HTTPS 的標準端口是443
  4. 在OSI 網絡模型中,HTTP工做於應用層,而HTTPS 的安全傳輸機制工做在傳輸層
  5. HTTP 沒法加密,而HTTPS 對傳輸的數據進行加密
  6. HTTP無需證書,而HTTPS 須要CA機構wosign的頒發的SSL證書

什麼是Http協議無狀態協議?怎麼解決Http協議無狀態協議?

  • 無狀態協議對於事務處理沒有記憶能力缺乏狀態意味着若是後續處理須要前面的信息
    • 也就是說,當客戶端一次HTTP請求完成之後,客戶端再發送一次HTTP請求,HTTP並不知道當前客戶端是一個」老用戶「。
  • 可使用Cookie來解決無狀態的問題,Cookie就至關於一個通行證,第一次訪問的時候給客戶端發送一個Cookie,當客戶端再次來的時候,拿着Cookie(通行證),那麼服務器就知道這個是」老用戶「。

URI和URL的區別

URI和URL的區別java

URI,是uniform resource identifier,統一資源標識符,用來惟一的標識一個資源。linux

  • Web上可用的每種資源如HTML文檔、圖像、視頻片斷、程序等都是一個來URI來定位的
  • URI通常由三部組成:
  • ①訪問資源的命名機制
  • ②存放資源的主機名
  • ③資源自身的名稱,由路徑表示,着重強調於資源。

URL是uniform resource locator,統一資源定位器,它是一種具體的URI,即URL能夠用來標識一個資源,並且還指明瞭如何locate這個資源。面試

  • URL是Internet上用來描述信息資源的字符串,主要用在各類WWW客戶程序和服務器程序上,特別是著名的Mosaic。
  • 採用URL能夠用一種統一的格式來描述各類信息資源,包括文件、服務器的地址和目錄等。URL通常由三部組成:
  • ①協議(或稱爲服務方式)
  • ②存有該資源的主機IP地址(有時也包括端口號)
  • ③主機資源的具體地址。如目錄和文件名等

URN,uniform resource name,統一資源命名,是經過名字來標識資源,好比mailto:java-net@java.sun.com。算法

  • URI是以一種抽象的,高層次概念定義統一資源標識,而URL和URN則是具體的資源標識的方式。URL和URN都是一種URI。籠統地說,每一個 URL 都是 URI,但不必定每一個 URI 都是 URL。這是由於 URI 還包括一個子類,即統一資源名稱 (URN),它命名資源但不指定如何定位資源。上面的 mailto、news 和 isbn URI 都是 URN 的示例。

在Java的URI中,一個URI實例能夠表明絕對的,也能夠是相對的,只要它符合URI的語法規則。而URL類則不只符合語義,還包含了定位該資源的信息,所以它不能是相對的。瀏覽器

在Java類庫中,URI類不包含任何訪問資源的方法,它惟一的做用就是解析。緩存

相反的是,URL類能夠打開一個到達資源的流。安全

經常使用的HTTP方法有哪些?

經常使用的HTTP方法有哪些?服務器

  • GET: 用於請求訪問已經被URI(統一資源標識符)識別的資源,能夠經過URL傳參給服務器
  • POST:用於傳輸信息給服務器,主要功能與GET方法相似,但通常推薦使用POST方式。
  • PUT: 傳輸文件,報文主體中包含文件內容,保存到對應URI位置。
  • HEAD: 得到報文首部,與GET方法相似,只是不返回報文主體,通常用於驗證URI是否有效。
  • DELETE:刪除文件,與PUT方法相反,刪除對應URI位置的文件。
  • OPTIONS:查詢相應URI支持的HTTP方法。

HTTP請求報文與響應報文格式

HTTP請求報文與響應報文格式微信

請求報文包含四部分:

  • a、請求行:包含請求方法、URI、HTTP版本信息
  • b、請求首部字段
  • c、請求內容實體
  • d、空行

響應報文包含四部分:

  • a、狀態行:包含HTTP版本、狀態碼、狀態碼的緣由短語
  • b、響應首部字段
  • c、響應內容實體
  • d、空行

常見的首部:

  • 通用首部字段(請求報文與響應報文都會使用的首部字段)
    • 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:實體主體的位置範圍,通常用於發出部分請求時使用

HTTPS工做原理

HTTPS工做原理

  • 1、首先HTTP請求服務端生成證書,客戶端對證書的有效期、合法性、域名是否與請求的域名一致、證書的公鑰(RSA加密)等進行校驗;
  • 2、客戶端若是校驗經過後,就根據證書的公鑰的有效, 生成隨機數,隨機數使用公鑰進行加密(RSA加密);
  • 3、消息體產生的後,對它的摘要進行MD5(或者SHA1)算法加密,此時就獲得了RSA簽名;
  • 4、發送給服務端,此時只有服務端(RSA私鑰)能解密。
  • 5、解密獲得的隨機數,再用AES加密,做爲密鑰(此時的密鑰只有客戶端和服務端知道)。

具體的參考連接:blog.csdn.net/sean_cd/art…

一次完整的HTTP請求所經歷的7個步驟

一次完整的HTTP請求所經歷的7個步驟

HTTP通訊機制是在一次完整的HTTP通訊過程當中,Web瀏覽器與Web服務器之間將完成下列7個步驟:

  • 創建TCP鏈接

在HTTP工做開始以前,Web瀏覽器首先要經過網絡與Web服務器創建鏈接,該鏈接是經過TCP來完成的,該協議與IP協議共同構建 Internet,即著名的TCP/IP協議族,所以Internet又被稱做是TCP/IP網絡。HTTP是比TCP更高層次的應用層協議,根據規則, 只有低層協議創建以後才能,才能進行更層協議的鏈接,所以,首先要創建TCP鏈接,通常TCP鏈接的端口號是80。

  • Web瀏覽器向Web服務器發送請求行

一旦創建了TCP鏈接,Web瀏覽器就會向Web服務器發送請求命令。例如:GET /sample/hello.jsp HTTP/1.1。

  • Web瀏覽器發送請求頭

    • 瀏覽器發送其請求命令以後,還要以頭信息的形式向Web服務器發送一些別的信息,以後瀏覽器發送了一空白行來通知服務器,它已經結束了該頭信息的發送。
  • Web服務器應答

    • 客戶機向服務器發出請求後,服務器會客戶機回送應答, HTTP/1.1 200 OK ,應答的第一部分是協議的版本號和應答狀態碼。
  • Web服務器發送應答頭

    • 正如客戶端會隨同請求發送關於自身的信息同樣,服務器也會隨同應答向用戶發送關於它本身的數據及被請求的文檔。
  • Web服務器向瀏覽器發送數據

    • Web服務器向瀏覽器發送頭信息後,它會發送一個空白行來表示頭信息的發送到此爲結束,接着,它就以Content-Type應答頭信息所描述的格式發送用戶所請求的實際數據
  • Web服務器關閉TCP鏈接

    • 通常狀況下,一旦Web服務器向瀏覽器發送了請求數據,它就要關閉TCP鏈接,而後若是瀏覽器或者服務器在其頭信息加入了這行代碼:

Connection:keep-alive

TCP鏈接在發送後將仍然保持打開狀態,因而,瀏覽器能夠繼續經過相同的鏈接發送請求。保持鏈接節省了爲每一個請求創建新鏈接所需的時間,還節約了網絡帶寬。

創建TCP鏈接->發送請求行->發送請求頭->(到達服務器)發送狀態行->發送響應頭->發送響應數據->斷TCP鏈接

最具體的HTTP請求過程:blog.51cto.com/linux5588/1…

常見的HTTP相應狀態碼

常見的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版本新特性

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緩衝技術,能夠提升服務器端響應時間和處理效率,減小因爲通訊鏈路問題給服務器形成的鏈接負擔。

詳情參考:

若是文章有錯的地方歡迎指正,你們互相交流。習慣在微信看技術文章的同窗,能夠關注微信公衆號:Java3y