HTTP
從輸入url到顯示主頁的過程
參考:segmentfault.com/a/119000000…
- DNS解析:網址到ip地址的轉換
- TCP連線: HTTP協議使用TCP作為傳輸層協議
- 傳送HTTP請求
- 伺服器處理請求並返回HTTP報文
- 瀏覽器解析渲染頁面
- 連線結束
HTTP和HTTPS的區別
HTTP報文是包裹在TCP報文中傳送的,伺服器端收到TCP報文時會解包提取出HTTP報文。但是HTTP報文是明文,如果中間被擷取的話會存在一些資訊洩露的風險。
HTTPS協議的本質就是HTTP + SSL(or TLS)。在HTTP報文進入TCP報文之前,先使用SSL對HTTP報文進行加密。
HTTPS在傳輸資料之前需要客戶端與伺服器進行一個握手(TLS/SSL握手),在握手過程中將確立雙方加密傳輸資料的密碼資訊(第二次握手伺服器會傳送一個SSL證書,客戶端對其驗證)。
TLS/SSL使用了非對稱加密、對稱加密以及hash等。具體過程請參考經典的阮一峰先生的部落格TLS/SSL握手過程。
SSL加密過程: 需要注意的是非對稱加解密演算法的效率要比對稱加解密要低的多。 所以SSL在握手過程中使用非對稱密碼演算法來協商金鑰,實際使用對稱加解密的方法對http內容加密傳輸。
Https的好處
- 所有資訊都是加密傳播,黑客無法竊聽。
- 具有校驗機制,一旦被篡改,通訊雙方會立刻發現。
- 配備身份證書,防止身份被冒充。
缺點
- SSL證書維護麻煩。
- 握手次數增加,降低訪問速度。
- Http跳轉到Https的方式增加了使用者訪問耗時。
- Https涉及的演算法會消耗CPU資源。
常見的狀態碼
-
200 ok 伺服器已成功處理了請求並提供了請求的網頁
-
202 Accepted 已經接受請求,但處理尚未完成
-
204 No Content 沒有新文件,瀏覽器應該繼續顯示原來的文件
-
206 Partial Content 客戶端進行了範圍請求(實現斷點續傳)
-
301 Moved Permanently 永久性重定向
-
302(或307) 臨時性重定向
-
304 Not Modified 未修改,自從上次請求後,請求的內容未修改過
-
401 未經授權
-
403 Forbidden 伺服器拒絕請求
-
404 Not Found 伺服器不存在客戶端所請求的資源
500 伺服器遇到一個錯誤,使其無法請求提供服務
HTTP長連線、短連線
HTTP 2.0
問題
GET 與 POST 比較:作用、引數、安全性、冪等性、可快取。
HTTP 狀態碼
Cookie和Session
什麼是Cookie和Session
Sesssion在服務端生成,存在客戶端。客戶端訪問某個地址時,伺服器會根據頁面的頭部資訊生成coolkie(字串),然後cookie會加在http響應頭中,發往客戶端並儲存在瀏覽器。在下次客戶端請求時,請求中會附帶儲存的Cookie。
Session 是在伺服器端生成的,儲存在伺服器端,即存在記憶體中。可以對生成的 Session 設定過期時間,如果不設定過期時間,預設的 Session 過期時間是30 分鐘。但是,Sesssion 的生成的同時,會生成一個與之相關聯的的 SessionID ,此SessionID的儲存是需要 Cookie來完成的。SessionID 是以名稱為 JSESSIONID,其值應該是一個既不會重複,又不容易被找到規律以仿造的字串。SessionID會隨著此次Http響應,一併返回到客戶端,並儲存在客戶端中(Cookie)。到當前請求再次發出後,該 SessionID會隨著 Http 頭部,傳到伺服器中,伺服器依據當前 SessionID 得到與之對應的 Session.
注意:一個域,在客戶端建立的所有的Cookie都是可以共享的,只要 Cookie 沒有過期。
為什麼需要cookie和Seesion
在網站中,http請求是無狀態的。也就是說即使第一次和伺服器連線後並且登入成功後,第二次請求伺服器依然不能知道當前請求是哪個使用者。Cookie和Session的出現就是為了解決這個問題。
- Cookie使用場景:有些網站有記住使用者名稱的功能,當你勾這個的時候,下次進入該網站時,就會儲存上一次登入的使用者名稱
- Seesion使用場景:利用Seesion來驗證使用者是否已登入,利用Session來儲存驗證碼。
Cookie和Session的區別
- Cookie是存在客戶端,Session存在伺服器
- 安全性要求高的用Session,要求低用Cookie
- Cookie只能儲存字串,Session可以儲存任何資訊
- Cookie如果不設定時間,當關閉瀏覽器時,Cookie就失效,不會在本地儲存;Session的生命週期是一個會話(當啟動瀏覽器到關閉瀏覽器)
- 在儲存相對持久的資訊時,應考慮使用 Cookie,因為 Cookie 可以以檔案的形式,儲存在客戶端。在進行一些登入的驗證及資訊攔截的時候,可以使用 Session。
參見:www.cnblogs.com/xiaoshitout…
cookie和session結合使用
web開發發展至今,cookie和session的使用已經出現了一些非常成熟的方案。在如今的市場或者企業裡,一般有兩種儲存方式:
- 儲存在服務端:通過cookie儲存一個session_id,然後具體的資料則是儲存在session中。如果使用者已經登入,則伺服器會在cookie中儲存一個session_id,下次再次請求的時候,會把該session_id攜帶上來,伺服器根據session_id在session庫中獲取使用者的session資料。就能知道該使用者到底是誰,以及之前儲存的一些狀態資訊。這種專業術語叫做server side session。
- 將session資料加密,然後儲存在cookie中。這種專業術語叫做client side session。
參見部落格:www.cnblogs.com/xxtalhr/p/9…
如何客戶端禁用了Cookie,如何儲存使用者的資訊
如果客戶端禁用了 Cookie 的話,很多網站任然可以儲存使用者的資訊。一種處理的方式是URL 重寫,將 SesseionID 直接附加在請求地址的後面。另一種處理的方式是,使用隱藏自動的方式。就是伺服器自動的在表單中,新增一個隱藏欄位,以便在表單提交時,將 SesseionID 一起傳到伺服器,進行識別。
Session的問題
- session是存在伺服器的記憶體中的,如果session過多會影響伺服器的效能
- session只在一臺伺服器裡,當有多臺伺服器的時候,訪問別的伺服器肯定會失敗(需考慮Session共享)