Skip to content

[URLの余談] Goの微妙な挙動を見つけた #74

@takumihara

Description

@takumihara

tldr: "///p?q#f" のようなURLを Go は ///p の部分を全てpathと解釈するが、それは間違いだと思う

RFC3986には以下の記述がある

URI が authority 要素を含まない場合、path はスラッシュ二文字 ("//") を持って始める事はできない。

また、BNFを見ても上記の記述の通り path-abempty 以外はpathの最初に /を連続して使用することができない。

 path-abempty  = *( "/" segment )
 path-absolute = "/" [ segment-nz *( "/" segment ) ]
 path-noscheme = segment-nz-nc *( "/" segment )
 path-rootless = segment-nz *( "/" segment )
 path-empty    = 0<pchar>

つまり、 ///p は path は /p だけで、 authority部が空文字だと解釈するべきだと思う

https://go.dev/play/p/4_6MyFFHGmC
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=3110a7655169af9ba5e8a095bc0a49fd

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions