HTTP常見面試題

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證書

什麼是SSL證書?

SSL 證書提供了一種在互聯網上身份驗證的方式,是用來標識和證明通信雙方身份的數字信息文件。使用SSL 證書的網站,可以保證用戶和服務器間信息交換的保密性,具有不可竊聽、不可更改、不可否認、不可冒充的功能。

OSI七層:

物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層

TCP/IP:

接口層、網絡層、傳輸層、應用層

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

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

URI和URL的區別


URI

URI,是uniform resource identifier,統一資源標識符,用來唯一的標識一個資源。Web上可用的每種資源如HTML文檔、圖像、視頻片段、程序等都是一個來URI來定位的。URI一般由三部組成:

  • 訪問資源的命名機制
  • 存放資源的主機名
  • 資源自身的名稱,由路徑表示,着重強調於資源。

URL

URL是uniform resource locator,統一資源定位器,它是一種具體的URI,即URL可以用來標識一個資源,而且還指明瞭如何locate這個資源。URL是Internet上用來描述信息資源的字符串,主要用在各種WWW客戶程序和服務器程序上,特別是著名的Mosaic。採用URL可以用一種統一的格式來描述各種信息資源,包括文件、服務器的地址和目錄等。URL一般由三部組成:

  • 協議(或稱爲服務方式)
  • 存有該資源的主機IP地址(有時也包括端口號)
  • 主機資源的具體地址。如目錄和文件名等

總結

在Java的URI中,一個URI實例可以代表絕對的,也可以是相對的,只要它符合URI的語法規則。而URL類則不僅符合語義,還包含了定位該資源的信息,因此它不能是相對的。URI標記了一個網絡資源,僅此而已; URL標記了一個WWW互聯網資源(用地址標記),並給出了他的訪問地址。

HTTPS工作原理

一、首先HTTP請求服務端生成證書,客戶端對證書的有效期、合法性、域名是否與請求的域名一致、證書的公鑰(RSA加密)等進行校驗;

二、客戶端如果校驗通過後,就根據證書的公鑰的有效, 生成隨機數,隨機數使用公鑰進行加密(RSA加密);

三、消息體產生的後,對它的摘要進行MD5(或者SHA1)算法加密,此時就得到了RSA簽名;

四、發送給服務端,此時只有服務端(RSA私鑰)能解密。

五、解密得到的隨機數,再用AES加密,作爲密鑰(此時的密鑰只有客戶端和服務端知道)。

在這裏插入圖片描述
具體的參考鏈接:http://blog.csdn.net/sean_cd/article/details/6966130

一次完整的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連接在發送後將仍然保持打開狀態,於是,瀏覽器可以繼續通過相同的連接發送請求。保持連接節省了爲每個請求建立新連接所需的時間,還節約了網絡帶寬。

常見的HTTP相應狀態碼

200:請求被正常處理
204:請求被受理但沒有資源可以返回
206:客戶端只是請求資源的一部分,服務器只對請求的部分資源執行GET方法,相應報文中通過Content-Range指定範圍的資源。
301:永久性重定向
302:臨時重定向
303:與302狀態碼有相似功能,只是它希望客戶端在請求一個URI的時候,能通過GET方法重定向到另一個URI上
304:發送附帶條件的請求時,條件不滿足時返回,與重定向無關
307:臨時重定向,與302類似,只是強制要求使用POST方法
400:請求報文語法有誤,服務器無法識別
401:請求需要認證
403:請求的對應資源禁止被訪問
404:服務器無法找到對應資源
500:服務器內部錯誤
503:服務器正忙

快速記憶

1** 是服務器告訴客戶端臨時響應,你先別急,2** 是正常響應,3** 是代表重定向,4** 客戶端問題,5** 是服務器問題

HTTP1.1版本新特性

  • 默認持久連接: 節省通信量,只要客戶端服務端任意一端沒有明確提出斷開TCP連接,就一直保持連接,可以發送多次HTTP請求
  • 管線化:客戶端可以同時發出多個HTTP請求,而不用一個個等待響應
  • 斷點續傳:實際上就是利用HTTP消息頭使用分塊傳輸編碼,將實體主體分塊傳輸。

HTTP優化方案

  • TCP複用:TCP連接複用是將多個客戶端的HTTP請求複用到一個服務器端TCP連接上,而HTTP複用則是一個客戶端的多個HTTP請求通過一個TCP連接進行處理。前者是負載均衡設備的獨特功能;而後者是HTTP 1.1協議所支持的新功能,目前被大多數瀏覽器所支持。
  • 內容緩存:將經常用到的內容進行緩存起來,那麼客戶端就可以直接在內存中獲取相應的數據了。
  • 壓縮:將文本數據進行壓縮,減少帶寬
  • SSL加速(SSL Acceleration):使用SSL協議對HTTP協議進行加密,在通道內加密並加速
  • TCP緩衝:通過採用TCP緩衝技術,可以提高服務器端響應時間和處理效率,減少由於通信鏈路問題給服務器造成的連接負擔。

如果做到內容緩存?

Cache-Control
請求/響應頭,緩存控制字段,可以說是控制http緩存的最高指令,要不要緩存也是它說了算。

1.1 no-store:所有內容都不緩存

1.2 no-cache:緩存,但是瀏覽器使用緩存前,都會請求服務器判斷緩存資源是否是最新,它是個比較高貴的存在,因爲它只用不過期的緩存。

1.3 max-age=x(單位秒) 請求緩存後的X秒不再發起請求,屬於http1.1屬性,與下方Expires(http1.0屬性)類似,但優先級要比Expires高。

1.4 s-maxage=x(單位秒) 代理服務器請求源站緩存後的X秒不再發起請求,只對CDN緩存有效(這個在後面會細說)

1.5 public 客戶端和代理服務器(CDN)都可緩存

1.6 private 只有客戶端可以緩存

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章