久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

HTTP 協(xié)議簡(jiǎn)介

 昵稱(chēng)26115076 2015-10-11

一、TCP/IP 協(xié)議介紹

  在介紹 HTTP 協(xié)議之前,,先簡(jiǎn)單說(shuō)一下TCP/IP協(xié)議的相關(guān)內(nèi)容,。TCP/IP協(xié)議是分層的,從底層至應(yīng)用層分別為:物理層,、鏈路層,、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層,,如下圖所示:

 

 

TCP/IP基礎(chǔ)--層次圖

 

  從應(yīng)用層至物理層,,數(shù)據(jù)是一層層封裝,封裝的方式一般都是在原有數(shù)據(jù)的前面加一個(gè)數(shù)據(jù)控制頭,,數(shù)據(jù)封裝格式如下:

 

TCP/IP基礎(chǔ)--數(shù)據(jù)封裝

 

  其中,,對(duì)于TCP傳輸協(xié)議,客戶(hù)端在于服務(wù)器建立連接前需要經(jīng)過(guò)TCP三層握手,,過(guò)程如下:

 

TCP/IP基礎(chǔ)--TCP三次握手

 

二,、HTTP協(xié)議

2.1 簡(jiǎn)介

  超文本傳輸協(xié)議(Hypertext Transfer Protocol,簡(jiǎn)稱(chēng)HTTP)是應(yīng)用層協(xié)議,,自 1990 年起,,HTTP 就已經(jīng)被應(yīng)用于 WWW 全球信息服務(wù)系統(tǒng)。
  HTTP 是一種請(qǐng)求/響應(yīng)式的協(xié)議,。一個(gè)客戶(hù)機(jī)與服務(wù)器建立連接后,,發(fā)送一個(gè)請(qǐng)求給服務(wù)器;服務(wù)器接到請(qǐng)求后,,給予相應(yīng)的響應(yīng)信息,。
  HTTP 的第一版本 HTTP/0.9是一種簡(jiǎn)單的用于網(wǎng)絡(luò)間原始數(shù)據(jù)傳輸?shù)膮f(xié)議;
  HTTP/1.0由 RFC 1945 定義 ,在原 HTTP/0.9 的基礎(chǔ)上,,有了進(jìn)一步的改進(jìn),,允許消息以類(lèi) MIME 信息格式存 在,包括請(qǐng)求/響應(yīng)范式中的已傳輸數(shù)據(jù)和修飾符等方面的信息,;
  HTTP/1.1(RFC2616) 的要求更加嚴(yán)格以確保服務(wù)的可靠性,,增強(qiáng)了在HTTP/1.0 沒(méi)有充分考慮到分層代理服務(wù)器、高速緩沖存儲(chǔ)器,、持久連接需求或虛擬主機(jī)等方面的效能,;
  安全增強(qiáng)版的 HTTP (即S-HTTP或HTTPS),則是HTTP協(xié)議與安全套接口層(SSL)的結(jié)合,,使HTTP的協(xié)議數(shù)據(jù)在傳輸過(guò)程中更加安全,。

 

2.2 協(xié)議結(jié)構(gòu)

  HTTP協(xié)議格式也比較簡(jiǎn)單,格式如下:

 

HTTP協(xié)議--協(xié)議結(jié)構(gòu)

 

2.3 HTTP 協(xié)議舉例

  下面是一個(gè)HTTP請(qǐng)求及響應(yīng)的例子:

 

2.4 請(qǐng)求頭格式

a) 通用頭(general-header):
Cache-Control:客戶(hù)端希望服務(wù)端如何緩存自己的請(qǐng)求數(shù)據(jù),,如"Cache-Control: no-cache",,"Cache-Control: max-age=0";
Connection:客戶(hù)端是否希望與服務(wù)端之間保持長(zhǎng)連接,,如"Connection: close", "Connection: keep-alive",;
Date:只有當(dāng)請(qǐng)求方法為POST或PUT方法時(shí)客戶(hù)端才可能會(huì)有些字段;
Pragma:包含了客戶(hù)端一些特殊請(qǐng)求信息,,如 "Pragma: no-cache" 客戶(hù)端希望代理或應(yīng)用服務(wù)器不應(yīng)緩存與該請(qǐng)求相關(guān)的結(jié)果數(shù)據(jù),;
Via:一般用在代理網(wǎng)關(guān)向應(yīng)用服務(wù)器發(fā)送的請(qǐng)求頭中,表明該來(lái)自客戶(hù)端的請(qǐng)求經(jīng)過(guò)了網(wǎng)關(guān)代理,,
     格式為:"Via: 請(qǐng)求協(xié)議版本  網(wǎng)關(guān)標(biāo)識(shí)   [其它信息] ",,
     如 :" Via: 1.1  webcache_250_199.hexun.com:80 (squid)"

 

b) 請(qǐng)求頭(request-header):
Accept: 表明客戶(hù)同端可接受的請(qǐng)求回應(yīng)的媒體類(lèi)型范圍列表。星號(hào)“*”用于按范圍將類(lèi)型分組,,用“*/*”指示可接受全部類(lèi)型,;用“type/*”指示可接受 type類(lèi)型的所有子類(lèi)型,如“ Accept: image/gif, image/jpeg, */*”,;
Accept-Charset:客戶(hù)端所能識(shí)別的字符集編碼格式,,格式:“Accept-Charset: 字符集1[:權(quán)重],字符集2[:權(quán)重]”,,如:“ Accept-Charset: iso-8859-5, unicode-1-1;q=0.8”,;
Accept-Language:客戶(hù)端所能識(shí)別的語(yǔ)言,格式:“Accept-Language: 語(yǔ)言1[:權(quán)重],,語(yǔ)言2[:權(quán)重]”,,如:” Accept-Language: zh, en;q=0.7”;
Host:客戶(hù)請(qǐng)求的主機(jī)域名或主機(jī)IP,,格式:“Host: 域名或IP[:端口號(hào)]”,,如:“Host: www.hexun.com:80“,,請(qǐng)求行中若有HTTP/1.1則必須有該請(qǐng)求頭;
User-Agent:表明用戶(hù)所使用的瀏覽器標(biāo)識(shí),,主要用于統(tǒng)計(jì)的目的,;
Referer:指明該請(qǐng)求是從哪個(gè)關(guān)聯(lián)連接而來(lái);

Accept-Encoding:客戶(hù)端所能識(shí)別的編碼壓縮格式,,如:“Accept-Encoding: gzip, deflate”,;
If- Modified-Since:該字段與客戶(hù)端緩存相關(guān),客戶(hù)端所訪(fǎng)問(wèn)的URL自該指定日期以來(lái)在服務(wù)端是否被修改過(guò),,如果修改過(guò)則服務(wù)端返回新的修改后 的信息,,如果未修改過(guò)則服務(wù)器返回304表明此請(qǐng)求所指URL未曾修改過(guò),如:“If-Modified-Since: Fri, 2 Sep 2006 19:37:36 GMT”,;
If-None-Match:該字段與客戶(hù)端緩存相關(guān),,客戶(hù)端發(fā)送URL請(qǐng)求的同時(shí)發(fā)送該字段及標(biāo)識(shí),,如 果服務(wù)端的標(biāo)識(shí)與客戶(hù)端的標(biāo)識(shí)一致,,則返回304表明此URL未修改過(guò),如果不一致則服務(wù)端返回完整的數(shù)據(jù)信息,,如:“If-None-Match: 0f0a893aad8c61:253, 0f0a893aad8c61:252, 0f0a893aad8c61:251”,;
Cookie:為擴(kuò)展字段,存儲(chǔ)于客戶(hù)端,,向同一域名的服務(wù)端發(fā)送屬于該域的cookie,,如:“Cookie: MailUserName=whouse”;

 

c) 實(shí)體頭(entity-header): (此類(lèi)頭存在時(shí)要求有數(shù)據(jù)體)
Content-Encoding:客戶(hù)端所能識(shí)別的編碼壓縮格式,,如:“Content-Encoding: gzip, deflate”,;
Content-Length:客戶(hù)端以POST方法上傳數(shù)據(jù)時(shí)數(shù)據(jù)體部分的內(nèi)容長(zhǎng)度,如:“ Content-Length: 24”,;
Content- Type:客戶(hù)端發(fā)送的數(shù)據(jù)體的內(nèi)容類(lèi)型,,如:“Content-Type: application/x-www-form-urlencoded”為以普通的POST方法發(fā)送的數(shù)據(jù);“Content-Type: multipart/form-data; boundary=---------------------------5169208281820”,,則表明數(shù)據(jù)體由多部分組成,,分隔符為 “-----------------------------5169208281820”;

 

2.5)響應(yīng)格式

a) 通用頭(general-header):
Cache- Control:服務(wù)端要求中間代理及客戶(hù)端如何緩存自己響應(yīng)的數(shù)據(jù),,如“Cache-Control: no-cache”,,如:“Cache-Control: private” 不希望被緩存,“Cache-Control: public” 可以被緩存,;
Connection:服務(wù)端是否希望與客戶(hù)端之間保持長(zhǎng)連接,,如“Connection: close”, “Connection: keep-alive”;
Date:只有當(dāng)請(qǐng)求方法為POST或PUT方法時(shí)客戶(hù)端才可能會(huì)有些字段,;
Pragma:包含了服務(wù)端一些特殊響應(yīng)信息,,如 “Pragma: no-cache” 服務(wù)端希望代理或客戶(hù)端不應(yīng)緩存結(jié)果數(shù)據(jù),;
Transfer-Encoding:服務(wù)端向客戶(hù)端傳輸數(shù)據(jù)所采用的傳輸模式(僅在HTTP1.1中出現(xiàn)),如:“Transfer-Encoding: chunked”,,注:該字段的優(yōu)先級(jí)要高于“Content-Length” 字段的優(yōu)先級(jí),;

 

b)響應(yīng)頭(response-header):
Accept-Ranges:表明服務(wù)端接收的數(shù)據(jù)單位,如:“Accept-Ranges: bytes”, ,;
Location:服務(wù)端向客戶(hù)端返回此信息以使客戶(hù)端進(jìn)行重定向,,如:“Location: http://www.hexun.com”;
Server:服務(wù)端返回的用于標(biāo)識(shí)自己的一些信息,,如:“ Server: Microsoft-IIS/6.0”,;
ETag:服務(wù)端返回的響應(yīng)數(shù)據(jù)的標(biāo)識(shí)字段,客戶(hù)端可根據(jù)此字段的值向服務(wù)器發(fā)送某URL是否更新的信息,;

 

c)實(shí)體頭(entity-header): (此類(lèi)頭存在時(shí)要求有數(shù)據(jù)體)
Content-Encoding:服務(wù)端所響應(yīng)數(shù)據(jù)的編碼格式,,如:“Content-Encoding: gzip”;
Content-Length:服務(wù)端所返回?cái)?shù)據(jù)的數(shù)據(jù)體部分的內(nèi)容長(zhǎng)度,,如:“ Content-Length: 24”,;
Content-Type:服務(wù)端所返回的數(shù)據(jù)體的內(nèi)容類(lèi)型,如:“Content-Type: text/html; charset=gb2312” ,;
Set-Cookie:服務(wù)端返回給客戶(hù)端的cookie數(shù)據(jù),,如:“ Set-Cookie: ASP.NET_SessionId=icnh2ku2dqlmkciyobgvzl55; path=/”

 

2.6)服務(wù)器返回狀態(tài)碼

1xx:表明服務(wù)端接收了客戶(hù)端請(qǐng)求,客戶(hù)端繼續(xù)發(fā)送請(qǐng)求,;
2xx:客戶(hù)端發(fā)送的請(qǐng)求被服務(wù)端成功接收并成功進(jìn)行了處理,;
3xx:服務(wù)端給客戶(hù)端返回用于重定向的信息;
4xx:客戶(hù)端的請(qǐng)求有非法內(nèi)容,;
5xx:服務(wù)端未能正常處理客戶(hù)端的請(qǐng)求而出現(xiàn)意外錯(cuò)誤,。

 

舉例:

“100”  ; 服務(wù)端希望客戶(hù)端繼續(xù);
“200”  ; 服務(wù)端成功接收并處理了客戶(hù)端的請(qǐng)求,;
“301”  ; 客戶(hù)端所請(qǐng)求的URL已經(jīng)移走,,需要客戶(hù)端重定向到其它的URL;
“304”  ; 客戶(hù)端所請(qǐng)求的URL未發(fā)生變化,;
“400”  ; 客戶(hù)端請(qǐng)求錯(cuò)誤,;
“403”  ; 客戶(hù)端請(qǐng)求被服務(wù)端所禁止;
“404”  ; 客戶(hù)端所請(qǐng)求的URL在服務(wù)端不存在,;
“500”  ; 服務(wù)端在處理客戶(hù)端請(qǐng)求時(shí)出現(xiàn)異常,;
“501”  ; 服務(wù)端未實(shí)現(xiàn)客戶(hù)端請(qǐng)求的方法或內(nèi)容;
“502”  ; 此為中間代理返回給客戶(hù)端的出錯(cuò)信息,,表明服務(wù)端返回給代理時(shí)出錯(cuò),;
“503”  ; 服務(wù)端由于負(fù)載過(guò)高或其它錯(cuò)誤而無(wú)法正常響應(yīng)客戶(hù)端請(qǐng)求;
“504”  ; 此為中間代理返回給客戶(hù)端的出錯(cuò)信息,,表明代理連接服務(wù)端出現(xiàn)超時(shí),。

 

2.7)chunked 傳輸

   編碼使用若干個(gè)Chunk組成,,由一個(gè)標(biāo)明長(zhǎng)度為0的chunk結(jié)束,每個(gè)Chunk有兩部分組成,,第一部分是該Chunk的長(zhǎng)度(以十六進(jìn)制表示)和 長(zhǎng)度單位(一般不寫(xiě)),,第二部分就是指定長(zhǎng)度的內(nèi)容,每個(gè)部分用CRLF隔開(kāi),。在最后一個(gè)長(zhǎng)度為0的Chunk中的內(nèi)容是稱(chēng)為footer的內(nèi)容,,是一些 沒(méi)有寫(xiě)的頭部?jī)?nèi)容。另外,,在HTTP頭里必須含有:” Transfer-Encoding: chunked” 通用頭字段,。格式如下:

chunked 傳輸

 

2.8)HTTP 請(qǐng)求方法

GET、POST,、HEAD,、CONNECT、PUT,、DELETE,、TRACE、OPTIONS

 

2.9)HTTP 斷點(diǎn)續(xù)傳

a)HTTP 請(qǐng)求頭

格式:Range: bytes={range_from}-{range_to}

該頭表示從后端 HTTP 服務(wù)器取數(shù)據(jù),,開(kāi)始偏移位置為 {range_from},,結(jié)束偏移位置為 {range_to},,其中偏移位置下標(biāo)從 0 開(kāi)始,;如果省略了 {range_to} 則表示從指定的開(kāi)始位置 {range_from} 至數(shù)據(jù)結(jié)尾。

如:Range: bytes=1024-2048  其表示讀取從偏移位置 1024 至 2028 的數(shù)據(jù),,而 Range: bytes=1024- 則表示讀取從偏移位置 1024 至數(shù)據(jù)結(jié)尾的數(shù)據(jù),。

b)HTTP 響應(yīng)頭

格式:Content-Range: bytes {range_from}-{range_to}/{total_length}

其中 {range_from} 和 {range_to} 分別代表當(dāng)前從服務(wù)端返回的數(shù)據(jù)的起始偏移位置(下標(biāo)從 0 開(kāi)始),這是一個(gè)雙向閉區(qū)間范圍,,而 total_length 則指定了整個(gè)數(shù)據(jù)的總長(zhǎng)度,,此時(shí) HTTP 響應(yīng)頭中的 Content-Length 如果存在,則其值表示當(dāng)前返回的數(shù)據(jù)塊(由 {range_from} 和 {range_to} 指定的數(shù)據(jù)區(qū)間)的長(zhǎng)度,。該長(zhǎng)度內(nèi)的數(shù)據(jù)包括 {range_from} 和 {range_to} 兩個(gè)位置的數(shù)據(jù),。

 

3.0)舉例

a)GET請(qǐng)求

Html代碼  收藏代碼
  1. GET http://photo./inc/global.js HTTP/1.1  
  2. Host: photo.  
  3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0  
  4. Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5  
  5. Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3  
  6. Accept-Encoding: gzip,deflate  
  7. Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7  
  8. Keep-Alive: 300  
  9. Proxy-Connection: keep-alive  
  10. Cookie: ASP.NET_SessionId=ey5drq45lsomio55hoydzc45  
  11. Cache-Control: max-age=0  

 

b)POST請(qǐng)求

Html代碼  收藏代碼
  1. POST / HTTP/1.1  
  2. Accept: image/gif, image/x-xbitmap, image/jpeg, application/vnd.ms-powerpoint, application/msword, */*  
  3. Accept-Language: zh-cn  
  4. Content-Type: application/x-www-form-urlencoded  
  5. Accept-Encoding: gzip, deflate  
  6. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)  
  7. Host: www.  
  8. Content-Length: 24  
  9. Connection: Keep-Alive  
  10. Cache-Control: no-cache  
  11.   
  12. name=value&submitsubmit=submit  

 

c)通過(guò)HTTP代理發(fā)送GET請(qǐng)求

Html代碼  收藏代碼
  1. GET http://mail./ HTTP/1.1  
  2. Host: mail.  
  3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0  
  4. Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5  
  5. Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3  
  6. Accept-Encoding: gzip,deflate  
  7. Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7  
  8. Keep-Alive: 300  
  9. Proxy-Connection: keep-alive  

 

d)POST方式上傳文件

Html代碼  收藏代碼
  1. POST http://www.t/upload_attach?uidl=%3C HTTP/1.1  
  2. Host: www.  
  3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0  
  4. Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5  
  5. Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3  
  6. Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7  
  7. Content-Type: multipart/form-data; boundary=---------------------------5169208281820  
  8. Content-Length: 449  
  9.   
  10. -----------------------------5169208281820  
  11. Content-Disposition: form-data; name="file_1"; filename=""  
  12. Content-Type: application/octet-stream  
  13.   
  14.   
  15. -----------------------------5169208281820  
  16. Content-Disposition: form-data; name="file_0"; filename="test.txt"  
  17. Content-Type: text/plain  
  18.   
  19. hello world!  
  20.   
  21. -----------------------------5169208281820  
  22. Content-Disposition: form-data; name="oper"  
  23.   
  24. upload  
  25. -----------------------------5169208281820--  

 

e)CONNECT舉例

Html代碼  收藏代碼
  1. CONNECT mail.:80 HTTP/1.1  
  2. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0  
  3. Proxy-Connection: keep-alive  
  4. Host: mail.:80  

 

3.1)在終端以 telnet 方式測(cè)試

a)打開(kāi)回顯功能(針對(duì)windows)
  Windows 2000:進(jìn)入DOS模式->輸入 telnet->set LOCAL_ECHO->退出:quit->telnet ip 80
  Windows xp:進(jìn)入DOS模式->輸入telnet->set local echo->open ip 80
b) 按HTTP協(xié)議格式輸入GET請(qǐng)求、HEAD請(qǐng)求,、POST請(qǐng)求,。

 

個(gè)人微博:http://weibo.com/zsxxsz

 

參考:

        文章 《用C++實(shí)現(xiàn)類(lèi)似于JAVA HttpServlet 的編程接口》 給出了 acl_cpp 庫(kù)中提供的 WEB 編程示例。

        文章 《使用 acl_cpp 的 HttpServlet 類(lèi)及 google 的 ctemplate 庫(kù)編寫(xiě) WEB 應(yīng)用》 給出了使用 acl _cpp 的 WEB 庫(kù)及 google 的頁(yè)面模板庫(kù)的例子,。

        文章 《web 編程中實(shí)現(xiàn)文件上傳的服務(wù)端實(shí)例》 給出了使用 acl_cpp 的 WEB 庫(kù)實(shí)現(xiàn)處理 HTTP 文件上傳的例子,。

        文章 《使用 acl_cpp 的 HttpServlet 類(lèi)及服務(wù)器框架編寫(xiě)WEB服務(wù)器程序》  給出了使用 acl 服務(wù)器框架的 WEB 應(yīng)用實(shí)例 。

        文章 《使用 acl 庫(kù)開(kāi)發(fā)一個(gè) HTTP 下載客戶(hù)端》 給出了利用 acl 庫(kù)寫(xiě)的 HTTP 下載客戶(hù)端,。

        文章 《使用 acl 較為底層的 HTTP 協(xié)議庫(kù)寫(xiě) HTTP 下載客戶(hù)端舉例》 給出另一種 HTTP 客戶(hù)端下載的例子,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多