ディスカッション (11件)
クエリ文字列を排除する手法についての考察記事です。詳細は以下のリンクからご確認ください:https://susam.net/no-query-strings.html
「このサイトではクエリ文字列の無断使用を全面的に禁止することにした」だってさ。この人のサイトはリクエストにクエリ文字列が含まれると414エラーを返すんだけど(正直、間違いだと思う)、もしこの抗議がユーザーを守るためなら、その文字列を管理できていなかったであろうユーザーをなぜ罰するの?いっそ、ブラウザのツールなどでユーザー自身がどう対処できるか教えてあげるきっかけにすればいいんじゃないの?
正直これには興味津々で、HTMLやURLのW3C標準を調べてみたんだ。驚いたことに、パーセントエンコーディングされていること以外、フォーマットに関する定義は実際には存在しないんだよ。クエリ文字列を「form-urlencoded」[0]なクエリ文字列と混同しがちだけど、あれは相互運用フォーマットの一つに過ぎない。一般的にクエリ文字列とは、URL内の「?」に続くパーセントエンコードされた文字列のこと[1]であり、レスポンス生成時に利用できる「URL」HTMLオブジェクトのプロパティに過ぎないんだ。URLSearchParamsオブジェクトはform-urlencodedパーサーでパースした結果にすぎず、JavaScript用の相互運用層でしかない。
正直に言うと、標準を調べる前は反対意見を唱える気満々だったんだけど、実際はかなり明確だった。予期せぬクエリ文字列に対して404を返すのは妥当かもしれない。クエリ文字列もパスと同様にURL APIの一部だし、パスに適当な文字列をくっつけるのがまずい挙動だってのは誰もが認めるところだよね。
これやChrisの投稿のトーンだと、クエリパラメータを含めるのが悪みたいに聞こえるんだけど、何がどう有害なのかよく分からないんだよね。誰か教えてくれない?URLが壊れることがあるのは理解できるし、それだけでもやらない理由にはなるけど、それにしても単なるちょっとした不便さ程度の話に思えるんだけど。
「これは、独立した個人サイト運営者のコミュニティが推奨する興味深いウェブサイトやページを訪問者が探索できる、小規模で分散型のセルフホスト型ウェブコンソールです」
石器時代には、これらを「Webrings」と呼んでいたけど、今ほどお洒落じゃなかったな。
オープンソースのアプリフレームワークを開発していた時、FastCGIを使ったホスティング環境だとAuthヘッダーが無視されるっていう問題に直面したことがあってね。その時は泣く泣くトークンをクエリで渡すしかなかった。最悪だったよ、URLをコピー&ペーストするたびにトークンまでくっついてくるんだから。今は修正されたのかな?私が管理していて、誰にでも公開する必要がないバックエンドではヘッダーを使っているよ。
元のソースがまだHNで議論されていなかったから、そのリンク(https://chrismorgan.info/no-query-strings )をトップに置いて、返信のリンク(https://susam.net/no-query-strings.html )をトップテキストに移動しておいたよ。どっちもいい内容だけど、元の方を優先するのがフェアだろうし。
「414 URI Too Longを乱用していると言われるかもしれないけど、こうする方が面白いんだ」というなら、いっそ「418 I'm a teapot」(私はティーポットです)にするのはどう?ティーポットも普通はクエリ文字列なんてサポートしてないだろうし。
追記:これは間違いだったみたい https://news.ycombinator.com/item?id=48077990
「URLにトラッキング情報を付けるのは嫌い」「リンクにそんなものを付けるのはユーザーへの虐待だ」「無断のクエリ文字列は禁止」「現状ではクエリ文字列は一切使っていない」とか言いつつ、なぜかInstagramのトラッキングパラメータっぽい「?igsh」は許可されてるんだよね。変なの。
著者のような過激なスタンスをとるつもりはないけど、リンクを何千文字にもしてしまうような無意味なクエリパラメータは大嫌いだね。
私はリンクを共有する前にクエリパラメータを削除する、こんなブックマークレットを使っているよ。
javascript:(()=>navigator.clipboard.writeText(location.origin+location.pathname))();
面白いアイデアだし洒落ているけど、結局のところ、自分のリンクに何が付加されるか常にコントロールできるわけじゃない一般ユーザーに対しては敵対的なアプローチだよね。
このURLは問題なく表示されたけど:
https://chrismorgan.info/no-query-strings#:~:text=So%20I%E2%...
こっちは長すぎるって怒られたよ:
https://chrismorgan.info/no-query-strings?a=1