2011-01-12 11 views
0

HTTPプロトコルでは、ファイルパスにエンコードされたスペースが必要ですか? HTTPプロトコルで

ファイル名にスペースがある場合requsestの最初の行は、例えば

GET /img/my house.jpg HTTP/1.1 

私の質問は、ありさのように、プロトコルは、何らかの方法でエンコードされることを必要としません? (プロトコルが明確でない場合や、実際の状況は何ですか?)

+0

これはすでにここに尋ねた、まさに次のとおりです。http:// stackoverflow.com/questions/4665124/space-in-url-did-browser-got-smarter-or-server/4665137#4665137 – Brad

+0

いいえ、正確な複製はありません。 – jgauffin

答えて

4

これを%20としてエンコードする必要があります。ここにその理由があります。まず、RFC 2616 5.1.2 ...

リクエストライン=メソッドのSPのRequest-URI SP HTTP-バージョンCRLF

と...

のRequest-URI = "*" |絶対値| abs_path |権限

のはRFC 1808にオーバーホップ、あなたはURLとパスの仕様にスペースがないことに注意しましょうしましょう...

URL   = (absoluteURL | relativeURL) [ "#" fragment ] 

    absoluteURL = generic-RL | (scheme ":" *(uchar | reserved)) 

    generic-RL = scheme ":" relativeURL 

    relativeURL = net_path | abs_path | rel_path 

    net_path = "//" net_loc [ abs_path ]  
    abs_path = "/" rel_path 
    rel_path = [ path ] [ ";" params ] [ "?" query ] 

    path  = fsegment *("/" segment)  
    fsegment = 1*pchar  
    segment  = *pchar 

    params  = param *(";" param) 
    param  = *(pchar | "/") 

    scheme  = 1*(alpha | digit | "+" | "-" | ".")  
    net_loc  = *(pchar | ";" | "?")  
    query  = *(uchar | reserved)  
    fragment = *(uchar | reserved) 

    pchar  = uchar | ":" | "@" | "&" | "="  
    uchar  = unreserved | escape  
    unreserved = alpha | digit | safe | extra 

    escape  = "%" hex hex  
    hex   = digit | "A" | "B" | "C" | "D" | "E" | "F" | 
         "a" | "b" | "c" | "d" | "e" | "f" 

    alpha  = lowalpha | hialpha  
    lowalpha = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | 
       "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | 
       "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z"  
    hialpha  = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | 
       "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | 
       "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" 

    digit  = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | 
       "8" | "9" 

    safe  = "$" | "-" | "_" | "." | "+"  
    extra  = "!" | "*" | "'" | "(" | ")" | ","  
    national = "{" | "}" | "|" | "\" | "^" | "~" | "[" | "]" | "`"  
    reserved = ";" | "/" | "?" | ":" | "@" | "&" | "="  
    punctuation = "<" | ">" | "#" | "%" | <"> 
4

はい、それはすなわち

%20が問題の文字の進値を表し
GET /img/my%20house.jpg HTTP/1.1 

、URLエンコードする必要があります

PS already askこれはありませんでしたか?

2

はい。 %20。詳細は、RFC 1738を参照してください。

HTTP URIのパスコンポーネントは「ファイルパス」ではないことに注意してください。それはすべて、リソースへの階層的なパスであり、サーバー上のファイルに対応する必要はありません。

+0

RFC 1738は無関係です。代わりにRFC 2616(HTTP)とRFC 3986(URI)を確認してください。 –

3

はい。
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
注空間が要求行で区切りであることを次のよう

仕様は要求ラインを定義します。

+0

メソッド、メソッド、バージョンを定義しないと、スペースの可能性を除外しませんでした。あなたはこの場合正しいですが。 –

2

スペースは%20としてエンコードする必要があり、エンコードのルールはRFC3986に記載されています。あなたは通常、URLエンコーディングの世話をしているライブラリを持っていることをお勧めします。

関連する問題