1. 程式人生 > >HTTP與HTTPS簡介

HTTP與HTTPS簡介

html http https cookie cookie session


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請求的過程:

  1. 當用戶在地址欄中輸入一個URL並且回車的時候,瀏覽器會向HTTP服務器發送HTTP請求,HTTP請求最長用的是

    GETPOST方法

  2. 瀏覽器發送Request請求去獲取服務器端的HTML文件,服務器則返回一個Response對象.

  3. 瀏覽器會分析Response中的HTML,發現其中會引用其它文件,如images css js等,此時瀏覽器會再次請求去獲取這些資源.

  4. 當所有的文件全部下載成功後,瀏覽器會根據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簡介