摘自百度百科:html
超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最爲普遍的一種網絡協議。全部的WWW文件都必須遵照這個標準。設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。web
角色:客戶端和服務端算法
首先,客戶端發起一個與服務器的TCP鏈接,創建鏈接以後,A中的瀏覽器進程就能夠經過Socket訪問該TCP鏈接。瀏覽器
客戶端A進程經過該TCP鏈接向服務端B發送一個HTTP請求報文(ASCII碼),報文中包含(百度首頁爲例)安全
請求行(request line) : 3個字段:方法字段、URL字段和HTTP版本字段
GET / HTTP/1.1
請求頭(header line) : 位於請求行以後
Host www.baidu.com
Connection keep-alive
Cache-Control max-age=0
Upgrade-Insecure-Requests 1
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
Accept text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
Referer https://www.baidu.com/s?wd=Https&rsv_spt=1&rsv_iqid=0xc28e80ff00002ae1&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=0&oq=Http%25E5%258D%258F%25E8%25AE%25AE&rsv_pq=de652d0900004bfb&inputT=691&rsv_sug3=47&rsv_sug1=48&rsv_sug7=100&rsv_sug4=756
Accept-Encoding gzip, deflate, br
Accept-Language zh-CN,zh;q=0.9,en;q=0.8
空行 :
位於請求頭和請求體之間,必需要有
請求體(entity body) : 在使用GET方法時,請求體爲空。POST時能夠相似以下格式:
username=test&password=123123服務器
HTTP服務器進程經過Socket接收到該請求報文,從存儲器(內存或磁盤)中獲得URL字段中指定的對象(如:/index.html),而後封裝到響應報文中,經過Socket發送到客戶端。
響應報文:網絡
狀態行(status line) :
HTTP/1.1 200 OK
響應頭(header line):
Cache-Control: private
Connection: Keep-alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Thu, 29 Mar 2018 16:01:47 GMT
Expires: Thu, 29 Mar 2018 16:01:46 GMT
Set-Cookie: BD_HOME=1; path=/
空行:
響應體(entity body):
<html>...</html>app
客戶端收到響應報文後,將響應實體中的文件信息提取出來,用瀏覽器引擎繪製或者經過別的進程處理該數據。性能
實際中,可能一個HTML中有許多資源引用(如CSS文件,圖片,JS文件等),對於每個引用對象,重複該過程(HTTP1.0短鏈接)
編碼