概念html
HTTP協議:超文本傳輸協議,用於服務端傳輸超文本到客戶端的傳輸協議。是一個應用層協議。web
工做流程瀏覽器
一次http請求就是一個事務。過程可分爲四步:緩存
1.客戶端與服務器創建連接。頁面上單擊某個連接,http開始創建連接。安全
2.創建連接後,客戶端向服務器發送請求,請求的內容有:統一資源定位符(url),協議的名稱,MIME類型(請求超文本的類型,好比圖片,文字,視頻等)。服務器
3.服務器收到請求後給出響應。並返回響應信息,帶上狀態碼。cookie
4.客戶端瀏覽器收到響應信息後顯示出來,此時用戶能夠看到瀏覽器上展現的內容。此時http請求完成,斷開鏈接。網絡
若是想再次得到服務器響應信息,必須客戶端從新發送請求。並且客戶端每次發送的請求都是獨立的,相互間沒有任何關係,因此HTTP請求也是無狀態的。app
請求過程當中若是出現錯誤,服務器則會返回相應的錯誤狀態碼信息給客戶端,比較常見的是404,表示文件沒有請求到。編碼
總結就是:一個http請求的過程就是客戶端發起請求,服務器響應請求並快速給出響應內容。
URL
URL:統一資源定位符,指網頁地址,經過這個資源地址能夠訪問具體某個頁面。
格式:
協議地址:http://或https://(加密的協議)
主機地址:10.240.110.23:80主機IP地址(加端口號),一把都是用域名來表示,經過DNS解析域名到指定的IP地址,好比www.baidu.com
主機資源的具體地址:/app 斜線後面的地址,指具體的目錄或文件名
例如,一個完整的URL爲: htttp://www.baidu.com/app 前兩部分是必須有的
TCP協議-三次握手
HTTP協議一般承載於TCP協議之上,有時也承載於TLS或SSL協議層之上,這個時候,就成了咱們常說的HTTPS。以下圖所示:
創建HTTP連接時,需創建TCP/IP連接,TCP連接必須通過三次握手的過程。
第一次握手:SYN(synchronous)是TIPC/IP創建連接時的握手信號,當客戶端與服務器創建連接時,客戶端發送SYN信息包給服務器,並進入SYN_SEND狀態,等待服務器確認。
第二次握手:服務器收到SYN包以後,進行確認,而且本身也發送一個SYN包,也就是回傳SYN+ACK包給客戶端,此時服務器進入SYN_RECV狀態。
第三次握手:客戶端收到服務器發過來的SYN+ACK包,向服務器再次發送確認包ACK,此包發送完畢後,客戶端和服務器端創建連接狀態,而且開始傳輸數據。
HTTP的請求頭信息
客戶端瀏覽器發送請求給服務器的時候,瀏覽器在請求頭裏附加的一些信息。規範以下:
General一欄包括:
Remote Addresss:要請求的遠程主機地址
Request URL:要請求的域名
Request Method:http請求的方式,HTTP1.1目前支持7種請求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。比較常見的是POST和GET方式。
GET:請求獲取相應URL的資源,參數會添加在URL的後面
POST:在請求的資源後附加新的數據,把新的數據封裝起來,一塊兒傳給服務器端
Status Code:請求的狀態碼,200表示請求成功。
Request Headers一欄包括:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8,瀏覽器支持的MIME類型,也就是瀏覽器支持的媒體類型或內容類型。大類/小類,text類型表示文本類型;text/html表示html文檔;application/xhtml+xml表現xhtml文檔,application/xml表示xml文檔。image表示圖片信息。另外還包括其餘多媒體信息。
Accept-Encoding:gzip, deflate, sdch,表示瀏覽器有能力解碼的編碼類型。這裏瀏覽器支持的壓縮編碼是gzip,deflate,sdch;
Accept-Language:zh-CN,zh;q=0.8,瀏覽器所支持的語言類型。zh-CN表示簡體中文,q是權重係數,範圍 0 =< q <= 1,q 值越大,請求越傾向於得到其「;」以前的類型表示的內容,若沒有指定 q 值,則默認爲1,若被賦值爲0,則用於提醒服務器哪些是瀏覽器不接受的內容類型。
Accept-Charset:GB2312,utf-8,告訴服務器,瀏覽器支持的編碼類型
Connection:keep-alive表示客戶端與服務器的連接類型。keep-alive表示持久鏈接。
Cookie:指瀏覽器所設置的cookie信息。從這裏瀏覽器能夠附帶一些數據給服務器。
Host:表示請求的服務網址
UserAgent:用戶代理,一個特殊的字符串,使得服務器可以識別客戶端使用的操做系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。
If-Modified-Since:瀏覽器告訴服務器,數據須要緩存的時間
Referer:瀏覽器告訴服務器,是從哪一個頁面過來的(放盜鏈)
HTTP響應頭信息
Response Headers指客戶端發送請求頭信息後,服務器作出應答,並返回過來的描述信息,也就是響應頭信息。下面介紹比較常見的:
Server:指服務器的類型
Content-Encoding:gzip,服務器返回的數據所採用的壓縮格式
Content-Type:text/html;charset=utf-8;指服務器返回數據的編碼格式
Connection: keep-alive,表示服務器與客戶端的連接類型。keep-alive表示持久連接
Cache-Control:public,private,no-cache,no- store,no-transform,must-revalidate,proxy-revalidate,max-age指服務器返回的數據所遵循的緩存機制。public表示響應數據可被任何緩存區緩存;private指部分響應信息不能被共享緩存處理;no-cache表示請求或響應不能被緩存;no-store指響應數據不能被緩存。
Date:指請求所發送的時間。時間表示的是世界標準時間。
Expires:返回數據的過時時間
Last-Modified:與請求頭裏的If-Modified-Since結合使用。客戶端經過設置請求頭裏的If-Modified-Since提供一個日期,該請求將被視爲一個條件GET,只有改動時間遲於指定時間的文檔纔會返回,不然返回一個304(Not Modified)狀態。Last-Modified也可setDateHeader方法來設置。
HTTP請求除了返回響應頭信息以外,還返回響應碼來表示返回狀態,常見的狀態碼以下:
200 OK:表示客戶端請求成功,服務端成功的返回響應信息
400 Bad Request:客戶端的請求有語法錯誤,服務器不能正常解析
401 Unauthorized:請求未經受權,這個狀態碼須要和WWW-Authenticate抱頭域一塊兒使用
403 Forbidden:服務器已經收到請求,可是拒絕響應
404 Not Found:請求資源不存在,好比錯誤的請求地址
500 Internal Server Error:服務器發生錯誤
503 Server Unavailable: 服務器當前狀態不能處理客戶端的請求,可能過段時間會恢復正常
HTTP協議的特色
1.支持客戶端/服務器模式。
2.簡單快速:只需提供請求地址和請求方式。請求方式包括POST,GET等方式。
3.靈活:請求數據多樣性。好比html,xhtml,text,以及其餘的多媒體資源。
4.無鏈接:當客戶端發起請求後,服務器給出迴應,返回響應數據,即表示鏈接已經結束。
5.無狀態:http的每次請求都是獨立的,互相不影響。若是想要再獲取請求數據,必須客戶端再次發送請求。
OSI七層協議
OSI把網絡的通訊劃分紅七層。http是屬於應用層的協議。
如今已使用五層的TCP/IP協議
TCP負責發現傳輸的問題,一有問題就發出信號,要求從新傳輸,直到全部數據安全正確地傳輸到目的地。而IP是給因特網的每一臺聯網設備規定一個地址。模型以下:
參考地址:http://www.imooc.com/learn/304
http://www.360doc.com/content/10/0930/17/3668821_57590979.shtml
http://jingyan.baidu.com/article/375c8e19770f0e25f2a22900.html