在本文中,我們會詳細了解 HTTP的基本原理,了解在瀏覽器中敲入URL 到取得網頁內容之間發生了什麼事。了解了這些內容,有助於我們進一步了解爬蟲的基本原理。
這裡我們先了解URI和URL,URI的全稱為Uniform Resource Identifier,即統―資源標誌符,URL的全稱為Universal Resource Locator,即統一資源定位符。
URL是URI的子集,也就是說每個URL都是URI,但不是每個URI都是 URL。那麼,怎樣的URI不是URL呢?URI還包括一個子類別叫作 URN,它的全稱為Universal Resource Name,即統―資源名稱。 URN 只命名資源而不指定如何定位資源,例如urn:isbn:0451450523指定了一本書的ISBN,可以唯一標識這本書,但是沒有指定到哪裡定位這本書,這就是URN。 URL、URN和URI的關係。
但是在目前的互聯網中,URN用得非常少,所以幾乎所有的URI都是URL,一般的網頁鏈接我們既可以稱為URL,也可以稱為URI,我個人習慣稱為URL。
接下來,我們再了解一一個概念——超文本, 其英文名稱叫做hypertext,我們在瀏覽器裡看到的網
頁是超文本解析而成的,其網頁原始碼是一系列HTML程式碼,裡麵包含了-系列標籤,例如img顯
示圖片,p指定顯示段落等。瀏覽器解析這些標籤後,便形成了我們平常看到的網頁,而網頁的原始碼HTML可以稱為超文本。
例如,我們在Chrome瀏覽器裡面打開任何一一個頁面,如淘寶首頁,右鍵任一地方並選擇「檢查」
項目(或直接按快捷鍵F12),即可打開瀏覽器的開發者工具,這時在Elements 選項卡即可看到當前
網頁的源代碼,這些源代碼都是超文本,如圖所示。
在百度的首頁, URL的開頭會有http 或https,這就是存取資源所需的協定類型。有時,我們也會看到ftp、sftp、 smb 開頭的URL,它們都是協定類型。在爬蟲中,我們抓取的頁面通常是http或https協議的,這裡先了解這兩個協議的含義。
HTTP的全名為Hyper Text Transfer Protocol, 中文稱為作超文本傳輸協定。 HTTP協議是用於從網路傳輸超文本資料到本機瀏覽器的傳送協議,它能保證有效率且準確地傳送超文本文件。 HTTP由萬維網協會( World Wide Web Consortium )和Internet工作小組IETF ( Internet Engineering Task Force )共同合作制定的規範,目前廣泛使用的是HTTP1.1版本。
HTTPS的全名是Hyper Text Transfer Protocol over Secure Socket Layer,是以安全為目標的HTTP
通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,簡稱HTTPS。
HTTPS的安全基礎是SSL,因此通過它傳輸的內容都是經過SSL加密的,它的主要作用可以分
為兩種。
建立一個資訊安全通道來確保資料傳輸的安全。
確認網站的真實性,凡是使用了HTTPS的網站,都可以透過點擊瀏覽器網址列的鎖頭標誌來查看網站認證之後的真實信息,也可以透過CA機構核發的安全簽章來查詢。
現在越來越多的網站和App都已經朝著HTTPS方向發展,例如:
蘋果公司強制所有ioS App在2017年1月1日前全部改為使用HTTPS加密,否則App就無法在應用程式商店上架。
Google從2017年1月推出的Chrome 56開始,對未進行HTTPS加密的網址連結亮出風險提示,即在網址列的顯著位置提醒用戶「此網頁不安全" 。
騰訊微信小程式的官方需求文件要求後台使用HTTPS請求進行網路通信,不滿足條件的網域名稱和協定無法要求。
我們在瀏覽器中輸人一一個URL,回車之後便會在瀏覽器中觀察到頁面內容。實際上,這個過程是
瀏覽器向網站所在的伺服器發送了一個請求,網站伺服器接收到這個請求後進行處理和解析,然後返回對應的回應,接著傳回給瀏覽器。回應裡包含了頁面的原始碼等內容,瀏覽器再解析,便將網頁呈現了出來。
此處客戶端即代表我們自己的PC或手機瀏覽器,伺服器即要存取的網站所在的伺服器。
請求,由客戶端向服務端發出,可以分為4部分內容:請求方法( Request Method)、請求的網址
( Request URL ) 、請求頭( Request Headers )、請求體( Request Body )。
請求方法
常見的請求方法有兩種: GET和POST。
在瀏覽器中直接輸入URL並回車,這便發起了一個GET請求,請求的參數會直接包含到URL裡。例如,在百度中搜尋Python,這就是一一個GET請求,連結為htps://www baidu. com/,其中URL中包含了請求的參數信息,這裡參數wd表示要搜尋的關鍵字。 POST 請求大多在表單提交時發起。例如,對於一個登入表單,輸人使用者名稱和密碼後,點擊「登入」按鈕,這通常會發起一個 POST請求,其資料通常以表單的形式傳輸,而不會體現在URL中。
GET和POST請求方法有以下區別:
GET請求中的參數包含在URL裡面,資料可以在URL中看到,而POST請求的URL不會包含這些數據,數據都是透過表單形式傳輸的,會包含在請求體中。
GET請求提交的資料最多只有1024字節,而POST方式沒有限制。
一般來說,登入時,需要提交使用者名稱和密碼,其中包含了敏感信息,使用GET方式請求的話,密碼就會暴露在URL裡面,造成密碼洩露,所以這裡最好以POST方式發送。上傳文件時,由於文件內容比較大,也會選用POST方式。
我們平常遇到的絕大部分請求都是GET或POST請求,另外還有一些請求方法, 如GET、HEAD、
POST、PUT、 DELETE、OPTIONS、CONNECT、TRACE等。
請求的網址
请求的网址,即统一资源定 位符URL,它可以唯一确定 我们想请求的资源。
#請求頭
请求头,用来说明服务器要使用的附加信息,比较重要的信息有Cookie . Referer. User-Agent等。
请求体一般承载的内容是 POST请求中的表单数据,而对于GET请求,请求体则为空。
#回應,由服務端傳回給客戶端,可以分成三部分:回應狀態碼( Response Status Code).反應頭( Response Headers )和反應體( Response Body )。
响应状态码表示服务器的响应状态,如200代表服务器正常响应,404代表页面未找到,500代表 服务器内部发生错误。在爬虫中,我们可以根据状态码来判断服务器响应状态,如状态码为200,则 证明成功返回数据,再进行进一步的处理, 否则直接忽略。
响应头包含了服务器对请求的应答信息,如Content-Type、Server、 Set-Cookie 等。
最重要的当属响应体的内容了。响应的正文数据都在响应体中,比如请求网页时,它的响应体 就是网页的HTML代码;请求- -张图片时 ,它的响应体就是图片的二进制数据。我们做爬虫请 求网页后,要解析的内容就是响应体.
以上是Python網路爬蟲中HTTP協定的原理是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!