LoginSignup
0
0

urlparseのparamsとは何者か

Posted at

初めに

urlparseの結果には以下のようにparamsという値があります

ParseResult(scheme='scheme', netloc='netloc', path='/path;parameters', params='',
            query='query', fragment='fragment')

ドキュメントの説明を見ると最後のパス要素に対するパラメータとありますがイミフです
さらにサンプルを見ても全て空になっており、どういう場合に入るのかわからなかったため調べました

結論

以下のようなURLの場合に入ります
https://hoge/users;id=123

from urllib.parse import urlparse

url = 'https://hoge/users;id=123'
print(urlparse(url))
ParseResult(scheme='https', netloc='hoge', path='/users', params='id=123', query='', fragment='')

これはなんなのか

マトリクスパラメータというものらしいです
こちらに詳しい解説などがありました

クエリパラメータはリクエスト全体に対して適用するのに対して、マトリクスパラメータはパスに対して適用するものという考え方らしいですが、一般的じゃ無いのでマトリクスパラメータはあんま使わない方がいいよってことみたいです

本来は
https://hoge/users;id=123/friends
みたいなパスの途中にマトリクスパラメータを入れるみたいなこともありらしいですが、パスの途中だとurlparseは解釈できないみたいです(だから最後のパス要素に対するパラメータってことなのかも)

あと、サーバーの解釈違いによる脆弱性みたいなのもあるらしいです

最後に

マトリクスパラメータが必要になる場面は滅多に無いので基本知らなくても影響無いとは思いますが、urlparseを使う場合には頭の片隅に置いておくといいかもしれません

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0