HTTP與HTTPS相關知識
URL的開頭一般會有http或https,這是訪問資源需要的協議型別。有時還會看到ftp、sftp、smb開頭的URL,這些都是協議型別。一般使用得最多的還是http和https。
HTTP
HTTP的全稱是Hyper Text Transfer Protocol,中文名叫作超文字傳輸協議。HTTP協議是用於從網路傳輸超文字資料到本地瀏覽器的傳送協議,它能保證高效而準確地傳送超文字文件。HTTP由全球資訊網協會(World Wide Web Consortium)和Internet工作小組IETF(Internet Engineering Task Force)共同合作制定的規範,目前廣泛使用的是HTTP1.1版本。
HTTPS
HTTPS的全稱是Hyper Text Transfer Protocol over Secure Socket Layer,是以安全為目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,簡稱為HTTPS。
HTTPS的安全基礎是SSL,因此通過它傳輸的內容都是經過SSL加密的,它的主要作用可以分為兩種。
- 建立一個資訊保安通道來保證資料傳輸的安全。
- 確認網站的真實性,凡是使用了HTTPS的網站,都可以通過點選瀏覽器位址列的鎖頭標誌來檢視網站認證之後的真實資訊,也可以通過CA機構頒發的安全簽章來查詢。
而某些網站雖然使用了HTTPS協議,但還是會被瀏覽器提示不安全,比如
HTTP請求過程
我們訪問一個URL,看到頁面內容。其實是經過了客戶端向網站所在的伺服器傳送一個請求,網站伺服器接受到這個請求後進行處理和解析,然後返回對應的響應,接著傳回給瀏覽器的一整個過程。
以百度首頁為例。我們用chrome瀏覽器並開啟開發者工具訪問它。可以看到Network頁面會出現一個個的條目,這些條目,每一條就代表一次傳送請求和接收響應的過程。
而這些條目每一列的含義如下:
- Name:請求的名稱,一般會將URL的最後一部分內容當作名稱。
- Status:響應的狀態碼,這裡顯示為200,代表響應是正常的。通過狀態碼,我們可以判斷髮送了請求之後是否得到了正常的響應。
- Type:請求的文件型別。這裡為document,代表我們這次請求的是一個HTML文件,內容就是一些HTML程式碼。
- Initiator:請求源。用來標記請求是由哪個物件或程序發起的。
- Size:從伺服器下載的檔案和請求的資源大小。如果是從快取中取得的資源,則該列會顯示from cache。
- Time:發起請求到獲取響應所用的總時間。
- Waterfall:網路請求的視覺化瀑布流。
而點選這個條目,可以看到更詳細的一些資訊。
- General
- Request URL為請求的URL
- Request Method為請求的方法
- Status code為響應狀態碼
- Remote Address為遠端伺服器的地址和埠
- Referrer Policy為Referrer判別策略
Response Headers
這代表響應頭,其中包含了伺服器的型別、文件型別、日期等資訊,瀏覽器接受到響應後,會解析響應內容,進而呈現網頁內容。
——響應狀態碼
——Date
標識響應產生的時間
——Last-Modified
指定資源的最後修改時間
——Content-Encoding
指定響應內容的編碼。
——Content-Type
文件型別,指定返回的資料型別是什麼,如text/html代表返回HTML文件,application/x-javascript則代表返回JavaScript檔案,image/jpeg則代表返回圖片。
——Set-Cookie
設定Cookies。響應頭中的Set-cookie告訴瀏覽器需要將此內容放在Cookies中,下次請求攜帶Cookies請求。
——Expires
指定響應的過期時間。可以使代理伺服器或瀏覽器將載入的內容更新到快取中。如果再次訪問時,就可以直接從快取中載入,降低伺服器負載,縮短載入時間。
響應體可以在上面圖片中的Response標籤裡檢視。比如請求網頁時,它的響應體就是網頁的HTML程式碼;請求圖片時,響應體就是圖片的二進位制資料。
Request Headers
這代表請求頭。請求頭裡帶有許多請求資訊,例如瀏覽器標誌、Cookies、Host等資訊。
請求方法通常有兩種GET和POST。
在瀏覽器中直接輸入URL並回車,這便發起了一個GET請求,請求的引數會直接包含到URL的引數裡。比如百度一下Python,連結為http://www.baidu.com/s?wd=Python,其中URL包含了請求的引數資訊,這裡引數wd表示要搜的關鍵字。
POST請求大多在表單提交時發起。比如,對於一個登入表單,輸入使用者名稱和密碼後,點選“登入”按鈕,這通常會發起一個POST請求,其資料通常以表單的形式傳輸,而不會體現在URL中。
而且GET請求提交的資料最多隻有1024位元組,而POST沒有限制。
其他請求方法如下。
請求頭資訊說明如下:
——Accept
請求報頭域,用於指定客戶端可接受哪些型別的資訊。
——Accept-Language
指定客戶端可接受的語言型別。
——Accept-Encoding
指定客戶端可接受的內容編碼。
——Host
用於指定請求資源的主機IP和埠號,其內容為請求URL的原始伺服器或網管的位置。從HTTP1.1版本開始,請求必須包含此內容。
——Cookie
也常用複數形式Cookies,這是網站為了辨別使用者進行會話跟蹤而儲存在使用者本地的資料。它的主要功能是維持當前訪問會話。
——Referer
此內容用來標識這個請求時從哪個頁面發過來的,伺服器可以拿到這一資訊並作相應的處理,如做來源統計、防盜鏈處理等。
——User-Agent
簡稱UA,它時一個特殊的字串頭,可以使伺服器識別客戶使用的作業系統及版本、瀏覽器及版本等資訊。在做爬蟲時加上此資訊,可以偽裝為瀏覽器;如果不加,很可能會被識別出為爬蟲。
——Content-Type
也叫網際網路媒體型別(Internet Media Type)或者MIME型別,在HTTP協議訊息頭中,它用來表示具體請求中的媒體型別資訊。
關於請求體,GET請求,請求體為空;POST請求,請求體為表單資料。
要特別注意Content和POST提交資料方式的關係。
Content-Type | 提交資料的方式 |
---|---|
application/x-www-form-urlencoded | 表單資料 |
multipart/form-data | 表單檔案上傳 |
application/json | 序列化JSON資料 |
text/xml | XML資料 |
【參考】
[1]HTTP狀態碼|菜鳥教程
[3]《Python3網路爬蟲開發實戰》崔慶才