Python高階——多執行緒_09_Http協議
瀏覽器訪問伺服器過程
DNS解析-->建立連線-->發起請求-->回覆響應
url:
概念:網路資源地址
協議--域名--資源路徑 三部分組成
域名
本質是IP地址
DHCP伺服器(動態主機配置協議)
給區域網中計算機自動分配IP
DNS(domain name service)
用於返回域名對應的IP地址
Http協議
概念:瀏覽器和伺服器傳輸資料格式協議 基於TCP協議實現
作用:規定瀏覽器和伺服器之間資料通訊格式
TCP/IP:模型
應用層: HTTP FTP
傳輸層 TCP UDP
網路層 IP
網路介面
工作模式:request-請求 response-響應
通訊過程(檢視方式)
谷歌/火狐--f12-->Network-->
Request Headers[請求]
Response Headers[響應狀態]
Response [響應體]
請求報文格式
請求行:
a)請求方法:GET 向獲取伺服器獲取資源 Post 向伺服器上傳資源
b)資源路徑:
\index.html 或者是 \ 根據網址判斷
c)協議部分:1.1通用版本
請求頭:Request Headers 形式: (名字:值)
a)Host:主機身份
標識本次請求的伺服器身份 或者是IP地址:[埠號]
b)Connection:keep-alive
長連線<keep-alive 保持存活> 端連線<close 關閉>
c)User-Agent:
使用者代理 標識瀏覽器身份
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36
1.爬蟲時,設定header=的值,可模擬瀏覽器讀取 2.開發多個版本網頁-適配
d)Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
接收 檔案型別
e)Accept-Encoding: gzip,default
可接收的壓縮方式
降低網路傳輸頻寬 --> 提供傳輸速度
缺點:加重CPU使用率
f)Accept-Language: zh-CN,zh;q=0.9
可以接收的語言<編碼>
總結:
請求行【方法 資源路徑 版本 \r\n】
請求頭【名稱:值\r\n】 請求頭可以有多個
\r\n 空行
請求體 【瀏覽器向伺服器上傳的資料】
GET方法請求一般不帶請求體 POST可以帶請求體
響應報文格式
響應報文<伺服器 回送給瀏覽器的資料>
響應行:HTTP/1.1 200 OK
1.版本
2.狀態
2xx 成功 ok 200
3xx 重定向 302/307
4xx 客戶端報錯 404 Not Found
5xx 伺服器端報錯 503 服務不可用
響應頭 頭名:值
a)Connection:keep-alive
長連線<keep-alive 保持存活> 端連線<close 關閉>
b)Date:Ture 11 Sep 2018 03:46:26 GMT
預設為格林威治時間 與北京時間相差8小時
c)Expires:Ture 11 Sep 2018 02:46:26 GMT
過期時間
d)Sercver: BWS/1.1
伺服器後臺程式<應用程式>身份
通用:Nginx web伺服器
e)Conntent-Encoding: gzip
內容-(實體 - 根據頭部報文決定標識 請求體/響應體 )壓縮方式
瀏覽器接收頭部資料時,可以解壓響應體資料(當瀏覽器和伺服器的壓縮方式不同時,資料不壓縮)
f)Conntent-type: txt/html
實體檔案型別
瀏覽器可以根據該頭部解析對應的響應體資料
g)Conntent-Length:1207
實體長度
根據對應長度接收對應長度資料作為響應體
h)Conntent-x
實體頭部 可用在請求報文中
總結:
響應行[版本 狀態碼 說明\r\n]
響應頭[名稱:值\r\n]
響應體[伺服器發給瀏覽器傳送的資料]
長連線與短連線
長:keep-alive
短:close
短--缺點:套接字需要大量建立和銷燬【使用者體驗差】 優點:管理簡單,所有連線都是有效存在
長--缺點:佔用資源大【可能導致伺服器崩潰】 優點:體驗感好,無需重複建立連線