Http協議

HTTP 協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它可以使瀏覽器更加高效,減少網絡傳輸。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示(如文本先於圖形)等,網絡爬蟲主要就是與http協議打交道。
Https協議
HTTPS協議:是HTTP協議的加密版本,在HTTP下加入了SSL層。服務器端口號是443端口。
HTTP 請求過程:
1.當用戶在瀏覽器的地址欄中輸入一個URL並按回車鍵之後,瀏覽器會向HTTP服務器發送HTTP請求。
2.當我們在瀏覽器輸入URL https://www.baidu.com的時候,瀏覽器發送一個Request請求去獲取 https://www.baidu.com 的html文件,服務器把Response文件對象發送回給瀏覽器。
在這裏插入圖片描述
3.瀏覽器分析Response中的 HTML,發現其中引用了很多其他文件,比如Images文件,CSS文件,JS文件。 瀏覽器會自動再次發送Request去獲取圖片,CSS文件,或者JS文件。
4.當所有的文件都下載成功後,網頁會根據HTML語法結構,完整的顯示出來了。
在這裏插入圖片描述
這就是一個用戶在web上交互的基本過程。
當然如果以上過程中的某一步出現錯誤,那麼產生錯誤的信息將返回到客戶端,在顯示屏輸出,這些過程是由 HTTP 協議自己完成的。如地址錯誤
在這裏插入圖片描述
解析URL
URL是Uniform Resource Locator的簡寫,統一資源定位符。 一個URL由以下幾部分組成:
scheme://host:port/path/?query-string=xxx#anchor
scheme:代表的是訪問的協議,一般爲http或者https以及ftp等。
host:主機名,域名,比如www.baidu.com
port:端口號。當你訪問一個網站的時候,瀏覽器默認使用80端口。
path:查找路徑。比如:www.jianshu.com/trending/now,後面的trending/now就是path。
query-string:查詢字符串,比如:www.baidu.com/s?wd=python,後面的wd=python就是查詢字符串。
anchor:錨點,後臺一般不用管,前端用來做頁面定位的。
在瀏覽器中請求一個url,瀏覽器會對這個url進行一個編碼。除英文字母,數字和部分符號外,其他的全部使用百分號+十六進制碼值進行編碼。
常用的請求方法:
在Http協議中,定義了八種請求方法。這裏介紹兩種常用的請求方法,分別是get請求和post請求。
1.get請求:一般情況下,只從服務器獲取數據下來,並不會對服務器資源產生任何影響的時候會使用get請求。
2.post請求:向服務器發送數據(登錄)、上傳文件等,會對服務器資源產生影響的時候會使用post請求。 以上是在網站開發中常用的兩種方法。並且一般情況下都會遵循使用的原則。但是有的網站和服務器爲了做反爬蟲機制,也經常會不按常理出牌,有可能一個應該使用get方法的請求就一定要改成post請求,這個要視情況而定。
請求頭常見參數:
HTTP 頭部信息由衆多的頭域組成,每個頭域由一個域名、冒號(:)和域值三部分組成。域名是大小寫無關的,域值前可以添加任何數量的空格符,頭域可以被擴展爲多行,在每行開始處,使用至少一個空格或製表符。
通過瀏覽器訪問網頁時,使用 F12 打開開發者工具,裏面可以監控整個 HTTP 訪問的過程。下面就以訪問博客園的 HTTP 請求進行分析,首先是瀏覽器發出請求,請求頭的數據如下:
在這裏插入圖片描述
GET 代表的是請求方式,HTTP/1.1 表示使用 HTTP 1.1 協議標準。
Host 頭域,用於指定請求資源的 Intenet 主機和端口號,必須表示請求 URL 的原始服務器或網關的位置。HTTP/1.1 請求必須包含主機頭域,否則系統會以400狀態碼返回。
User-Agent 頭域,裏面包含發出請求的用戶信息,其中有使用的瀏覽器型號、版本和操作系統的信息。這個頭域經常用來作爲反爬蟲的措施。
Accept 請求報頭域,用於指定客戶端接受哪些類型的信息。例如:Accept:image/gif,表明客戶端希望接受 GIF 圖象格式的資源;Accept:text/html,表明客戶端希望接受 html 文本。
Accept-Language 請求報頭域,類似於 Accept,但是它用於指定一種自然語言。例如:Accept-Language:zh-cn. 如果請求消息中沒有設置這個報頭域,服務器假定客戶端對各種語言都可以接受。
Accept-Encoding 請求報頭域,類似於 Accept,但是它用於指定可接受的內容編碼。例如:Accept-Encoding:gzip.deflate。如果請求消息中沒有設置這個域服務器假定客戶端對各種內容編碼都可以接受。
Connection 報頭域允許發送用於指定連接的選項。例如指定連接的狀態是連續,或者指定“close”選項,通知服務器,在響應完成後,關閉連接。
If-Modified-Since 頭域用於在發送 HTTP 請求時,把瀏覽器端緩存頁面的最後修改時間一起發到服務器去,服務器會把這個時間與服務器上實際文件的最後修改時間進行比較。如果時間一致,那麼返回 HTTP 狀態碼304(不返回文件內容),客戶端收到之後,就直接把本地緩存文件顯示到瀏覽器中。如果時間不一致,就返回 HTTP 狀態碼200和新的文件內容,客戶端收到之後,會丟棄舊文件,把新文件緩存起來,並顯示到瀏覽器中。
請求發送成功後,服務器進行響應,接下來看一下響應的頭信息,數據如下:
在這裏插入圖片描述
響應頭中包含以下內容:
HTTP/1.1 表示使用 HTTP 1.1 協議標準,200OK 說明請求成功。
Date 表示消息產生的日期和時間。
Content-Type 實體報頭域用於指明發送給接收者的實體正文的媒體類型。text/html;charset=utf-8 代表 HTML 文本文檔,UTF-8 編碼。
Transfer-Encoding:chunked 表示輸出的內容長度不能確定。
Connection 報頭域允許發送用於指定連接的選項。例如指定連接的狀態是連續,或者指定“close”選項,通知服務器,在響應完成後,關閉連接。
Vary 頭域指定了一些請求頭域,這些請求頭域用來決定當緩存中存在一個響應,並且該緩存沒有過期失效時,是否被允許利用此響應去回覆後續請求而不需要重複驗證。
Cache-Control 用於指定緩存指令,緩存指令是單向的,且是獨立的。請求時的緩存指令包括:no-cache(用於指示請求或響應消息不能緩存)、no-store、max-age、max-stale、min-fresh、only-if-cached;響應時的緩存指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage。
Expires 實體報頭域給出響應過期的日期和時間。爲了讓代理服務器或瀏覽器在一段時間以後更新緩存中(再次訪問曾訪問過的頁面時,直接從緩存中加載,縮短響應時間和降低服務器負載)的頁面,我們可以使用 Expires 實體報頭域指定頁面過期的時間。
Last-Modified 實體報頭域用於指示資源的最後修改日期和時間。
Content-Encoding 實體報頭域被用作媒體類型的修飾符,它的值指示了已經被應用到實體正文的附加內容的編碼,因而要獲得 Content-Type 報頭域中所引用的媒體類型,必須採用相應的解碼機制。
從上面分析的過程中,大家基本上了解了請求和響應的頭信息,最後進行一下總結:
HTTP 消息報頭主要包括普通報頭、請求報頭、響應報頭、實體報頭。具體如下:
1)在普通報頭中,有少數報頭域用於所有的請求和響應消息,但並不用於被傳輸的實體,只用於傳輸的消息。
2)請求報頭允許客戶端向服務器端傳遞請求的附加信息以及客戶端自身的信息。
3)響應報頭允許服務器傳遞不能放在狀態行中的附加響應信息,以及關於服務器的信息和對 Request-URI 所標識的資源進行下一步訪問的信息。
4)請求和響應消息都可以傳送一個實體。一個實體由實體報頭域和實體正文組成,但並不是說實體報頭域和實體正文要在一起發送,可以只發送實體報頭域。實體報頭定義了關於實體正文和請求所標識的資源的元信息。
通過下表對報文頭進行分類列舉說明。
常見普通報頭
在這裏插入圖片描述
常見請求報頭
在這裏插入圖片描述
常見響應報頭
在這裏插入圖片描述
常見實體報頭
在這裏插入圖片描述

常見響應狀態碼:
當瀏覽者訪問一個網頁時,瀏覽者的瀏覽器會向網頁所在服務器發出請求。在瀏覽器接收並顯示網頁前,此網頁所在的服務器會返回一個包含 HTTP 狀態碼的信息頭(server header)用以響應瀏覽器的請求。HTTP 狀態碼主要是是爲了標識此次 HTTP 請求的運行狀態。下面是常見的 HTTP 狀態碼:
200——請求成功。
301——資源(網頁等)被永久轉移到其他 URL。
404——請求的資源(網頁等)不存在。
500——內部服務器錯誤。
HTTP 狀態碼由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型。HTTP 狀態碼共分爲5種類型,如表下所示。
HTTP 狀態碼
在這裏插入圖片描述
全部的 HTTP 狀態碼的信息,請大家查詢 HTTP 協議標準手冊。
總結:本章主要講解了 Web 前端知識和HTTP 的基本概念,在這些知識中,重點掌握HTTP請求流程、,這對接下來的 Python 爬蟲開發有着非常直接的作用,有助於爬蟲開發的快速入門。本章講解的只是 Web 前端的基礎知識,希望大家有時間系統地學習 Web 前端的知識,這樣對之後涉及協議分析和反爬蟲措施的應對方面有很大幫助。
動手實現小爬蟲項目:如何使用github
將代碼託管到github上,可以方便地瀏覽項目版本演進(記錄自己完善項目的過程)、進行版本回退(如果不小心刪掉了重要代碼或者弄出bug了,可以退回到以前的版本),並且可用於多人協同開發(多人開發不必頻繁傳文件、手工合併了)。
首先可以從Git官網直接下載安裝程序,然後按默認選項安裝即可。
在這裏插入圖片描述
打開git bash,在命令行中輸入
在這裏插入圖片描述
目的是給你正在使用的電腦起一個用戶名、配置一個郵箱聯繫方式,用於後續向github提交時的權限認證,稍後會在你的github賬戶裏配置某個用戶名、郵箱所屬的電腦可以向該github賬戶提交代碼,畢竟任何人都有權限提交的話你的github會很亂的。
在git bash中輸入
在這裏插入圖片描述
直接一直按回車Enter,本地的密鑰對就生成了。
在這裏插入圖片描述
在用戶目錄下會生成公鑰和私鑰(密鑰加密傳輸的知識如感興趣可自行查閱學習)。之後,輸入
在這裏插入圖片描述
將查看到的公鑰複製。登錄你的github賬戶,點擊你的頭像,然後 Settings -> 左欄點擊 SSH and GPG keys -> 點擊 New SSH key。然後你複製上面的公鑰內容,粘貼進“Key”文本域內。title域,自己隨便起個名字。之後,你這臺電腦就可以向你的github賬戶上傳代碼了。
接下來我們來到你的github賬戶,點擊“+”,點擊New repository新建倉庫,自定義一個倉庫名字,然後點擊create repository。
在這裏插入圖片描述
之後提示可以用三種方式初始化倉庫,這裏我們使用第一種,在本地新建一個
在這裏插入圖片描述
打開上節課使用pycharm創建的項目的目錄,右鍵打開菜單,在當前目錄打開git bash
在這裏插入圖片描述
輸入“git init”,讓當前目錄成爲一個git倉庫,當前目錄的所有文件目前位於工作區中;輸入“git add .”,將當前目錄所有文件都添加到stage暫存區中,輸入“git commit -m “first commit””將暫存區中的文件修改添加到倉庫中。輸入“git remote add origin https://github.com/GeXeLr007/demogit.git(這裏要換成你自己的github賬戶名和倉庫名)”讓本地倉庫和遠程倉庫相關聯。輸入“git push -u origin master”將本地提交推送到遠程倉庫。(關於工作區、暫存區、倉庫的關係隨着git用的多了看的資料多了會慢慢理解透徹的)
在這裏插入圖片描述
之後,在pycharm中寫代碼,完成一天的工作學習後,按照“git add .”、“git commit -m “這裏寫上你本次提交的註釋””、“git push origin master”(代表推送到遠程倉庫的master分支)的步驟即可將代碼上傳到github倉庫中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章