(轉(zhuǎn))讀HTTP協(xié)議(RFC-2616)總結(jié)

          讀HTTP協(xié)議(RFC-2616)總結(jié)


          http://ayufox.javaeye.com/blog/391812

          關(guān)鍵字: http rest

          1.資源(Resource)
                什么是資源,首先我們看《架構(gòu)風(fēng)格與基于網(wǎng)絡(luò)的軟件架構(gòu)設(shè)計(jì)》的作者:Roy Thomas Fielding對(duì)資源的一個(gè)說(shuō)明

          Roy Thomas Fielding 寫道
          REST對(duì)于信息的核心抽象是資源。任何能夠被命名的信息都能夠作為一個(gè)資源:一份文檔或一張圖片、一個(gè)暫時(shí)性的服務(wù)(例如,“洛杉磯今日的天氣”)、一個(gè)其他資源的集合、一個(gè)非虛擬的對(duì)象(例如,人)等等。換句話說(shuō),任何可能作為一個(gè)創(chuàng)作者的超文本引用的目標(biāo)的概念都必須符合資源的定義。一個(gè)資源是到一組實(shí)體的概念上的映射,而不是在任何特定時(shí)刻與該映射相關(guān)聯(lián)的實(shí)體本身。
          更精確地說(shuō),資源R是一個(gè)隨時(shí)間變化的成員函數(shù)MR(t),該函數(shù)將時(shí)間t映射到等價(jià)的一個(gè)實(shí)體或值的集合,集合中的值可能是資源的表現(xiàn)和/或資源的標(biāo)識(shí)符。一個(gè)資源可以映射到空集,這允許在一個(gè)概念的任何實(shí)現(xiàn)存在之前引用這個(gè)概念——這一觀念對(duì)于Web之前的大多數(shù)超文本系統(tǒng)來(lái)說(shuō)比較陌生 [61]。一些資源在它們被創(chuàng)建后的任何時(shí)刻來(lái)檢查,它們都對(duì)應(yīng)著相同的值的集合,從這個(gè)意義上說(shuō)它們是靜態(tài)的。其他的資源所對(duì)應(yīng)的值則會(huì)隨時(shí)間而頻繁地變化。對(duì)于一個(gè)資源來(lái)說(shuō),唯一必須是靜態(tài)的是映射的語(yǔ)義,因?yàn)檎Z(yǔ)義才是區(qū)別資源的關(guān)鍵。

                 簡(jiǎn)而言之,資源是一個(gè)抽象的東西,而在具體資源訪問(wèn)時(shí),會(huì)根據(jù)內(nèi)容協(xié)商的結(jié)果表示成一個(gè)具體表述(Representations)。每個(gè)資源由統(tǒng)一的資源標(biāo)識(shí)符(URI)來(lái)描述,類似于資源的ID,或者說(shuō)資源的地址。
          2.表述(Representations)
                表述是資源的具體表現(xiàn)形式,譬如,今天深圳的天氣(資源),可以使用一副天氣jpg圖來(lái)描述,也可以XML數(shù)據(jù)來(lái)描述,也可以使用HTML的頁(yè)面來(lái)描述,一種資源可以有多種表述,也就是說(shuō),通過(guò)同一個(gè)URI地址可以獲取到多種表現(xiàn)形式,而具體怎么表現(xiàn),則取決于Web客戶端與Web服務(wù)端內(nèi)容協(xié)商的一個(gè)結(jié)果。
          3.內(nèi)容協(xié)商
                客戶端和服務(wù)端通過(guò)內(nèi)容協(xié)商來(lái)協(xié)商請(qǐng)求內(nèi)容和響應(yīng)內(nèi)容的格式,主要協(xié)商的內(nèi)容包括:
                請(qǐng)求協(xié)商:
                1)字符集(Accept-Charset):客戶端通過(guò)發(fā)送該協(xié)商建議服務(wù)端使用該字符集來(lái)發(fā)送響應(yīng)結(jié)果,譬如
          Accept-Charset=gb2312,utf-8;q=0.7,*;q=0.7,客戶端建議服務(wù)端優(yōu)先使用gb2312或者utf-8來(lái)發(fā)送響應(yīng)結(jié)果
                2)請(qǐng)求編碼(Accept-Encoding):客戶端告訴服務(wù)端客戶端所支持的編碼格式,譬如Accept-Encoding   =gzip,deflate表明客戶端支持gzip壓縮或者普通響應(yīng)的結(jié)果
                3)語(yǔ)言(Accept-Language):客戶端通過(guò)發(fā)送該協(xié)商告訴服務(wù)端客戶端所使用的語(yǔ)言,譬如Accept-Language=zh-cn,zh;q=0.5表明客戶端偏號(hào)的語(yǔ)言是中文,譬如對(duì)于”今天深圳的天氣“這個(gè)資源來(lái)說(shuō),服務(wù)端可以通過(guò)該選項(xiàng)決定使用什么語(yǔ)言來(lái)表述資源
                4)表述偏好(Accept):客戶端通過(guò)該選項(xiàng)告訴服務(wù)端其表述的偏號(hào),譬如一個(gè)請(qǐng)求”今天深圳的天氣“的Ajax程序,可以通過(guò)設(shè)置表述偏好為Accept=application/json來(lái)告訴服務(wù)端,希望得到Json描述的結(jié)果,而一個(gè)瀏覽器則可以通過(guò)傳輸表述偏好為Accept=text/html來(lái)告訴服務(wù)端,希望得到Html描述的結(jié)果
                響應(yīng)協(xié)商:
                1)表述/表述字符集(Content-Type):服務(wù)端通過(guò)該協(xié)商告訴客戶端表述的格式和字符集的情況,譬如Content-Type=text/html; charset=utf-8表示響應(yīng)內(nèi)容格式為Html,字符集為utf-8
                 2)表述編碼(Accept-Encoding):服務(wù)端通過(guò)該協(xié)商告訴客戶端表述的編碼,譬如Content-Encoding=gzip服務(wù)端告訴客戶端內(nèi)容使用gzip壓縮
          4.方法
               方法定義了對(duì)資源的操作,主要的方法包括GET、POST、UPDATE、DELETE等等,它們分別代表了對(duì)資源的讀、建、改、刪的操作
          5.緩存
                HTTP協(xié)議支持在Web的各個(gè)節(jié)點(diǎn)對(duì)資源的表述進(jìn)行緩存,譬如在瀏覽器客戶端、代理服務(wù)器、反向代理服務(wù)器、目標(biāo)服務(wù)器等上對(duì)表述進(jìn)行緩存(注意,此處的緩存不僅僅是指在目標(biāo)服務(wù)器上進(jìn)行的業(yè)務(wù)級(jí)別的緩存)
                1)客戶端請(qǐng)求
                如果客戶端緩存了某些表述,則在進(jìn)行讀請(qǐng)求(GET)時(shí),攜帶請(qǐng)求條件(所謂的條件GET,使用Cache-Control指令),服務(wù)端接收到客戶端的請(qǐng)求條件,比較確認(rèn)客戶端的表述是否過(guò)時(shí),如果沒(méi)有,則返回304響應(yīng),否則則把最新的表述響應(yīng)給客戶端
                2)服務(wù)端響應(yīng)
                服務(wù)端對(duì)一些需要緩存的表述,則響應(yīng)中攜帶緩存指令,告訴請(qǐng)求客戶端如何對(duì)表述進(jìn)行緩存
                3)方法對(duì)緩存的影響
                當(dāng)對(duì)一個(gè)資源進(jìn)行UPDATE或DELETE時(shí),請(qǐng)求途經(jīng)的所有服務(wù)器(如代理服務(wù)器、反向代理服務(wù)器、目標(biāo)服務(wù)器)會(huì)自動(dòng)將該資源對(duì)應(yīng)的所有表述 緩存失效。
          6.狀態(tài)碼
                狀態(tài)碼描述了資源請(qǐng)求的結(jié)果,主要狀態(tài)碼包括:
                1)1XX:信息類
                2)2XX:成功類
                   典型的成功響應(yīng)包括:
                   200 OK,表示請(qǐng)求正常處理
                   201 Created,表示POST請(qǐng)求已經(jīng)接受,資源已創(chuàng)建,對(duì)于此響應(yīng),一般響應(yīng)會(huì)攜帶新建資源的Reference給請(qǐng)求客戶端
                   202 Accepted,表示POST/UDATE請(qǐng)求已經(jīng)接受,但不一定處理,譬如對(duì)于POST/UPDATE請(qǐng)求為后臺(tái)新建線程處理,可以使用該響應(yīng)碼
                3)3XX: 重定向類
                   典型的重定向響應(yīng)包括:
                   300 Multiple Choice:表明請(qǐng)求的資源有多種表述
                   301 Moved Permenently:表明所請(qǐng)求的資源已轉(zhuǎn)移到其他位置,建議到新的位置上去請(qǐng)求資源
                   304 Not Modify:主要是針對(duì)攜帶條件的GET請(qǐng)求,服務(wù)端向客戶端表明所請(qǐng)求的資源沒(méi)有發(fā)生變化,可以繼續(xù)使用客戶端已緩存的數(shù)據(jù)
                4)4XX: 客戶端錯(cuò)誤類
                   典型的客戶端錯(cuò)誤響應(yīng)包括:
                   400 Bad Request:表明客戶端的請(qǐng)求格式服務(wù)端無(wú)法識(shí)別
                   403 Forbiden:客戶端要訪問(wèn)的資源權(quán)限受限,不允許訪問(wèn)
                   404 Not found:客戶端要訪問(wèn)的資源不存在
                   405 Method Not Allowed:客戶端請(qǐng)求的方法不允許,譬如有可能一個(gè)資源不允許刪除,則不允許進(jìn)行DELETE請(qǐng)求
                   408 Request Timeout:請(qǐng)求超時(shí)
                5)5XX: 服務(wù)端錯(cuò)誤類
                   典型的服務(wù)端響應(yīng)包括:
                   500 Internal Server Error:服務(wù)器內(nèi)部錯(cuò)誤,無(wú)法響應(yīng)
                   503 Service Unavailable:服務(wù)器無(wú)法處理當(dāng)前請(qǐng)求
                   504 Gateway Timeout:網(wǎng)關(guān)超時(shí)



          posted on 2010-05-18 21:31 liujg 閱讀(216) 評(píng)論(0)  編輯  收藏 所屬分類: Java基礎(chǔ)

          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊(cè)

          收藏夾

          boddiy

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 措美县| 彭水| 崇文区| 彭阳县| 吉水县| 红安县| 平南县| 南木林县| 怀安县| 子长县| 安化县| 偏关县| 晋城| 西林县| 涞源县| 大余县| 博客| 邵东县| 门头沟区| 眉山市| 乌鲁木齐县| 青海省| 伊通| 宿迁市| 邵阳市| 贞丰县| 靖边县| 柞水县| 旬阳县| 庄浪县| 丁青县| 松潘县| 陇南市| 陆良县| 鄢陵县| 将乐县| 清徐县| 迭部县| 芦溪县| 东城区| 博白县|