Linux企業級專案實踐之網路爬蟲(30)——通過查閱RFC文件擴充更加複雜的功能

尹成發表於2014-09-04


HTTP是一種很簡單的請求、響應式協議,客戶端傳送一個請求、伺服器返回一個響應。HTTP 1.1 版本規範由 RFC2616 定義。瞭解了 HTTP請求、響應訊息在TCP資料流中的格式,很容易使用純 socket 模擬HTTP客戶端、HTTP伺服器傳送接收資料。

 

 

RFC文件全是ASCII碼,txt格式,但有其標準格式,使用者可通過官方網站查閱(http://www.rfc-editor.org/),也可下載txt版本並使用閱讀器(RFCReader、UE或寫字板都可以,記事本開啟時格式不規範,有網友還把很多RFC作了翻譯,

 

RFC是一系列以編號排定的檔案。檔案收集了有關因特網相關資訊,以及UNIX和因特網社群的軟體檔案。目前RFC檔案是由Internet Society(ISOC)所贊助發行。

基本的因特網通訊協定都有在RFC檔案內詳細說明。RFC檔案還在標準內額外加入了許多的論題,例如對於因特網新開發的協定及發展中所有的記錄。因此幾乎所有的因特網標準都收錄在RFC檔案之中。

 

RFC是Request for Comments的縮寫,是計算機網路工程領域最常用的一個詞,是由IETF(Internet Engineering Task Force,因特網工程任務組)發表的用於描述Internet或Internet連線系統方面的相關方法、行為、研究成果或其它創新成果的一種備忘錄。工程師和電腦科學家們可通過Internet Society以RFC的形式發表自己的看法,作為同行評審或者只是為了傳達新概念、資訊或(偶爾)工程幽默。IETF會接受一些以RFC形式發表的建議作為Internet標準。最初起源於1969年(1969年4月7日,UCLA的Steve Crocker公開發表了RFC 1),現已成為IETF和IAB(Internet Architecture Board)及其它一些主要的公共網路研究社群的正式出版物發行途徑,Jon Postel一直是RFC文件的編輯,而Bob Braden和Joyce Reynolds是主要領導和工作人員。目前為止,RFC文件已釋出了6520篇,由於它不刪除舊的文件,如果新發布的文件與舊文件是關於同一技術時,則會標註清楚由新的文件取代舊文件。可以說,在計算機網路特別是Internet領域,RFC文件具有相當的參考價值。

 

 

RFC檔案只有新增,不會有取消或中途停止發行的情形。但是對於同一主題而言,新的RFC檔案可以宣告取代舊的RFC檔案。RFC檔案是純 ASCII文字檔格式,可由電腦程式自動轉檔成其他檔案格式。RFC檔案有封面、目錄及頁首頁尾和頁碼。RFC的章節是數字標示,但數字的小數點後不補零,例如4.9的順序就在4.10前面,但9的前面並不補零。RFC1000這份檔案就是RFC的指南。

 

如何閱讀RFC文件

 

一是需要確定它是最新的文件,二是需要注意RFC文件的類別;

所有的RFC文件都要經歷評論和反饋過程,並且在這一段時間內它們會被劃分為不同的類別;

RFC文件一旦被提交,IETF和IAB組織將審查RFC文件,通過後可以成為一項標準;

RFC文件按照它發展與成熟的過程可以分為標準、草案標準、提案標準、實驗性的、資訊性或歷史性的;

RFC文件又可以分為被要求、被推薦、被選擇、受限制使用或不被推薦;

 

 

 

HTTP協議(RFC2616)目錄(Table ofContents)

1.  介紹(Introduction) 6

1.1  目的(Purpose) 6

1.2  術語(Terminology) 6

1.3  概述(OverallOperation) 8

1.4 HTTP and MIME 9

2.  標誌轉換及通用語法(NotationalConventions and Generic Grammar) 9

2.1  補充反饋方式(AugmentedBNF) 9

2.2  基本規則(BasicRules) 10

3.  協議引數(ProtocolParameters) 12

3.1 HTTP版本(HTTP Version) 12

3.2  統一資源標識(UniformResource Identifiers) 13

3.2.1 一般語法(General Syntax) 13

3.2.2 http URL 14

3.3 Date/Time 格式(Date/Time Formats) 15

3.4  字符集(CharacterSets) 16

3.5  內容譯碼(ContentCodings) 16

3.6  介質型別(MediaTypes) 17

3.6.1標準及文字預設(Canonicalizationand Text Defaults) 18

3.6.2 多部分型別(Multipart Types) 18

3.7  產品標識(ProductTokens) 19

4. HTTP 訊息(HTTP Message) 19

4.1  訊息型別(MessageTypes) 19

4.2  訊息標題(MessageHeaders) 20

4.3  普通標題域(GeneralHeader Fields) 20

5. 請求(Request) 21

5.1  請求佇列(Request-Line) 21

5.1.1 方法(Method) 22

5.1.2 請求URI(Request-URI) 22

5.2  請求標題域(RequestHeader Fields) 23

6.  迴應(Response) 23

6.1  狀態行(Status-Line) 24

6.1.1 狀態程式碼和原因分析(Status Codeand Reason Phrase) 24

6.2  迴應標題域(ResponseHeader Fields) 25

7.  實體(Entity) 26

7.1  實體標題域(EntityHeader Fields) 26

7.2  實體主體(EntityBody) 26

7.2.1 型別(Type) 27

7.2.2 長度(Length) 27

8.  方法定義(MethodDefinitions) 27

8.1 GET 28

8.2 HEAD 28

8.3 POST 28

9.  狀態程式碼定義(StatusCode Definitions) 29

9.1  訊息1xx(Informational1xx) 29

9.2  成功2xx(Successful2xx) 29

9.3  重定向(Redirection3xx) 30

9.4  客戶端錯誤(ClientError )4xx 31

9.5  伺服器錯誤(ServerError )5xx 32

10.  標題域定義(HeaderField Definitions) 33

10.1 允許(Allow) 33

10.2 授權(Authorization) 34

10.3 內容編碼(Content-Encoding) 34

10.4 內容長度(Content-Length) 34

10.5 內容型別(Content-Type) 35

10.6 日期(Date) 35

10.7 過期(Expires) 36

10.8 來自(From) 37

10.9 從何時更改(If-Modified-Since) 37

10.10 最近更改(Last-Modified) 38

10.11 位置(Location) 38

10.12 註解(Pragma) 39

10.13 提交方(Referer) 39

10.14 伺服器(Server) 40

10.15 使用者代理(User-Agent) 40

10.16 WWW-授權(WWW-Authenticate) 40

11.  訪問鑑別(AccessAuthentication) 41

11.1 基本授權方案(Basic Authentication Scheme) 42

12.  安全考慮(SecurityConsiderations) 43

12.1 客戶授權(Authentication of Clients) 43

12.2 安全方法(Safe Methods) 43

12.3 伺服器日誌資訊的弊端(Abuse of Server Log Information) 43

12.4 敏感資訊傳輸(Transfer of Sensitive Information) 44

12.5 基於檔案及路徑名的攻擊(Attacks Based On File and Path Names) 44

13.  感謝(Acknowledgments) 45

14. 參考書目(References) 45

15.  作者地址(Authors'Addresses) 47

附錄(Appendices) 48

A. Internet介質型別訊息/http(Internet Media Type message/http) 48

B.  容錯應用(TolerantApplications) 48

C.  與MIME的關係(Relationshipto MIME) 49

C.1  轉換為規範形式(Conversionto Canonical Form) 49

C.2  日期格式轉換(Conversionof Date Formats) 49

C.3  內容編碼介紹(Introductionof Content-Encoding) 50

C.4  無內容傳輸編碼(NoContent-Transfer-Encoding) 50

C.5  多個主體的HTTP標題域(HTTPHeader Fields in Multipart Body-Parts)

 50

D.  附加特性(AdditionalFeatures) 50

D.1  附加請求方法(AdditionalRequest Methods) 51

D.2  附加標題域定義(AdditionalHeader Field Definitions) 51

相關文章