引言:做爲一名軟件工程Web專業學生,對於HTTP的熟悉掌握是必不可少的,特此作記錄,打造本身的HTTP棧。html
咱們常常接觸到的就是URL了,它就是咱們訪問web的一個字符串地址,那麼URI是什麼呢?他們是什麼關係呢?
URL:uniform resource location 統一資源定位符
URI:uniform resource identifier 統一資源標識符
這也就是說,URI是一種資源的標識;而URL也是一種URI,也是一種資源的標識,但它也指明瞭如何定位Locate到這個資源。
URI是一種抽象的資源標識,既能夠是絕對的,也能夠是相對的。可是URL是一種URI,它指明瞭定位的信息,必須是絕對的。web
客戶端和服務器端經過相互發送報文進行通訊,要深入理解HTTP協議,就須要理解報文的格式和內容。瀏覽器
不管是請求報文仍是響應報文都須要有報文首部,固然報文主體並非必需的。
通常來講,請求報文的格式以下:安全
看一下百度網站的請求報文:ruby
簡單的報文形式:服務器
GET / HTTP/1.1 //請求行,包含用於請求的方法,請求的URI,HTTP版本 //如下爲各類首部字段 Host: www.baidu.com Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0... Accept-Encoding: gzip, deflate, sdch Accept-Language: zh-CN,zh;q=0.8
響應報文的格式以下:ide
看一下百度網站的響應報文:函數
HTTP/1.1 200 OK //狀態行,包含代表響應結果的狀態碼,緣由短語和HTTP版本 //如下爲各類首部字段 Server: bfe/1.0.8.5 Date: Tue, 06 Oct 2015 14:48:28 GMT Content-Type: text/html;charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Cache-Control: private
發送HTTP的方法有許多種,最經常使用的即是GET和POST,下面就這兩種進行詳細地說明。網站
URL
中,直接就能夠在URL中看見,有大小限制。報文內容
中,所以只要報文的內容沒有限制,它的大小就沒有限制。HTTP是一種無狀態協議,也就是每一次發送都是一次新的開始,服務器並不知道也沒有必要知道當前鏈接的客戶端是否以前有過交集,那麼當須要進行保存用戶登陸狀態時,則出現了麻煩,這個時候使用Cookie來保存狀態。
Cookie會根據服務器端發送的響應報文內的一個叫作Set-Cookie的首部字段,通知客戶端保存Cookie(保存在本身的電腦裏),當下次客戶端發送請求時,Cookie值會被添加到請求報文中發送出去。加密
使用瀏覽器瀏覽一個包含多張圖片的HTML頁面時,瀏覽器會發起屢次請求,如圖所示:
顯而易見每次請求會形成無謂的TCP鏈接創建和斷開,增長通訊量的開銷。
持久鏈接的特色是,只要任意一端沒有明確提出斷開鏈接,則保持TCP鏈接狀態。目前HTTP/1.1中默認爲持久鏈接。
Connection:keep-alive
管線化能夠同時並行發送多個請求,不須要一個一個等待響應了。
HTTP+加密+認證+完整性保護 = HTTPS
一些登錄界面和購物結算界面使用HTTPS通訊,也就是改用https://
,HTTPS說簡單點就是它的通訊接口部分被SSL和TLS協議代替而已。
有一些網址或者服務須要用戶的身份信息,所以須要隨時知道這些消息,可是確定不能每次都讓用戶輸入用戶密碼,所以關於認證就有下面幾種方式:
在這裏主要說一下FormBase認證,也就是表單認證。
在傳輸過程當中,一種安全地保存密碼方式是,先利用給密碼加鹽的方式增長額外信息,再使用散列hash函數計算出散列值後保存。
書籍推薦:《圖解HTTP》,輕鬆理解更全面的HTTP知識。
轉自http://www.jianshu.com/p/81632fea327c