面試題-計算機網路-HTTP部分
前言
計算機網路2-HTTP部分的題目,是我根據Java Guide的面試突擊版本V3.0再整理出來的,其中,我選擇了一些比較重要的問題,並重新做出相應回答,並添加了一些比較重要的問題,希望對大家起到一定的幫助。
系列文章:
HTTP
-
URI和URL的區別
-
URI是統一資源識別符號,可以理解為一個抽象的概念或者功能需求
-
URL是統一資源定位符,URL是URI的一種實現,用定位的方式實現唯一標識的功能
網際網路中有許多的資源,如何獲取一個具體的資源呢?
URI定義了一種獲取資源的方式:如果想要獲取資源,就需要給每個資源定義一種唯一的識別符號,然後按照定義的唯一識別符號去獲取資源。URL代表了URI概念的一種具體實現。
-
-
HTTP方法
- GET:用於請求伺服器傳送某個資源
- HEAD:和GET方法類似,但是隻會返回首部,不會返回實體
- PUT:用於請求伺服器 使用請求主體部分中包含的內容 建立或修改 一個以請求URL 命名的文件。
- POST:用於向伺服器傳送資料
- DELETE:用於請求伺服器刪除 請求URL代表的資源文件
- OPTIONS:用於請求伺服器 告知 支援的各項功能
-
HTTP的首部的分類
- 通用首部:客戶端和伺服器都可以使用的首部
- 請求首部:請求報文特有的首部
- 響應頭部:響應報文特有的首部
- 實體首部:說明請求或者響應實體部分資訊的首部
- 擴充套件首部:由程式開發者自定義的,但可以被HTTP程式接受並轉發
-
說說你對cookie的認識
-
cookie中儲存了 伺服器為了識別使用者身份產生的一些資料,儲存在瀏覽器本地。
-
如果是同源的請求,瀏覽器會自動設定cookie請求頭到請求中
-
同源的定義:URL中 協議,域名,埠都相同的才是同源
url 說明 是否跨域 http://www.cnblogs.com/a.js
http://www.a.com/b.js域名不同 是 http://www.a.com/lab/a.js
http://www.a.com/script/b.js同一域名下不同資料夾下的不同檔案 否 http://www.a.com:8000/a.js
http://www.a.com/b.js不同埠 是 http://www.a.com/a.js
https://www.a.com/b.js不同協議 是 http://www.a.com/a.js
http://70.32.92.74/b.js域名和域名對應的ip 是 http://www.a.com/a.js
http://script.a.com/b.js三級域名不同 是
-
-
-
你瞭解跨域嗎?跨域的請求是如何處理的?
上面問題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 詳解
-
Session是什麼?如何使用Session
HttpSession是javax.servlet.http中定義的介面,用來在服務端儲存使用者的資訊,目的還是為了保持狀態。
生成的SessionID可以儲存在cookie中或者通過URL傳遞過來
-
HTTP 1.0和HTTP 1.1的主要區別是什麼?
- 連線複用:1.0協議每個請求都是短連線,請求完畢後就會關閉TCP連線。TCP建立連線的過程成本較高,並且因為擁塞控制中的慢啟動機制會影響新建立連線的傳送速率,1.1版本中連線預設可以被多個請求複用了。
- 管道機制:1.1版本允許在未收到上一個請求的響應時就可以傳送下一個請求,提高效率。
-
Token機制和Session機制的區別?
- Session的機制:Session是儲存在伺服器記憶體中的資料,使用者登入成功後,會返回一個SessionID,使用者登入時,會攜帶SessionID,伺服器根據SessionID拿到Session資料,從而得知使用者是誰。
- Session的缺點:當需要部署多臺伺服器,就需要考慮Session如何在多臺伺服器同步以避免使用者重複登陸問題。如果沒有token,可以使用redis等快取系統儲存狀態資訊,多臺伺服器都從redis中查詢資訊,並且利用redis的過期失效機制來清除session。
token的核心是自含義,也就是說一旦成功登入,伺服器返回給使用者的token資訊就包含了使用者身份的資訊(比如user_id),伺服器不需要儲存相關資訊,當用戶拿著token訪問URL時,通過解密token就可以知道使用者是誰。另外,token中還可以包含登入的時間戳,服務端在解密時同樣可以判斷該token是否過期。
未完待續...