爬蟲入門到精通-HTTP協議的講解

HTTP協議的講解

本文章屬於爬蟲入門到精通系統教程第三講html

什麼是HTTP協議?

引用自維基百科web

超文本傳輸協議(英文:HyperText Transfer Protocol,縮寫:HTTP)是互聯網上應用最爲普遍的一種網絡協議。設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。經過HTTP或者HTTPS協議請求的資源由統一資源標識符(Uniform Resource Identifiers,URI)來標識。
HTTP的發展是由蒂姆·伯納斯-李於1989年在歐洲核子研究組織(CERN)所發起。由萬維網協會(World Wide Web Consortium,W3C)和互聯網工程任務組(Internet Engineering Task Force,IETF)制定標準,最終發佈了一系列的RFC,其中最著名的是1999年6月公佈的 RFC 2616,定義了HTTP協議中現今普遍使用的一個版本——HTTP 1.1。
2014年12月,互聯網工程任務組(IETF)的Hypertext Transfer Protocol Bis(httpbis)工做小組將HTTP/2標準提議遞交至IESG進行討論[1],於2015年2月17日被批准。[2] HTTP/2標準於2015年5月以RFC 7540正式發表,替換HTTP 1.1成爲HTTP的實現標準。[3]segmentfault

HTTP是一個客戶端終端(用戶)和服務器端(網站)請求和應答的標準(TCP)。經過使用網頁瀏覽器、網絡爬蟲或者其它的工具,客戶端發起一個HTTP請求到服務器上指定端口(默認端口爲80)。咱們稱這個客戶端爲用戶代理程序(user agent)。應答的服務器上存儲着一些資源,好比HTML文件和圖像。咱們稱這個應答服務器爲源服務器(origin server)。在用戶代理和源服務器中間可能存在多個「中間層」,好比代理服務器、網關或者隧道(tunnel)。
儘管TCP/IP協議是互聯網上最流行的應用,HTTP協議中,並無規定必須使用它或它支持的層。事實上,HTTP能夠在任何互聯網協議上,或其餘網絡上實現。HTTP假定其下層協議提供可靠的傳輸。所以,任何可以提供這種保證的協議均可以被其使用。所以也就是其在TCP/IP協議族使用TCP做爲其傳輸層。
一般,由HTTP客戶端發起一個請求,建立一個到服務器指定端口(默認是80端口)的TCP鏈接。HTTP服務器則在那個端口監聽客戶端的請求。一旦收到請求,服務器會向客戶端返回一個狀態,好比"HTTP/1.1 200 OK",以及返回的內容,如請求的文件、錯誤消息、或者其它信息。瀏覽器

一個實例

應該會看到以下界面
app

而後咱們點擊25296437

應該會看到以下界面

General

Request URL:https://zhuanlan.zhihu.com/p/25296437 (爬蟲會用到)

這個對應HTTP協議中的統一資源定位符也就是咱們打開的網址

Request Method:GET(爬蟲會用到)

這個對應HTTP協議中的請求方法,咱們此次用的是GET

請求方法有如下這些,經常使用的是GET,POST

  • GET:向指定的資源發出「顯示」請求。使用GET方法應該只用在讀取數據,而不該當被用於產生「反作用」的操做中,例如在Web Application中。其中一個緣由是GET可能會被網絡蜘蛛等隨意訪問。參見安全方法

  • POST:向指定資源提交數據,請求服務器進行處理(例如提交表單或者上傳文件)。數據被包含在請求本文中。這個請求可能會建立新的資源或修改現有資源,或兩者皆有。

  • OPTIONS:這個方法可以使服務器傳回該資源所支持的全部HTTP請求方法。用'*'來代替資源名稱,向Web服務器發送OPTIONS請求,能夠測試服務器功能是否正常運做。

  • HEAD:與GET方法同樣,都是向服務器發出指定資源的請求。只不過服務器將不傳回資源的本文部分。它的好處在於,使用這個方法能夠在沒必要傳輸所有內容的狀況下,就能夠獲取其中「關於該資源的信息」(元信息或稱元數據)。

  • PUT:向指定資源位置上傳其最新內容。

  • DELETE:請求服務器刪除Request-URI所標識的資源。

  • TRACE:回顯服務器收到的請求,主要用於測試或診斷。

  • CONNECT:HTTP/1.1協議中預留給可以將鏈接改成管道方式的代理服務器。一般用於SSL加密服務器的連接(經由非加密的HTTP代理服務器)。

Status Code:200 OK(爬蟲會用到)

這個對應HTTP協議中的狀態碼,咱們此次返回的是200 OK、

全部HTTP響應的第一行都是狀態行,依次是當前HTTP版本號,3位數字組成的狀態代碼,以及描述狀態的短語,彼此由空格分隔。

狀態代碼的第一個數字表明當前響應的類型:

  • 1xx消息——請求已被服務器接收,繼續處理

  • 2xx成功——請求已成功被服務器接收、理解、並接受

  • 3xx重定向——須要後續操做才能完成這一請求

  • 4xx請求錯誤——請求含有詞法錯誤或者沒法被執行

  • 5xx服務器錯誤——服務器在處理某個正確請求時發生錯誤

常見狀態代碼、狀態描述、說明:

  • 200 OK //請求成功

  • 400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解

  • 401 Unauthorized //請求未經受權,這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用

  • 403 Forbidden //服務器收到請求,可是拒絕提供服務

  • 404 Not Found //請求資源不存在,eg:輸入了錯誤的URL

  • 500 Internal Server Error //服務器發生不可預期的錯誤

  • 503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常

Requests Headers(請求頭)

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8(爬蟲會用到)

Accept請求報頭域用於指定客戶端接受哪些類型的信息。eg:Accept:image/gif,代表客戶端但願接受GIF圖象格式的資源;Accept:text/html,代表客戶端但願接受html文本。

Accept-Encoding:gzip, deflate, sdch, br

Accept-Encoding請求報頭域相似於Accept,可是它是用於指定可接受的內容編碼。eg:Accept-Encoding:gzip.deflate.若是請求消息中沒有設置這個域服務器假定客戶端對各類內容編碼均可以接受。

Accept-Language:zh-CN,zh;q=0.8

Accept-Language請求報頭域相似於Accept,可是它是用於指定一種天然語言。eg:Accept-Language:zh-cn.若是請求消息中沒有設置這個報頭域,服務器假定客戶端對各類語言均可以接受

Cache-Control:no-cache

Cache-Control 是用來控制網頁的緩存,詳細能夠Cache-control_百度百科

Connection:keep-alive

HTTP持久鏈接(HTTP persistent connection,也稱做HTTP keep-alive或HTTP connection reuse)是使用同一個TCP鏈接來發送和接收多個HTTP請求/應答,而不是爲每個新的請求/應答打開新的鏈接的方法。

詳情介紹請參考HTTP持久鏈接

Cookie:d_c0="AACAWNtZswqPTnJ8dFXqaygiq82ekPD5_-xxxx(爬蟲會用到)

Cookie(複數形態Cookies),中文名稱爲「小型文本文件」或「小甜餅」[1],指某些網站爲了辨別用戶身份而儲存在用戶本地終端(Client Side)上的數據(一般通過加密)。定義於RFC2109。是網景公司的前僱員盧·蒙特利在1993年3月的發明[2]。詳情介紹請參考Cookie

舉個例子,當我登陸知乎後,知乎會給我一個cookie,而後我在之後的一段時間內,每次打開知乎,都不須要從新登陸。這是由於瀏覽器每次都會把我以前存儲的cookie帶上。

Host:zhuanlan.zhihu.com

當前請求網址的請求域

User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36(爬蟲會用到)

用戶是經過什麼工具來請求的,(由於我用的Google瀏覽器,因此顯示的是Chrome

Referer:https://www.zhihu.com/people/pa-chong-21/activities(爬蟲會用到)

是經過哪一個頁面到當前頁面的(也就是上一個頁面是什麼?當前截圖裏面沒有)

舉個例子,當我是經過百度搜索頁面點到當前頁面的,那麼Referer就是百度搜索頁

If-Modified-Since:Wed, 15 Feb 2017 09:14:13 GMT
If-None-Match:W/"58a41be5-190aa"
Last-Modified:Wed, 15 Feb 2017 09:14:13 GMT
ETag:"58a41be5-190aa"

這4個通常靜態頁面會用到 If-Modified-Since,If-None-Match
這兩個是請求頭,ETag,Last-Modified是返回頭(服務器返回的)

若是If-Modified-Since的值和Last-Modified相等 則代表當前請求的內容沒有變更,服務器返回 Status Code:304 Not Modified
If-None-MatchETag 同理

總結

看完本篇文章後,你應該要

  • 大概瞭解什麼是HTTP協議

  • HTTP常見請求方法有哪幾種?

  • HTTP常見狀態碼有哪些?

  • HTTP請求頭中,大概瞭解Accept,Cookie,User-Agent,Referer是幹啥的?


最後的最後,收藏的大哥們,能幫忙點個贊麼~

相關文章
相關標籤/搜索