HTTP與HTTPS簡介
HTTP協議(HyperText Transfer Protocal):
即超文本傳輸協議,是一種發布和接收HTML頁面的方法.
HTTPS協議(HyperText Transfer Protocal over Secure Socket Layer):
可理解為HTTP的安全版,即在HTTP協議的基礎上添加了SSL層.
SSL(Secure Sockets Layer安全套接子層):
主要用於WEB的安全傳輸,可以在傳輸層對數據進行加密.由netscape公司提出.
協議端口號:
HTTP:80
HTTPS:443
爬蟲的工作原理:
網絡爬蟲的抓取過程可以理解為模擬瀏覽器操作的過程
瀏覽器的主要功能是向服務器發出請求,並在窗口中顯示服務器返回的資源.
HTTP的請求與響應:
HTTP通信有兩部分組成:客戶端請求消息與服務器響應消息
瀏覽器發送HTTP請求的過程:
當用戶在地址欄中輸入一個URL並且回車的時候,瀏覽器會向HTTP服務器發送HTTP請求,HTTP請求最長用的是
瀏覽器發送Request請求去獲取服務器端的HTML文件,服務器則返回一個Response對象.
瀏覽器會分析Response中的HTML,發現其中會引用其它文件,如images css js等,此時瀏覽器會再次請求去獲取這些資源.
當所有的文件全部下載成功後,瀏覽器會根據HTML的語法結構組成最終的頁面.
客戶端HTTP請求:
客戶端發送一個HTTP請求到服務器的格式為:
請求行| 請求頭部 |空行 |請求數據
下圖為請求報文的一般格式:
一個典型的HTTP請求示例:
GET https://www.douban.com/ HTTP/1.1 Host: www.douban.com Connection: keep-alive Pragma: no-cache Cache-Control: no-cache User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3253.3 Safari/537.36 Upgrade-Insecure-Requests: 1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 #Accept-Encoding: gzip, deflate, br Accept-Language: zh,en-US;q=0.9,en;q=0.8,zh-TW;q=0.7,zh-CN;q=0.6 Cookie: bid=2MYBpxuz2yQ; __yadk_uid=bxInROHOuKKEb7tkiSiEZygLYuYP2kxO; gr_user_id=14916ea7-aee0-43ad-83ee-7a236df37d47; viewed="20451827_25861795"; _vwo_uuid_v2=C055442D3B3854F97DDE6AC4D757E5BC|34b0bccb8c4f1faab1336ba5e19cea3c; ll="108288"; _ga=GA1.2.310445079.1508424221; ps=y; push_noty_num=0; push_doumail_num=0; __utmv=30149280.14370; ap=1; __utmz=30149280.1509712941.8.4.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; _pk_ref.100001.8cb4=%5B%22%22%2C%22%22%2C1509723845%2C%22https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DMLpogEZkCppQDqzj-PhnXBPTzkvUx6DiIQSWuIdGr7pLuzgf-AdrA2UCWYNaYEjf%26wd%3D%26eqid%3Dfb0db111000170200000000359fc642a%22%5D; _pk_id.100001.8cb4=280d7bc2f732b51c.1508424213.8.1509723845.1509712941.; _pk_ses.100001.8cb4=*; __utma=30149280.310445079.1508424221.1509712941.1509723846.9; __utmc=30149280; __utmt=1; __utmb=30149280.1.10.1509723846
一般在抓出數據時,不對數據做壓縮處理,即註釋掉下面一行:
Accept-Encoding: gzip, deflate, sdch, br
請求方法:
HTTP請求有多種方法,但是最為常用的為GET 和 POST兩種方法:
GET是從服務器上獲取數據,POST是向服務器上傳送數據
GET請求的參數都顯示在瀏覽器網址上,HTTP服務器根據請求所包含的參數來產生響應內容,即GET請求的參數會成為URL的一部分.
POST請求參數存於請求體中(一般在表單中),消息長度沒有限制而且以隱式的方式進行傳送,通常用來向服務器提交信息量比較大的數據,請求的參數包含在"Content-Type"消息頭中,指明該消息的媒體類型和編碼.
一般不使用GET方式提交表單,因為可能顯示的暴露敏感信息
常用的請求報頭:
1.HOST(主機號及端口號):對應網址URL中的WEB名稱和端口號,用於指定被請求資源的Internet主機號和端口號.
2. Connection(鏈接類型):表示客戶端與服務器的連接類型
3. Upgrade-Insecure-Requests(升級為HTTPS請求):升級不安全的請求,意思會在加載HTTP資源時自動替換成HTTPS請求,讓瀏覽器不再顯示HTTPS頁面中的報警
4.User-Agent(瀏覽器名稱)
5.Accept(文件傳輸類型):指瀏覽器或其它客戶端可以接受的MIME(多用途互聯網郵件擴展)類型,服務器可以根據它判斷並返回適當的文件格式.
Accept:*/*表示什麽都可以接收
image/gif表示圖片
6.Referer(頁面跳轉處):表明產生請求的網頁來自於哪個URL,用戶是從該Referer頁面訪問到當前請求的頁面.這個屬性可以用來跟蹤WEB請求來自哪個頁面,來源網站等.
有時會遇到下載某網站圖片時,需要使用對應的referer ,否則無法下載圖片,這是因為該網站做了防盜鏈,原理是根據referer判斷是否是本網站的地址,如果是則可以下載,不是則拒絕.
7.Accept-Encoding(文件編解碼格式):指瀏覽器可以接受的編碼方式.編碼方式不同於文件格式,它是為了對文件進行壓縮以加快文件的傳輸速度.瀏覽器在接收到WEB響應之後先解碼,然後再檢查文件格式.
8.Accept-Language(語言種類):指出瀏覽器可以接受的語言種類,如en或en-us或zh-cn等.當服務器能夠提供一種以上的語言版本時要用到.
9.Accept-Charset(字符編碼):指瀏覽器可以接受的字符編碼,如果在請求消息中沒有設置這個域,缺省是任何字符集都可以接受.
10.Cookie:瀏覽器用這個屬性向服務器發送cookie,cookie是在瀏覽器中寄存的小型數據體,它可以記錄和服務器相關的用戶信息,也可以用來實現會話功能.
11.Content-Type(post數據類型):POST請求裏用來表示的內容類型
服務器端HTTP響應:
HTTP響應也由四個部分組成,分別是:狀態行 消息報頭 空行 響應正文
常見的狀態碼:
100-199:表示服務器成功接收部分請求,要求客戶端繼續提交其余請求才能完成整個處理過程
200-299:表示服務器成功接收請求並已經完成整個處理過程
300-399:為完成請求,客戶需進一步細化請求.列如請求的資源已經移動到一個新地址(302表示所請求的頁面已經臨時轉移至新的URL 307和304表示使用緩存)
400-499:客戶端請求有誤(404:服務器找不到相關頁面 403服務器拒絕訪問,權限不夠)
500-599:服務器端出現錯誤,常用500(請求未完成 服務器未知情況)
Cookie和Session:
客戶端和服務器之間的交互僅限於請求和響應,結束之後就會斷開,下次交互會被認為是新的連接,為了讓服務器記錄此用戶的狀態,必須找一個地方來記錄用戶的信息
Cookie:通過在客戶端記錄的信息來確認身份
Session:通過在服務器端記錄的信息來確認身份
HTTP與HTTPS簡介