1. 程式人生 > >HTTP面試題都在這裡

HTTP面試題都在這裡

HTTP常見面試題

Http與Https的區別:

Http與Https的區別:

  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的區別

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 的示例。

在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工作原理

  • 一、首先HTTP請求服務端生成證書,客戶端對證書的有效期、合法性、域名是否與請求的域名一致、證書的公鑰(RSA加密)等進行校驗;
  • 二、客戶端如果校驗通過後,就根據證書的公鑰的有效, 生成隨機數,隨機數使用公鑰進行加密(RSA加密);
  • 三、訊息體產生的後,對它的摘要進行MD5(或者SHA1)演算法加密,此時就得到了RSA簽名;
  • 四、傳送給服務端,此時只有服務端(RSA私鑰)能解密。
  • 五、解密得到的隨機數,再用AES加密,作為金鑰(此時的金鑰只有客戶端和服務端知道)。

一次完整的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相應狀態碼

常見的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

相關推薦

HTTP試題這裡

HTTP常見面試題 Http與Https的區別: Http與Https的區別: HTTP 的URL 以http:// 開頭,而HTTPS 的URL 以https:// 開頭 HTTP 是不安全的,而 HTTPS 是安全的 HTTP 標準埠是8

HTTP試題在這裏

報文 持久連接 mar put jsp cache cat 斷開 斷點 HTTP常見面試題 Http與Https的區別: Http與Https的區別: HTTP 的URL 以http:// 開頭,而HTTPS 的URL 以https:// 開頭 HTTP 是不安全的,

BAT等大廠總結的前200頁Java試題這裡

內容較多,請大家耐心閱讀 基本概念 作業系統中 heap 和 stack 的區別 什麼是基於註解的切面實現 什麼是 物件/關係 對映整合模組 什麼是 Java 的反射機制 什麼是 ACID BS與CS的聯絡與區別 Cookie 和 Session的區別 fa

大廠總結的前200頁Java試題這裡

基本概念作業系統中 heap 和 stack 的區別什麼是基於註解的切面實現什麼是 物件/關係

JSP試題在這裏

for 變量 自己 常用 sgk 有用 container lang tty 下面是我整理下來的JSP知識點: 圖上的知識點都可以在我其他的文章內找到相應內容。 JSP常見面試題 jsp靜態包含和動態包含的區別 jsp靜態包含和動態包含的區別 在講解request對

XML+JSON試題在這裏

定位 遠程服務 進行 是什麽 話費 常見 帶寬 我們 另一個 XML+JSON常見面試題 什麽是JSON和XML 什麽是JSON和XML JSON:JavaScript Object Notation 【JavaScript 對象表示法】. XML:extensiabl

AJAX試題在這裏

成功 資料 nfa tel status 解決 ole 對象 地址 AJAX常見面試題 什麽是AJAX,為什麽要使用Ajax AJAX是“Asynchronous JavaScript and XML”的縮寫。他是指一種創建交互式網頁應用的網頁開發技術。、 客戶端與服務器,

[計算機網路] HTTP試題大全(持續更新中)

1. 什麼是HTTP協議? 答:HTTP,即超文字傳輸協議,是TCP/IP協議族的應用層協議,它是Web的核心協議。談論HTTP通常涉及兩種程式:客戶程式和伺服器程式,客戶程式和伺服器程式執行在不同的端系統中,通過交換HTTP報文進行會話。HTTP協議定義了這些報文的結構以

這幾道Redis試題不懂,怎麽拿offer?

sid data 自己 隊列 開始 更新 分布式 參數 惰性 一、緩存雪崩1.1什麽是緩存雪崩?回顧一下我們為什麽要用緩存(Redis):為什麽要緩存 現在有個問題,如果我們的緩存掛掉了,這意味著我們的全部請求都跑去數據庫了。如果緩存掛掉了,全部請求跑去數據庫了 在前面學習

史上最全的BAT大廠Mysql試題這裡

1、MySQL的複製原理以及流程 基本原理流程,3個執行緒以及之間的關聯; 主:binlog執行緒——記錄下所有改變了資

昨天去面試,這5個Python試題被考到了,Python試題No6

第1題:字串的拼接–如何高效的拼接兩個字串? 字串拼接的幾種方法 加號 逗號 直接連線 格式化 join 多行字串拼接() 加號 print('Python' + 'Plus') 逗號 print("Hello", "Python"

這幾道Redis試題不懂,offer肯定與你擦肩而過

  今天來分享一下Redis幾道常見的面試題: 如何解決快取雪崩? 如何解決快取穿透? 如何保證快取與資料

那些年你踩過的坑,這裡了~|試題填坑大全

HTML   1、什麼是盒子模型?     有些面試官會問你對盒子模型的理解,在我們平時看到的網頁中,內部的每一個標籤元素它都是有幾個部分構成的:內容(content)、外邊距(margin)、內邊距(padding)、邊框(border),四個部分組成

百度Java試題前200頁和答案這裡

1.BlockingQueue佇列和平常佇列一樣都可以用來作為儲存資料的容器,但有時候線上程當中涉及到資料儲存的時候就會出現問題,而BlockingQueue是空的話,如果一個執行緒要從BlockingQueue裡取資料的時候,該執行緒將會被阻斷,並進入等待狀態,直到BlockingQueue裡面有資料存入了

Java 試題 :百度前 200 頁這裡

基本概念作業系統中 heap 和 stack 的區別什麼是基於註解的切面實現什麼是 物件/關係 對映整合模組什麼是 Java 的反射機制什麼是 ACIDBS與CS的聯絡與區別Cookie 和 Session的區別fail-fast 與 fail-safe 機制有什麼區別get

200道iOS試題試題整理,底層、技術亮點公司需要的這裡

100家知名企業今年來iOS面試題合集: 你要的這裡都有; 企業要的這裡也有; 從基礎開始到進階、深入底層 整理出188個面試題,全是乾貨 這些全部是題目跟類目,每個題目都會有相對的答案,由於字數太多所以我整理出一個文件,文件獲取地址,關注作者微信公眾號獲取, 目

百度"Java試題"前200頁這裡

歡迎關注java技術學習之道,本公眾號長期分享各種技術文章。基本概念作業系統中 heap 和 stack 的區別什麼是基於註解的切面實現什麼是 物件/關係 對映整合模組什麼是 Java 的反射機制什麼是 ACIDBS與CS的聯絡與區別Cookie 和 Session的區別fa

每一個JavaScript開發者應該知道的10道試題

結束 vid 認識 本質 特定 更新 mixin 構造函數 程序猿 JavaScript十分特別。而且差點兒在每一個大型應用中起著至關關鍵的數據。那麽,究竟是什麽使JavaScript顯得與眾不同,意義非凡? 這裏有一些問題將幫助你了解其真正的奧妙所在:

http協議試題總結

基於 value field 發送 數據 nbsp 常數 面試 http協議 一、http協議基於tcp協議 當瀏覽器需要從服務器獲取數據時 那麽就會發送一個http請求 這時 http請求會通過tcp建立一個服務器通道 請求後會斷開連接進入無畏狀態 所以htt

【前端小小白的學習之路】整理幾道試題之(HTTP協議)【轉】

ase 賬號 檢測 提交數據 大型數據集 tor 添加 描述 分享 轉自:http://www.cnblogs.com/ranyonsue/p/5984001.html HTTP簡介 HTTP協議是Hyper Text Transfer Protocol(超文本傳輸