MediumのURLでユーザー名の前に『@(アットマーク)』が入っているのを見かけます。
https://medium.com/@narikei
/users/narikei
とかなっているよりもタイプ数も少ないし、直感的で良い思った
でも、他にやっているところを見ないし『@』をURLに含んでいるサービスもない
これはインターネットの仕様的に大丈夫なのか疑問だったので調べてみました。
URLおさらい
例えば、こんなURLがあった場合
https://username:password@www.example.com:8080/news/index.html?page=2&flg=true#popular
このような要素に分類される
scheme | https |
---|---|
host | www.example.com |
port | 8080 |
user | username |
pass | password |
path | /news/index.html |
query | page=2&flg=true |
fragment | popular |
普通URLで『@』っていうとBasic認証で使うイメージです。
『@』を使っても良いか
URL
の親玉URI
の仕様はInternet Engineering Task Force
が策定している
その仕様書がこれ
http://www.ietf.org/rfc/rfc3986.txt
(読みにくいのでダウンロードして固定ピッチのフォントで読むのがおすすめ)
3.3. Path
The path component contains data, usually organized in hierarchical
form, that, along with data in the non-hierarchical query component
(Section 3.4), serves to identify a resource within the scope of the
URI's scheme and naming authority (if any). The path is terminated
by the first question mark ("?") or number sign ("#") character, or
by the end of the URI.
=====
segment = *pchar
segment-nz = 1*pchar
segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
; non-zero-length segment without any colon ":"
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
私のてきとう翻訳によると、Pathには使っても大丈夫って書いてあった
さらに、「:(コロン)」も使ってもよいらしい
ちゃんとパーセントでエスケープする場合は%40
を使う
そういえば
むかし、Hashbang
ってものもあったけど/#!
は使っちゃだめ
というか#
以降がfragmentとして分類される。
おわり
MediumはきちんとURIの仕様にそっていて正しかった
/@narikei
だと既存のルーティングと競合しないし、/@login
とかやられても辛さが軽減されるのでオススメかも
Railsだったら こんな感じでルーティングさせることができる
get "/@:username" => "users#show"
JavaでSpringならこんな感じ
@Controller
@RequestMapping(value = "/@{userName}")
public class UserController {...}
ただ、すべてのブラウザやクローラーがきちんと読んでくれるかは微妙な気がします。
はじめてIETFの仕様書とか読んだ