Python網絡爬蟲(一)Web及網絡基礎

你可知道當在瀏覽器地址欄輸入URL("網址」)後,Web網頁是如何顯示的嗎?瀏覽器

其實,當你按下回車後,瀏覽器(客戶端)幫你給服務器發送了請求,服務器收到請求後給出相應的響應,緩存

以後,瀏覽器再把響應內容進行解析,就顯現出一個個豐富多彩的網頁,安全

在這個過程當中,Web使用了一種名爲HTTP(HyperText Transfer Protocol,超文本傳輸協議),完成從客戶端到服務器端的一系列操做。協議,指的是規則的約定,說白了就是「規矩」。服務器

URL(Universal Resource Locator,統一資源定位符)是用於完整地描述Internet上網頁和其餘資源的地址的一種標識方法。網絡

其基本格式爲:scheme://host[:port]/path/…/[?query-string][#anchor]dom

  • scheme:協議(例如:http, https, ftp)
  • host:服務器的IP地址或者域名
  • port:服務器的端口(若是是走協議默認端口,缺省端口80)
  • path:訪問資源的路徑
  • query-string:參數,發送給http服務器的數據
  • anchor:錨(跳轉到網頁的指定錨點位置)

HTTP報文

用於HTTP協議交互的信息被稱爲HTTP報文。客戶端的HTTP報文叫作請求報文,服務器端的HTTP報文叫作響應報文。其格式分別以下:編碼

  1. 請求報文

請求行由請求方法字段、URL字段和HTTP協議版本字段3個字段組成,它們用空格分隔。例如,GET /index.html HTTP/1.1加密

HTTP協議的請求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。3d

請求頭部由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號「:」分隔。請求頭部通知服務器有關於客戶端請求的信息,典型的請求頭有:

  • User-Agent:產生請求的瀏覽器類型。
  • Accept:客戶端可識別的內容類型列表。
  • Host:請求的主機名,容許多個域名同處一個IP地址,即虛擬主機

最後一個請求頭以後是一個空行,發送回車符和換行符,通知服務器如下再也不有請求頭。

  1. 響應報文

HTTP響應也由三個部分組成,分別是:狀態行、消息報頭、響應正文。

狀態行格式以下:

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述。狀態代碼由三位數字組成,第一個數字定義了響應的類別,且有五種可能取值。

常見的狀態碼以下:

  • 200 OK:客戶端請求成功。
  • 400 Bad Request:客戶端請求有語法錯誤,不能被服務器所理解。
  • 401 Unauthorized:請求未經受權,這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用。
  • 403 Forbidden:服務器收到請求,可是拒絕提供服務。
  • 404 Not Found:請求資源不存在,舉個例子:輸入了錯誤的URL。
  • 500 Internal Server Error:服務器發生不可預期的錯誤。
  • 503 Server Unavailable:服務器當前不能處理客戶端的請求,一段時間後可能恢復正常。

HTTP首部

四種HTTP首部字段類型:

  • 通用首部字段(General Header Fields): 請求報文和響應報文兩方都會使用的首部;
  • 請求首部字段(Request Header Fields): 從客戶端向服務器發送請求報文時使用的首部。補充了請求的附加內容,客戶端的信息,響應內容相關的優先級等信息。
  • 響應首部字段(Response Header Fields): 從服務器向客戶端返回響應報文時使用的首部。補充了響應的附加內容,也會要求客戶端附加額外的內容信息。
  • 實體首部字段(Entity Header Fields): 針對請求報文和響應報文的實體部分使用的首部。補充了資源內容更新時間等與實體有關的信息。

通用首部字段

首部字段名 說明
Cache-Control 控制緩存的行爲
Connection 逐跳首部,鏈接的管理
Date 建立報文的日期時間
Pragna 報文指令
Trailer 報文末端的首部一覽
Transfer-Encoding 指定報文主體的傳輸編碼方式
Upgrade 升級爲其餘協議
Via 代理服務器的相關信息
Warning 錯誤通知

請求首部字段

首部字段名 說明
Accept 用戶代理可處理的媒體類型
Accept—Charset 優先的字符集
Accept-Encoding 優先的內容編碼
Accept-Language 優先的語言(天然語言)
Authorization Web認證信息
Expect 期待服務器的指定行爲
From 用戶的電子郵箱地址
Host 請求資源所在服務器
if-Match 比較實體標記(ETag)
if-Modified-Since 比較資源的更新時間
if-None-Match 比較實體標記(與if-Match相反)
if-Range 資源爲更新時發送實體Byte的範圍請求
if-Unmodified-Since 比較資源的更新時間(與if-Modified-Since相反)
Max-Forwards 最大傳輸逐跳數
Proxy-Authorization 代理服務器要求客戶端的認證信息
Range 實體字節範圍請求
Referer 對請求中的URL的原始獲取方法
TE 傳輸編碼的優先級
User-Agent HTTP客戶端程序的信息

響應首部字段

首部字段名 說明
Accept-Ranges 是否接受字節範圍請求
Age 推算資源建立通過時間
ETag 資源的匹配信息
Location 令客戶端重定向至指定的URL
Proxy-Authenticate 代理服務器對客戶端的認證信息
Rety-After 對再次發起請求的時機要求
Server HTTP服務器的安裝信息
Vary 代理服務器緩存的管理信息
WWW-Authenticate 服務器對客戶端的認證信息

實體首部字段

首部字段名 說明
Allow 資源科支持的HTTP方法
Content-Encoding 實體主體適用的編碼方式
Content-Language 實體主體的天然語言
Content-Length 實體主體的大小(單位:字節)
Content-Location 替代對資源的URL
Content-MD5 實體主體的報文摘要
Content-Range 實體主體的位置範圍
Content-Type 實體主體的媒體類型
Expires 實體主體過時的日期時間
Last-Modified 資源的最後修改日期時間

爲Cookie服務的首部字段

首部字段名 說明 首部類型
Set-Cookie 開始狀態管理全部的Cookie信息 響應首部字段
Cookie 服務器接收到的Cookie信息 請求首部字段

Set—Cookie字段的屬性

屬性 說明
NAME=VALUE 賦予Cookie的名稱和其值
expires=DATE Cookie的有效期(若不mingque指定則默認爲瀏覽器關閉前爲止)
path=PATH 將服務器上的文件目錄做爲Cookie的適用對象(若不指定則默認爲文檔所在的目錄)
domain=域名 做爲Cookie適用對象的域名(若不指定則默認爲建立Cookie的服務器的域名)
Scure 僅在HTTPS安全通訊時纔會發送Cookie
HttpOnly 加以限制,使Cookie不能被JavaScript腳本訪問

詳情請看:
https://zh.wikipedia.org/wiki/HTTP%E5%A4%B4%E5%AD%97%E6%AE%B5

代理、網關、隧道

代理是一種有轉發功能的應用程序,它扮演了位於服務器和客戶端「中間人」的角色,接收由客戶端發送的請求並轉發給服務器,同時也接受服務器返回的響應並轉發給客戶端。

網關是轉發其餘服務器通訊數據的服務器,接收從客戶端所發送來的請求時,它就像本身擁有資源的源服務器同樣對請求進行處理。

隧道是在相隔甚遠的客戶端和服務器二者之間進行中轉,並保持雙方通訊鏈接的應用程序。

HTTPS

HTTP的缺點

  • 通訊使用明文(不加密),內容可能會被竊聽;
  • 不驗證通訊方的身份,所以可能遭遇假裝;
  • 沒法證實報文的完整性,因此可能已遭篡改。

HTTP + 加密 + 認證 + 完整性保護 = HTTPS

HTTPS並不是是應用層的一種新協議。只是普通HTTP通訊接口部分用SSL和TLS協議替代而已。

SSL是獨立於HTTP的協議,因此不光是HTTP協議,其餘運行在應用層的SMTP和Telnet等協議都可配合SSL協議使用。因此說SSL是當今世界上應用最爲普遍的網絡安全技術。

  • 因爲HTTPS須要作服務器、客戶端雙方加密及解密處理,所以會消耗CPU和內存等硬件資源;
  • 和HTTP相比,SSL通訊部分消耗網絡資源。而SSL通訊部分,又由於要對通訊進行處理,因此時間上有延遲了;
  • 和HTTP相比,網絡負載和速度上會變慢2~100倍。

爲何不一直使用HTTPS?

  • 一個緣由與純文本通訊相比,加密通訊會消耗更多的CPU及內存資,可以處理的請求數量一定會減小;
  • 另外一個緣由,想要節約購買證書的開銷也是緣由之一。

所以,若是是非敏感信息則使用HTTP通訊,只有在包含我的信息等敏感數據時,才利用HTTPS加密通訊。

最後,若是你想了解更多有關內容,推薦閱讀《圖解HTTP》、《HTTP權威指南》等一些資料。

同載於:http://www.viljw1557.cn

相關文章
相關標籤/搜索