一,、 1.無(wú)論是用webserverice,還是用rest做大型架構(gòu),,都離不開http協(xié)議的認(rèn)識(shí) webservice = http協(xié)議 + xml Rest = http協(xié)議 + json 各種API一般是HTTP + XML/json 來(lái)實(shí)現(xiàn)的,。 2. 協(xié)議: 按照一定規(guī)則向服務(wù)器要數(shù)據(jù)或者發(fā)送數(shù)據(jù),而服務(wù)器按照一定規(guī)則,,回應(yīng)數(shù)據(jù),。 3. HTTP協(xié)議的工作流程 當(dāng)打開一個(gè)頁(yè)面發(fā)生了什么? 1、原始狀態(tài)客戶端和服務(wù)器孩子間沒有關(guān)系 2. 3,、解析完然后斷開連接 http協(xié)議的請(qǐng)求,,接收參數(shù) Request Headers:請(qǐng)求頭信息 Response Headers:響應(yīng)頭信息 http請(qǐng)求信息和相應(yīng)的格式 請(qǐng)求分為:請(qǐng)求行 請(qǐng)求頭信息 請(qǐng)求主體信息(可以沒有) 頭信息結(jié)束后和主體信息之間空一行。 請(qǐng)求行分為3個(gè)部分:請(qǐng)求方法 請(qǐng)求路徑 請(qǐng)求所用協(xié)議 請(qǐng)求方法: GET POST PUT DELETE TRACE OPTIONS 這里的響應(yīng)行即所謂的主體信息,。 2. 請(qǐng)求所用的協(xié)議版本(1.0,0.9基本沒人用了) Host:localhost: 請(qǐng)求頭信息 注意:頭信息結(jié)束后,,有一個(gè)空行,因?yàn)轭^信息和主體信息(如果有),,需要這個(gè)空行做區(qū)分 即使沒有主體信息,,空行也不能少。 另:頭信息是非常豐富的,,豐富的頭信息也是一個(gè)學(xué)習(xí)的重點(diǎn),。 相應(yīng)行: 協(xié)議版本 狀態(tài)碼 狀態(tài)文字 相應(yīng)頭信息: 格式: key :value Content-length:主體的長(zhǎng)度 用telnet完成http協(xié)議的post請(qǐng)求 分析:用POST方法 $方法 $路徑 $協(xié)議/版本 請(qǐng)求行 主體內(nèi)容 POST /06/02.php HTTP/1.1 HOST:localhost Content-length:23 Content-type:application/x-www-form-urlencoded username = zhangshan &age=28 操作:打開telnet cmd 進(jìn)入dos系統(tǒng)里,telnet localhost 80 CTRL + "]" 回車 POST /09/02.php HTTP/1.1 Host:localhost Content-length:23 這里空一行 Username=mazhiqinag&age=23(主體信息) 注意: POST比GET多了主體信息,,頭信息要標(biāo)明主體的長(zhǎng)度,。但是服務(wù)器仍然沒有接受到信息,因?yàn)镻OST時(shí),,要告訴服務(wù)器:content-type:application/x-www-form-urlencoded 請(qǐng)求方法中的細(xì)節(jié): GET POST HEAD PUT TRACE DELETE OPTIONS 注意: 這些請(qǐng)求方法,,雖然http協(xié)議里規(guī)定,但是WEB SERVER 未必允許或支持這些方法,。 HEAD和GET基本一致,,只是不返回內(nèi)容,。 例如: 確認(rèn)一個(gè)內(nèi)容是否還存在,不需要返回其內(nèi)容,,這時(shí)候用head比較合適,。 下面用get方法請(qǐng)求:
返回了其里面的全部?jī)?nèi)容 下面用head請(qǐng)求 此時(shí)返回的信息只有一些頭信息。 下面用PUT請(qǐng)求方法: 此時(shí)你會(huì)發(fā)現(xiàn):405 method not allowed 不支持該方法,。 TRANCE:是你用代理上網(wǎng),,比如用代理訪問new.163.com ,想看看代理有沒有修改了你的http請(qǐng)求,可以用TRACE來(lái)測(cè)試一下,,163.com的服務(wù)器就會(huì)把最后的請(qǐng)求返回給你。 同樣的,,也不支持該方法,。 OPTIONS:是返回服務(wù)器可用的請(qǐng)求方法 使用自己的本機(jī)測(cè)試一下: 你會(huì)發(fā)現(xiàn)支持的方法:GET HEAD POST OPTIONS TRACE這些方法 狀態(tài)碼,狀態(tài)文字狀態(tài)碼:是用來(lái)反映服務(wù)器相應(yīng)情況的 最常用的有200 OK 404 NOT FOUND 狀態(tài)文字是用來(lái)描述狀態(tài)碼的,。 http響應(yīng)中的狀態(tài)碼: 1xx :信息 接收到請(qǐng)求,,繼續(xù)處理 2xx 成功 操作成功接收到,理解和接收,。 3xx 重定向 為了完成請(qǐng)求,,必須采取進(jìn)一步措施 4xx 客戶端錯(cuò)誤 請(qǐng)求的語(yǔ)法有錯(cuò)誤或不能滿足 5xx 服務(wù)器錯(cuò)誤 服務(wù)器內(nèi)部錯(cuò)誤 200 服務(wù)器成功返回網(wǎng)頁(yè) 301/2 永久/臨時(shí)重定向 304 not modified 未修改 307 重定向仍然保存原來(lái)的請(qǐng)求數(shù)據(jù) 404 請(qǐng)求的網(wǎng)頁(yè)不存在 503 服務(wù)器暫時(shí)不可用 504 服務(wù)器內(nèi)部錯(cuò)誤 eTag: Last-Modified:上次修改日期,兩者搭配使用 if-Modified-Since:時(shí)間點(diǎn) 如果到了這個(gè)時(shí)間點(diǎn)重新請(qǐng)求 if-None-Match:字符串 如果該字符串改變了,,重新請(qǐng)求將 服務(wù)器端并不知道客戶是否有緩存,,而是客戶端告訴服務(wù)器是否有該資源 對(duì)于一篇新聞,GET請(qǐng)求,,重定向無(wú)所謂,,還能看到原來(lái)的內(nèi)容就行,但是如果POST數(shù)據(jù),,比如05.php -> 06.php 此時(shí)數(shù)據(jù)要丟失,。 此時(shí)你會(huì)發(fā)現(xiàn)由05.php 重定向06.php ,請(qǐng)求方法依然是post,但是數(shù)據(jù)沒有丟失 |
|
來(lái)自: 小馬哥技術(shù)屋 > 《HTTP協(xié)議》