HTTP協(xié)議簡介
HTTP是一個基于請求與響應(yīng)模式的客燕、無狀態(tài)的鸳劳、應(yīng)用層的協(xié)議,骋泊辏基于TCP的連接方式赏廓,HTTP1.1版本中給出一種持續(xù)連接的機(jī)制,絕大多數(shù)的Web開發(fā)傍妒,都是構(gòu)建在HTTP協(xié)議之上的Web應(yīng)用幔摸。
HTTP URL (URL是一種特殊類型的URI,包含了用于查找某個資源的足夠的信息)的格式如下:
http://host[":"port][abs_path]
http表示要通過HTTP協(xié)議來定位網(wǎng)絡(luò)資源颤练;host表示合法的Internet主機(jī)域名或者IP地址既忆;port指定一個端口號,為空則使用缺省端口80嗦玖;abs_path指定請求資源的URI患雇;如果URL中沒有給出abs_path,那么當(dāng)它作為請求URI時宇挫,必須以“/”的形式給出苛吱,通常這個工作瀏覽器自動幫我們完成。HTTP報文
-
請求報文(HTTP Request)
HTTP 協(xié)議是以 ASCII 碼傳輸器瘪,建立在 TCP/IP 協(xié)議之上的應(yīng)用層規(guī)范翠储。規(guī)范把 HTTP 請求分為三個部分:狀態(tài)行绘雁、請求頭、消息主體彰亥。類似于下面這樣:
<method> <request-URL> <version> <headers> <entity-body>
HTTP定義了與服務(wù)器交互的不同方法咧七,最基本的方法有4種,分別是GET任斋,POST继阻,PUT,DELETE废酷。URL全稱是資源描述符瘟檩,我們可以這樣認(rèn)為:一個URL地址,它用于描述一個網(wǎng)絡(luò)上的資源澈蟆,而 HTTP 中的GET墨辛,POST,PUT趴俘,DELETE就對應(yīng)著對這個資源的查睹簇,增,改寥闪,刪4個操作太惠。
-
GET用于信息獲取,而且應(yīng)該是安全的 和 冪等的疲憋。
所謂安全的意味著該操作用于獲取信息而非修改信息凿渊。換句話說,GET 請求一般不應(yīng)產(chǎn)生副作用缚柳。就是說埃脏,它僅僅是獲取資源信息,就像數(shù)據(jù)庫查詢一樣秋忙,不會修改彩掐,增加數(shù)據(jù),不會影響資源的狀態(tài)灰追。
冪等的意味著對同一URL的多個請求應(yīng)該返回同樣的結(jié)果佩谷。
-
-
響應(yīng)報文(HTTP Response)
HTTP 響應(yīng)與 HTTP 請求相似,HTTP響應(yīng)也由3個部分構(gòu)成监嗜,分別是:
狀態(tài)行
響應(yīng)頭(Response Header)
響應(yīng)正文
狀態(tài)行由協(xié)議版本谐檀、數(shù)字形式的狀態(tài)代碼、及相應(yīng)的狀態(tài)描述裁奇,各元素之間以空格分隔桐猬。-
常見的狀態(tài)碼有如下幾種:
- 200 OK 客戶端請求成功
- 301 Moved Permanently 請求永久重定向
- 302 Moved Temporarily 請求臨時重定向
- 304 Not Modified 文件未修改,可以直接使用緩存的文件刽肠。
- 400 Bad Request 由于客戶端請求有語法錯誤溃肪,不能被服務(wù)器所理解免胃。
- 401 Unauthorized 請求未經(jīng)授權(quán)。這個狀態(tài)代碼必須和WWW-Authenticate報頭域一起使用
- 403 Forbidden 服務(wù)器收到請求惫撰,但是拒絕提供服務(wù)羔沙。服務(wù)器通常會在響應(yīng)正文中給出不提供服務(wù)的原因
- 404 Not Found 請求的資源不存在,例如厨钻,輸入了錯誤的URL
- 500 Internal Server Error 服務(wù)器發(fā)生不可預(yù)期的錯誤扼雏,導(dǎo)致無法完成客戶端的請求。
- 503 Service Unavailable 服務(wù)器當(dāng)前不能夠處理客戶端的請求夯膀,在一段時間之后诗充,服務(wù)器可能會恢復(fù)正常。
-
Example
-
上面的介紹可能聽的有點迷糊诱建,我們來實際操作一下
用Chrome打開Blog
按下鍵盤上的F12鍵蝴蜓,打開開發(fā)人員工具
image
點擊紅框內(nèi)的Network可以看到當(dāng)前資源加載情況(如果Network項中為空白就在網(wǎng)頁上刷新一遍再切換回來看看)
點擊其中一個資源
[圖片上傳失敗...(image-daa578-1548249118307)]
這時候可以看到右側(cè)有一個Headers欄已經(jīng)打開其中的General包括了上面我們講的請求URL,請求方法俺猿,相應(yīng)的狀態(tài)碼以及一些其他的東西
Response Headers響應(yīng)頭及一些相關(guān)信息
Request Headers請求頭包含我們電腦向服務(wù)器發(fā)起請求的請求頭信息茎匠,可以看到其中user-agent包含了我們的電腦信息
`Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36`
Mozila是當(dāng)時瀏覽器大戰(zhàn)留下來的小玩意,表示偽裝成Mozilla排版引擎的瀏覽器以達(dá)到兼容
押袍,Windows NT 10.0表明了我們的系統(tǒng)內(nèi)核版本汽抚,AppleWebKit/537.36 (KHTML, like Gecko)表示瀏覽器所使用的平臺及瀏覽器平臺的細(xì)節(jié),Chrome/62.0.3202.75 Safari/537.36是被瀏覽器用于指示特定的直接由瀏覽器提供或者通過第三方提供的可用的增強(qiáng)功能伯病。更多詳細(xì)內(nèi)容請到HTTP協(xié)議詳解了解
當(dāng)我們寫一個爬蟲時,很多時候都是在用GET否过、POST請求方法午笛,通過請求庫向服務(wù)器請求數(shù)據(jù),獲取到的數(shù)據(jù)再進(jìn)行處理苗桂。有些時候網(wǎng)站不想讓你抓取他們的數(shù)據(jù)药磺,就會根據(jù)一些請求信息進(jìn)行排查,像User Agent煤伟、Host癌佩、Referer、IP這都是排查的重點便锨,所以在更高級的爬蟲學(xué)習(xí)中围辙,我們會對請求信息進(jìn)行偽造,以達(dá)到欺騙對方反爬蟲邏輯的目的
-
首發(fā)于個人博客Bismuth