超文本傳輸協(xié)議 (http)
http協(xié)議允許服務(wù)器和客戶機(jī)通過internet接收和發(fā)送數(shù)據(jù)。它是個(gè)請(qǐng)求和回應(yīng)協(xié)議----客戶機(jī)發(fā)送請(qǐng)求,服務(wù)器對(duì)請(qǐng)求給出回應(yīng)。http 使用可靠的tcp 連接,默認(rèn)tcp端口是80。http的第一版是http/0.9,隨后被 http/1.0所取代。當(dāng)前最新的版本是http/1.1,這個(gè)在rpc2616規(guī)范文檔中給出了定義。
這一章節(jié)簡(jiǎn)單講敘了http 1.1, 對(duì)于你理解web服務(wù)器應(yīng)用程序發(fā)送的消息還是足夠的。如果你很感興趣,可以參考rfc 2616文檔。
使用http,客戶端通過建立一個(gè)連接和發(fā)送一個(gè)http請(qǐng)求來初始化事務(wù)會(huì)話,服務(wù)器聯(lián)系客戶端或者回應(yīng)一個(gè)callback連接給客戶端。 它們都可以中斷連接。比如,在使用web瀏覽器時(shí),你可以點(diǎn)擊瀏覽器上的stop按鈕來停止文件下載進(jìn)程,就有效的關(guān)閉了和這個(gè)web服務(wù)器的http連接。
http 請(qǐng)求(requests)
一個(gè)http request包含三個(gè)部分:
  方法,url,協(xié)議/版本(method-uri-protocol/version) 
  請(qǐng)求包頭request headers 
  實(shí)體包(entity body) 
  下面給出一個(gè)http請(qǐng)求的范例:
  post /servlet/default.jsp http/1.1
  accept: text/plain; text/html 
  accept-language: en-gb 
  connection: keep-alive 
  host: localhost 
  referer: http://localhost/ch8/senddetails.htm 
  user-agent: mozilla/4.0 (compatible; msie 4.01; windows 98) 
  content-length: 33 
  content-type: application/x-www-form-urlencoded 
  accept-encoding: gzip, deflate 
lastname=franks&firstname=michael
請(qǐng)求的第一行就是method-uri-protocol/version。
post /servlet/default.jsp http/1.1
請(qǐng)求的是post方法,后面的 /servlet/default.jsp 表示一個(gè)url地址,http/1.1表示協(xié)議的版本。
http標(biāo)準(zhǔn)規(guī)范定義了一些請(qǐng)求方法,用來給每個(gè)http請(qǐng)求所使用。http 1.1支持7中請(qǐng)求方法: get, post, head, options, put, delete, 和 trace。 get和post 在internet的應(yīng)用程序中是使用最普遍的兩個(gè)方法。
uri完整的指明了一個(gè)internet資源。一個(gè)uri通常是相對(duì)于服務(wù)器的根目錄被解釋的。 因此,它總是使用符號(hào)(/)開頭。一個(gè)url實(shí)際是一個(gè)uri類型。協(xié)議版本表示當(dāng)前正在使用的http協(xié)議的版本。
請(qǐng)求包頭(request header)包含了一些有用的客戶機(jī)環(huán)境的信息和請(qǐng)求的實(shí)體(entity body)信息。比如,它可以包含瀏覽器使用的語(yǔ)言和實(shí)體的長(zhǎng)度等等。每個(gè)請(qǐng)求包頭都被crlf(回車換行)序列所分離。
在先前的http請(qǐng)求中,實(shí)體是下面簡(jiǎn)單的一行:
lastname=franks&firstname=michael
在一個(gè)典型的http請(qǐng)求中,這個(gè)實(shí)體能夠很容易地變得更長(zhǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選