《跟我一起學爬蟲系列》2-HTTP/HTTPS簡介

HTTP/HTTPS

HTTP:超文本傳輸協議):是一種發佈和接收 HTML頁面的方法,默認端口80

HTTPS:HTTP的安全版,在HTTP下加入SSL層,默認端口443

工作流程

  • 客戶端(通常是瀏覽器)發送一個HTTP請求
  • 服務端開始處理請求,發送HTTP響應把結果返回給客戶端

其中一個請求的開始到一個響應的結束稱爲事務,事務結束後還會在服務端記錄一條日誌

HTTP請求

HTTP請求分爲請求行、請求頭、空行、請求正文:

  • 請求行:方法URL協議/版本,示例 GET/sample.jsp HTTP/1.1
  • 請求頭:包括請求頭包含許多有關的客戶端環境和請求正文的有用信息,如訪問的域名、用戶代理、Cookie等信息
  • 空行:表示請求頭結束,不可缺失
  • 請求正文:就是HTTP請求的數據,非必須

URL:統一資源定位符,是用於完整地描述Internet上網頁和其他資源的地址的一種標識方法

基本格式:scheme://[username:password@]host[:port#]/path/…/[?query-string][#anchor]

HTTP請求方法

  • GET:請求頁面信息,不包括主體,也可以傳輸少量數據,以?分割URL和傳輸數據,多個參數用&連接,例如:login.action?name=abc&password=123,如果數據是英文字母/數字,原樣發送,如果是空格,轉換爲+,如果是中文/其他字符,則直接把字符串用BASE64加密,安全方法
  • HEAD:與GET請求類似,但是返回的響應中沒有具體的內容,用於獲取報頭,安全方法
  • POST:向服務器發送數據,如提交表單,上傳文件等,提交數據放在http包體,數據爲結構化數據,非安全方法
  • PUT:替換服務器資源,向服務非結構數據,非安全方法
  • PATCH:更新服務器部分資源,結構數據,非安全方法
  • DELETE:刪除服務器指定頁面,非安全方法
  • CONNECT:將服務器作爲代理,讓服務器代替用戶去訪問其他網頁
  • OPTIONS:查看服務器允許的方法
  • TRACE:回顯服務器收到的請求,主要用於測試或診斷

更多信息請點擊HTTP request methods

常見HTTP請求Header

  • Accept:傳輸文件類型,使用MIME類型表示,即主類型/次類型

示例:Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

q是權重係數,範圍 0 =< q <= 1,q 值越大,請求越傾向於獲得其“;”之前的類型表示的內容。若沒有指定q值,則默認爲1,按從左到右排序順序;若被賦值爲0,則用於表示瀏覽器不接受此內容類型Accept-Encoding

  • Accept-Encoding:文件編碼格式

示例:Accept-Encoding:gzip, deflate

  • Accept-Language:指定可以接收的語言種類

示例:Accept-Language:zh-CN,zh;q=0.9,en;q=0.8

  • Cache-Control:指定緩存機制

示例:Cache-Control:max-age=0  不緩存服務器資源

  • Connection:是否開啓長連接

示例:Connection:keep-alive  告訴服務器這是一個長連接

  • Cookie:瀏覽器用這個屬性向服務器發送Cookie,它可以記載和服務器相關的用戶信息
  • Host:主機和端口號

示例:Host:blog.51cto.com

  • Upgrade-Insecure-Requests:升級爲HTTPS請求

示例:Upgrade-Insecure-Requests:1  加載http資源時自動替換爲https請求,不再顯示警報

  • User-Agent:瀏覽器名

示例:User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36

  • Referer:表明產生頁面來自哪個URL

示例:Referer:http://blog.51cto.com/13570193/2108347

  • Accept-Charset:表明可以處理的字符編碼

示例:Accept-Charset: utf-8, iso-8859-1;q=0.5

  • Content-Type:表明實際發送的數據類型

示例:Content-Type:application/x-www-form-urlencoded

更多header字段含義可到HTTP Headers查詢

HTTP響應

HTTP響應分爲:狀態行、響應頭、空行、響應正文

  • 狀態行:協議版本、狀態碼、狀態碼解釋
  • 響應頭:與請求頭類似
  • 空行:表示響應頭結束,不可缺失
  • 響應正文:響應的具體數據

常見HTTP響應Header

  • Cache-Control:

  • Connection

  • Content-Encoding
  • Content-Type

  • Date:服務端發送資源時的服務器時間,使用GMT時間,HTTP協議使用的時間都是GMT時間

示例:Date:Sun, 30 Sep 2018 06:49:11 GMT

  • Expires:告訴客戶端在這個時間前,可以直接訪問緩存副本

示例:Expires, 30 Sep 2018 06:49:11 GMT

  • Server:表明服務器信息

示例:Server:openresty

  • Transfer-Encoding:服務器發送的資源的方式

示例:Transfer-Encoding:chunked   分塊發送

  • Vary:用於列出一個響應字段列表,告訴緩存服務器遇到同一個 URL 對應着不同版本文檔的情況時,如何緩存和篩選合適的版本

示例:Vary:Accept-Encoding

  • Strict-Transport-Security:告訴瀏覽器只能通過HTTPS訪問當前資源

示例:Strict-Transport-Security:max-age= 31536000  表示31536000內都使用https訪問資源

更多header字段含義可到HTTP Headers查詢

常見狀態碼

1xx: 信息性狀態碼

  • 100, 101

2xx: 成功狀態碼

  • 200:OK

3xx: 重定向狀態碼

  • 301:請求永久重定向
  • 302:請求臨時重定向
  • 304:請求被重定向到客戶端本地緩存

4xx: 客戶端錯誤狀態碼

  • 400---/客戶端請求存在語法錯誤
  • 401---/客戶端請求沒有經過授權
  • 403---/客戶端的請求被服務器拒絕,一般爲客戶端沒有訪問權限
  • 404---/客戶端請求的URL在服務端不存在

5xx: 服務器端錯誤狀態碼

  • 500: Internal Server Error  服務器內部錯誤
  • 502: Bad Gateway  前面代理服務器聯繫不到後端的服務器時出現
  • 504:Gateway Timeout  這個是代理能聯繫到後端的服務器,但是後端的服務器在規定的時間內沒有給代理服務器響應

更多響應狀態碼請點擊HTTP response status codes

HTTP版本

  • HTTP/0.9    HTTP協議的最初版本,僅支持GET,僅能訪問HTML格式的資源
  • HTTP/1.0    增加了POST和HEAD,支持MIME,可以訪問多種數據格式,如text/html、image/jpeg等,支持cache。工作方式是每次TCP連接只能發送一個請求,當服務器響應後就會關閉這次連接,不支持keepalive。
  • HTTP/1.1    支持keepalive持久連接,加入了管道機制,一個TCP連接同時允許多個請求同時發送,增加了併發性;新增了請求方式PUT、PATCH、DELETE等。但是還存在一些問題,服務端是按隊列順序處理請求的,假如一個請求處理時間很長,則會導致後邊的請求無法處理,這樣就造成了隊頭阻塞的問題;同時HTTP是無狀態的連接,因此每次請求都需要添加重複的字段,降低了帶寬的利用率。
  • HTTP/2.0    增加雙工模式,即不僅客戶端能夠同時發送多個請求,服務端也能同時處理多個請求,解決了隊頭堵塞的問題;HTTP請求和響應中,狀態行和請求/響應頭都是些信息字段,並沒有真正的數據,因此在2.0版本中將所有的信息字段建立一張表,爲表中的每個字段建立索引,客戶端和服務端共同使用這個表,他們之間就以索引號來表示信息字段,這樣就避免了1.0舊版本的重複繁瑣的字段,並以壓縮的方式傳輸,提高利用率。另外也增加服務器推送的功能,即不經請求服務端主動向客戶端發送數據。

當前主流的協議版本還是HTTP/1.1版本

網站訪問量

  • IP:以公網IP計算訪問量
  • UV:以電腦計算訪問量
  • PV:以打開網頁次數計算訪問量
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章