国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Linux下cURL使用教程之二:HTTP協(xié)議概述

http://www.blogdaren.com/post-133.html

2013.11

雖然cURL支持多種協(xié)議,但日常我們最常用的還是HTTP協(xié)議,下文中著重介紹HTTP的相關(guān)使用方法,因此我們要對HTTP協(xié)議有所了解。

HTTP,超文本傳送協(xié)議,通過因特網(wǎng)傳送萬維網(wǎng)文檔的數(shù)據(jù)傳送協(xié)議。

我們訪問一個(gè)網(wǎng)頁的實(shí)際過程如下:

客戶端C===HTTP請求===>服務(wù)端S:GET index.html http/1.1客戶端C<==HTTP響應(yīng)====服務(wù)端S:HTTP/1.1 200 OK HTML文件內(nèi)容

HTTP協(xié)議本身是個(gè)無狀態(tài)協(xié)議,它不像其他基于會話的協(xié)議那樣去不斷追蹤、記憶事務(wù)處理過程。而它要做的就只是簡單的

連接=>發(fā)起HTTP請求(HTTP Request)=>得到HTTP響應(yīng)(HTTP Response)=>斷開連接

而平常我們通過瀏覽器瀏覽網(wǎng)頁這個(gè)過程,瀏覽器自動完成發(fā)送HTTP請求及對服務(wù)端應(yīng)答的數(shù)據(jù)進(jìn)行解析的工作,從而將網(wǎng)頁呈現(xiàn)給我們。

我們使用cURL要做的就是模仿瀏覽器的動作,因此要對HTTP請求的格式進(jìn)行進(jìn)一步的解析。

一、HTTP請求

在你向HTTP服務(wù)器請求一個(gè)資源(比如簡單的使用瀏覽器打開一個(gè)網(wǎng)頁),TCP三次握手建立連接后,HTTP請求發(fā)出。

HTTP請求信息由3部分組成: l 請求行(Request Line) l 請求頭(Request Header) l 請求正文(Message Body)

 1、HTTP請求行

典型的HTTP請求行格式為:

 HTTP命令 請求資源的URI HTTP版本號

HTTP請求行例子如下:

GET / HTTP/1.1\r\n

這個(gè)請求行的意思是:請求得到(GET)/路徑下的默認(rèn)主頁文件,使用HTTP協(xié)議1.1版本。

根據(jù)HTTP標(biāo)準(zhǔn),HTTP請求可以使用多種請求方法。例如:HTTP1.1支持7種請求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。而服務(wù)器也可以自定義請求命令供客戶端使用。具體請參考HTTP的RFC文檔。而我們最常用的是GET和POST命令:

1)GET命令

GET主要用于取得URL指定的資源信息,也可用來提交表單。GET提交的信息實(shí)際上是附加在url之后作為URL的一部分。

當(dāng)年盛行一時(shí)的SQL注入,最常見的檢測手段就是在GET提交的鏈接后加單引號來檢測是否存在注入漏洞。

如提交username和password兩個(gè)字段,正常的GET網(wǎng)址如下:

http://www.xxx.com/login.php?username=user&password=pass

網(wǎng)站后臺就會在_GET數(shù)組中取得username和password的值,從而組建SQL語句:

select count(*) from user_table where username=user and password=pass

如果返回的count值大于0即為用戶名密碼正確。

而添加單引號后:

http://www.xxx.com/login.php?username=user&password=pass'

組建的SQL語句為

select count(*) from user_table where username=user and password=pass'

這個(gè)SQL語句執(zhí)行出錯(cuò),網(wǎng)頁顯示錯(cuò)誤信息,黑客從而得知網(wǎng)頁有SQL注入漏洞。

因此使用GET提交表單是不安全的,只進(jìn)行了簡單的編碼無法加密,可以很容易的從網(wǎng)址猜出各字段的意思。而且受限于URL長度限制,GET提交表單能攜帶的數(shù)據(jù)也有限。

2)POST命令

POST主要用于提交表單,尤其是提交大批量的表單數(shù)據(jù)。

POST方法克服了GET方法的一些缺點(diǎn)。通過POST方法提交表單數(shù)據(jù)時(shí),數(shù)據(jù)不是作為URL請求的一部分而是作為標(biāo)準(zhǔn)數(shù)據(jù)傳送給Web服務(wù)器,這就克服了GET方法中的信息無法加密和數(shù)據(jù)量太小的缺點(diǎn)。

HTTP請求的下一段數(shù)據(jù)為HTTP請求頭。

2、HTTP請求頭

HTTP請求頭中主要包含關(guān)于請求本身或者客戶端的有用信息,比如瀏覽器的類型、瀏覽器語言、編碼、壓縮算法等信息。服務(wù)器上的動態(tài)腳本如PHP等可以利用請求頭信息生成動態(tài)的網(wǎng)頁內(nèi)容。

典型的HTTP請求頭例子如下:

Connection: keep-aliveCache-Control: max-age=0User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.168 Safari/535.19 QIHU 360EEAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Referer: http://www.adeploy.com/Accept-Encoding: gzip,deflate,sdchAccept-Language: zh-CN,zh;q=0.8Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3

\r\n表示換行。由此可以看到HTTP請求頭是由幾行“屬性:值”對組成的,例如屬性Accept的值為*/*\r\n ,表示客戶端可以接受任意數(shù)據(jù)類型。

而我們最常用的是User-Agent字段和Referer字段,分別用于指定客戶端類型和來源頁面。

最末行額外多出的一對\r\n表示一個(gè)空白行,此空白行表示HTTP請求頭結(jié)束,以下部分為請求正文。

3、HTTP請求正文

 HTTP請求正文經(jīng)常為空,除非需要向服務(wù)端提交信息,如在使用POST向網(wǎng)站提交表單的時(shí)候。

例如如下是一個(gè)完整的HTTP請求的例子:

GET / HTTP/1.1Host: www.adeploy.comConnection: keep-aliveCache-Control: max-age=0User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.168 Safari/535.19 QIHU 360EEAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Referer: http://www.adeploy.com/Accept-Encoding: gzip,deflate,sdchAccept-Language: zh-CN,zh;q=0.8Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
二、HTTP響應(yīng)

當(dāng)收到HTTP請求之后,HTTP服務(wù)器會進(jìn)行處理然后返回一個(gè)HTTP響應(yīng)給客戶端(典型的客戶端為瀏覽器)。HTTP響應(yīng)中包含幾乎與HTTP請求同樣類型的數(shù)據(jù)。

HTTP響應(yīng)信息也由3部分組成: l 響應(yīng)行(Response Status Line) l 響應(yīng)頭(Response Header) l 響應(yīng)正文(Message Body)

響應(yīng)行以服務(wù)端使用的HTTP協(xié)議版本號開始,后加響應(yīng)狀態(tài)碼,表示請求結(jié)果狀態(tài),例如:

HTTP/1.1 200 OK

狀態(tài)碼200表示請求成功。

緊接著的是響應(yīng)頭。響應(yīng)頭與請求頭十分相似,也是由幾行“屬性:值”對組成。其中包含關(guān)于服務(wù)器的有用信息、響應(yīng)數(shù)據(jù)等。典型響應(yīng)頭如下:

Content-Type: text/html; charset=utf-8Cache-Control: no-cacheExpires: Fri, 01 Jan 1990 00:00:00 GMTContent-Encoding: gzipVary: Accept-EncodingDate: Tue, 31 Jul 2012 07:20:31 GMTServer: Google FrontendContent-Length: 10387

如果請求成功,響應(yīng)正文中將包含請求的數(shù)據(jù),如圖片文件的二進(jìn)制數(shù)據(jù)、HTML文件等。一旦響應(yīng)正文傳輸完畢,服務(wù)端又沒有使用HTTP 1.1版本的Keep-Alive請求,HTTP連接將會斷開。

三、Cookie

Cookie是服務(wù)器為了辨別用戶身份、進(jìn)行session跟蹤用戶識別,而儲存在客戶端的數(shù)據(jù)。用以判斷在HTTP傳輸中的狀態(tài),從而彌補(bǔ)HTTP協(xié)議無狀態(tài)的缺陷。

比如我們登錄一個(gè)網(wǎng)站后,關(guān)閉網(wǎng)頁后重新打開網(wǎng)頁,服務(wù)端就可以通過cookie信息判斷我們曾經(jīng)登錄過,從而跳過重新登錄的過程,讓用戶感覺到親切、方便、人性化。

當(dāng)客戶端向服務(wù)端發(fā)起請求時(shí),瀏覽器會自動將cookie信息添加在HTTP請求頭中。例子如下:

Cookie: __utmc=90639562; __utma=90639562.1273157993.1343361841.1343361841.1343718828.2; __utmb=90639562.1.10.1343718828; __utmz=90639562.1343361841.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)

在我們使用cURL時(shí),每次訪問網(wǎng)頁都相當(dāng)于瀏覽器打開關(guān)閉一次,因此cookie會起到很大的作用。

本篇介紹后續(xù)會使用的HTTP協(xié)議知識,只做簡要概括,具體請參考RFC文檔。

來自
地址:
http://www.adeploy.com/2012/07/28/linux-curl-http-protocol.html

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
http協(xié)議原理
http簡述
深入理解HTTP協(xié)議之POST方法——ajax實(shí)例
HTTP請求和響應(yīng)過程
HTTP協(xié)議漫談
HTTP深入淺出
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服