1. 程式人生 > 實用技巧 >面試題-計算機網路-HTTP部分

面試題-計算機網路-HTTP部分

前言

計算機網路2-HTTP部分的題目,是我根據Java Guide的面試突擊版本V3.0再整理出來的,其中,我選擇了一些比較重要的問題,並重新做出相應回答,並添加了一些比較重要的問題,希望對大家起到一定的幫助。

系列文章:

面試題-Java基礎

面試題-Java集合

面試題-Java多執行緒基礎、實現工具和可見性保證

面試題-執行緒池和原子變數

面試題-Java虛擬機器

面試題-計算機網路1

HTTP

  1. URI和URL的區別

    • URI是統一資源識別符號,可以理解為一個抽象的概念或者功能需求

    • URL是統一資源定位符URL是URI的一種實現用定位的方式實現唯一標識的功能

    網際網路中有許多的資源,如何獲取一個具體的資源呢?

    URI定義了一種獲取資源的方式:如果想要獲取資源,就需要給每個資源定義一種唯一的識別符號,然後按照定義的唯一識別符號去獲取資源。URL代表了URI概念的一種具體實現。

  2. HTTP方法

    • GET:用於請求伺服器傳送某個資源
    • HEAD:和GET方法類似,但是隻會返回首部,不會返回實體
    • PUT:用於請求伺服器 使用請求主體部分中包含的內容 建立或修改 一個以請求URL 命名的文件。
    • POST:用於向伺服器傳送資料
    • DELETE:用於請求伺服器刪除 請求URL代表的資源文件
    • OPTIONS:用於請求伺服器 告知 支援的各項功能
  3. HTTP的首部的分類

    • 通用首部:客戶端和伺服器都可以使用的首部
    • 請求首部:請求報文特有的首部
    • 響應頭部:響應報文特有的首部
    • 實體首部:說明請求或者響應實體部分資訊的首部
    • 擴充套件首部:由程式開發者自定義的,但可以被HTTP程式接受並轉發
  4. 說說你對cookie的認識

  5. 你瞭解跨域嗎?跨域的請求是如何處理的?

    上面問題4中介紹過同源的定義,只要不滿足這個要求即為跨域。

    現在的瀏覽器都實現了CORS標準,在CORS標準中,當發起一個跨域請求時:

    如果是簡單請求(GET HEAD POST 並且請求頭中不能超出規定的幾個欄位),會在請求中加入一個Origin欄位,Origin欄位用來說明,本次請求的來源域(協議主機埠)

    GET /cors HTTP/1.1
    Origin: http://api.bob.com
    Host: api.alice.com
    Accept-Language: en-US
    Connection: keep-alive
    User-Agent: Mozilla/5.0...
    

    如果是非簡單請求(簡單請求之外的請求),瀏覽器會在請求之間加入一個預檢請求,預檢請求是一個OPTIONS請求.

    OPTIONS /cors HTTP/1.1
    Origin: http://api.bob.com
    Access-Control-Request-Method: PUT //必須欄位,列出請求會使用哪些方法
    Access-Control-Request-Headers: X-Custom-Header //可選欄位,列出請求會額外發送的請求頭
    Host: api.alice.com
    Accept-Language: en-US
    Connection: keep-alive
    User-Agent: Mozilla/5.0...
    

    如果檢查通過,可以訪問,服務端會響應一些CORS欄位;如果未通過,則會發送一個200響應,不包含任何CORS欄位,瀏覽器發現後會丟擲一個錯誤,然後使用者可以通過XHR中的onerror回撥函式捕獲錯誤。

    CORS欄位介紹:跨域資源共享 CORS 詳解

  6. Session是什麼?如何使用Session

    HttpSession是javax.servlet.http中定義的介面,用來在服務端儲存使用者的資訊,目的還是為了保持狀態。

    生成的SessionID可以儲存在cookie中或者通過URL傳遞過來

    好文章:Tomcat 是如何管理Session的?

  7. HTTP 1.0和HTTP 1.1的主要區別是什麼?

    • 連線複用:1.0協議每個請求都是短連線,請求完畢後就會關閉TCP連線。TCP建立連線的過程成本較高,並且因為擁塞控制中的慢啟動機制會影響新建立連線的傳送速率,1.1版本中連線預設可以被多個請求複用了。
    • 管道機制:1.1版本允許在未收到上一個請求的響應時就可以傳送下一個請求,提高效率。
  8. Token機制和Session機制的區別?

    • Session的機制:Session是儲存在伺服器記憶體中的資料,使用者登入成功後,會返回一個SessionID,使用者登入時,會攜帶SessionID,伺服器根據SessionID拿到Session資料,從而得知使用者是誰。
    • Session的缺點:當需要部署多臺伺服器,就需要考慮Session如何在多臺伺服器同步以避免使用者重複登陸問題。如果沒有token,可以使用redis等快取系統儲存狀態資訊,多臺伺服器都從redis中查詢資訊,並且利用redis的過期失效機制來清除session。

    token的核心是自含義,也就是說一旦成功登入,伺服器返回給使用者的token資訊就包含了使用者身份的資訊(比如user_id),伺服器不需要儲存相關資訊,當用戶拿著token訪問URL時,通過解密token就可以知道使用者是誰。另外,token中還可以包含登入的時間戳,服務端在解密時同樣可以判斷該token是否過期。

未完待續...

參考資料

跨域資源共享 CORS 詳解

聊一聊 cookie

HTTP 協議入門

因為一個跨域請求,我差點丟了飯碗

什麼是跨域