It is incorrect to "normalize" // in HTTP URL paths
> Source: Hacker_News
Execute Primary Source
// Discussion Topic
HTTP URLにおけるパスセグメントの正規化、特に連続するスラッシュを単一のスラッシュに統合する挙動が、RFC 3986の仕様に照らして「正しい」のか、あるいはリソースの識別性を損なう「誤り」なのかという問題。
// Community Consensus
技術的にはRFC 3986に基づき、'//' は '/' とは異なる識別子であるため、無条件な正規化は「誤り」であるという見解が強い。しかし、Nginx等の主要なWebサーバーがデフォルトで正規化を行うというデファクトスタンダードの壁があり、これを変更することは広範な破壊的変更を招く。また、S3のようなオブジェクトストレージでは、正規化がデータの不整合を引き起こす実害があることも指摘されている。
// Alternative Solutions
URLの曖昧さを避けるため、特殊なパス構造が必要な場合はURLエンコード(例: %2F)を用いること。また、プロキシ層での挙動を制御するために、各Webサーバー(Nginxのmerge_slashes等)の設定を明示的に管理すること。
// Technical Terms
Senior Engineer Insight
> 本議論は、標準規格(理想)と実装の慣習(現実)の乖離という、インフラ設計における古典的かつ深刻な問題を浮き彫りにしている。特に、Nginxのようなプロキシ層での「親切な正規化」が、Spring Boot等のバックエンドのセキュリティロジックを破壊する事例は、マイクロサービス環境において極めて警戒すべきリスクである。我々のシステムにおいては、URLを単なる文字列としてではなく、リソースの厳密な識別子として扱う必要がある。プロキシ、アプリケーション、ストレージ(S3等)の各レイヤーで、パスの解釈ルールが完全に一致していることを設計段階で検証し、必要に応じて正規化を明示的に無効化する構成を徹底すべきである。