HTTP RFC中所用到的規則

2021-06-04 05:47:41 字數 3118 閱讀 6065

2. 標誌轉換及通用語法(notational conventions and generic grammar)

2.1 補充反饋方式(augmented bnf)

與rfc822[7]很類似,本文對所有機制的說明都是以散文和補充反饋的方式來描述的。對於實現者來說,要想理解這些約定,必須對這些符號很熟悉。補充反饋方式(augmented bnf)包括下面的結構:

要解釋的名詞=名詞解釋(name = definition)

規則的名字(name)就是它本身(不帶任何尖括號,「<」,「>」),後面跟個等號=,然後就是該規則的定義。如果規則需要用多個行來描述,利用空格進行縮排格式排版。某些基本的規則使用大寫,如sp, lws, ht, crlf, digit, alpha,等等。定義中還可以使用尖括號來幫助理解規則名的使用。

字面意思("literal")

文字的字面意思放在引號中間,除非特別指定,該段文字是大小寫敏感的。

規則1|規則2(rule1 | rule2)

「|」表示其分隔的元素是可選的,比如,「是|否」要選擇『是』或『否』。

(規則1 規則2)((rule1 rule2))

在圓括號中的元素表明必選其一。如(元素1(元素2|元素3)元素4)可表明兩種意思,即「元素1 元素2 元素4」和「元素1 元素3 元素4」

*規則(*rule)

在元素前加星號「*」表示迴圈,其完整形式是「*元素」,表明元素最少產生次,最多次。預設值是0到無限,例如,「1*元素」意思是至少有乙個,而「1*2元素」表明允許有1個或2個。

[規則]([rule])

方括號內是可選元素。如「[元素1 元素2]」與「*1(元素1 元素2)」是一回事。

n 規則(n rule)

表明迴圈的次數:「(元素)」就是「*(元素)」,也就是精確指出取值。因而,2digit 就是2位數字, 3alpha 就是由三個字母組成字串。

#規則(#rule)

「#」與「*」類似,用於定義元素列表。

完整形式是「#元素」表示至少有個至多有個元素,中間用「,」或任意數量的空格(lws-linear whitespace)來分隔,這將使列表非常方便,如「(*lws 元素 *( *lws "," *lws 元素 ))」就等同於「1#元素」。

空元素在結構中可被任意使用,但不參與元素個數的計數。也就是說,「(元素1),,(元素2)」僅表示2個元素。但在結構中,應至少有乙個非空的元素存在。預設值是0到無限,即「#(元素)」表示可取任何數值,包括0;而「1#元素」表示至少有1個;而「1#2元素」表示有1個或2個。

;注釋(; comment)

分號後面是注釋,僅在單行使用。

隱含*lws(implied *lws)

本文的語法描述是基於單詞的。除非另有指定,線性空格(lws)可以兩個鄰近符號或分隔符(tspecials)之間任意使用,而不會對整句的意思造成影響。在兩個符號之間必須有至少乙個分隔符,因為它們也要做為單獨的符號來解釋。實際上,應用程式在產生http結構時,應當試圖遵照「通常方式」,因為現在的確有些實現方式在通常方式下無法正常工作。

2.2 基本規則(basic rules)

下面的規則將用於本文後面對結構基本解析。

us-ascii 編碼字符集定義[17]。

octet = <8-bit的順序資料,即bytes>

char = < us-ascii字元(取值為0 – 127的octet)>

upalpha = < us-ascii 大寫字元"a"到"z">

loalpha =

alpha = upalpha | loalpha

digit = < us-ascii 數字"0"到"9">

ctl = < us-ascii 控制字元(取值0到31的octet )和del (127)>

cr =

lf =

sp =

ht =

<"> =

http/1.0規定,除實體主體(entity-body,見附錄b容錯應用)外,所有協議元素的行結束標誌都是crlf(按位元組順序)。在實體主體內部的行結束標誌定義及其對應的介質型別定義,見3.6節的描述。

crlf = cr lf

http/1.0的頭可以折成許多行,只要每個後續行以空格或水平製表符開頭。所有的線性空格(lws),同空格(sp)有相同的語義。

lws = [crlf] 1*( sp | ht )

實際上,有些應用並沒有考慮處理這樣多行的頭,所以從相容性上考慮,http/1.0應用最好不要產生折成多行的頭。

text規則只是用於描述訊息直譯器不關心的域的內容及其取值。文字內容可包含不同於us-ascii的字元。

text = 《除了控制字元(ctls)之外的任何octet,包括lws >

在標題域中的收件人域如包含us-ascii字符集以外的字元,這些字元將按照iso-8859-1標準來解釋。

十六進製制數字型字元在幾個協議元素中到。

hex = "a" | "b" | "c" | "d" | "e" | "f"

| "a" | "b" | "c" | "d" | "e" | "f" | digit

許多http/1.0頭域的內容由被lws分隔的單詞或特殊字元組成,這些特殊字元必須置於引號中間的字串內,作為引數值使用。

word = 符號(token)| 被引號引起來的字串

token = 1*《除控制字元(ctls)或tspecials之外的任意字元》

tspecials = "(" | ")" | "<" | ">" | "@"

| "," | ";" | ":" | "\" | <">

| "/" | "[" | "]" | "?" | "="

| "" | sp | ht

在http頭域中可用括號表示注釋文字。注釋只允許寫在包含注釋的域,做為域值定義的一部分。在除此之外其它域中,括號將被視為域值。

comment = "(" *( ctext | comment ) ")"

ctext = 《除圓括號外的任何text>

被雙引號圈中的文字字串將被視為乙個單詞。

quoted-string= ( <"> *(qdtext) <"> )

qdtext = 《除了雙引號及控制字元之外的任何字元,包括lws >

在http/1.0中不允許使用後斜線「\」來引用單字元。

4 SVG中所用到的形狀簡介 矩形

svg 有一些預定義的形狀元素,可被開發者使用和操作 標籤可用來建立矩形,以及矩形的變種。要理解它的工作原理,請把這些 拷貝到記事本,然後儲存為 rect1.svg 檔案。把此檔案放入 web目錄中 標籤可用來建立矩形,以及 矩形的變種 要理解它的工作原理,請把這些 拷貝到記事本,然後儲存為 rec...

DFS所用到的奇偶剪枝

把矩陣看成如下形式 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 從為 0 的格仔走一步,必然走向為 1 的格仔 從為 1 的格仔走一步,必然走向為 0 的格仔 即 從 0 走向 1 必然是奇數步,從 0 走向 0 必然是偶數...

MTK電話薄中所用到的資料結構及其在電話薄中的作用

程式就是 資料結構 演算法。了解了程式的資料結構,那麼整個系統就明白一大半了。下面關於 薄用到的比較重要的資料結構,看完應該對 薄 有個比較清晰的認識。第乙個問題 mtk系統中怎麼儲存 薄的?phonebook max pb entries 薄中最 重要的結構mmi phb entry bcd st...