web-dev-qa-db-ja.com

FireFoxとChrome)によってURL内の\(バックスラッシュ)を処理するさまざまな動作

[〜#〜]背景[〜#〜]

私のubuntuワークステーションがActiveDirectoryのドメインで構成されているときの私の経験によると、私のために作成されたユーザー名は次のパターンに従っていました。

domain_name\user_name

LinuxでApacheのuserdir拡張子を使用するには、ホームディレクトリのpublic_htmlにアクセスするために、URLでユーザー名を使用する必要があります。

http:// localhost/〜domain_name\user_name

問題A:

Chromeは、URL内のすべてのバックスラッシュ '\'文字をスラッシュ '/'に変換し、結果のURLはその下のようになりますは完全に異なり、常に結果見つかりません

http:// localhost/〜domain_name/user_name

一方、Firefoxはバックスラッシュをフォワードスラッシュに変換しないため、目的のターゲットへのhttpリクエストはWebサーバーによって処理されます。

Common solution is to encode back slash in %5C.

問題B:

CSS @importコンストラクトで同様のパス(パスに\を含む)を使用すると、HTTP Get Requestとしてのcssファイルのインポートプロセスが失敗し、404エラーとURLが報告されます。 404エラーでは、\の存在を完全に見逃します。これは、\がURLに対してGETリクエストを呼び出す前にURLから削除されることを意味します。

この動作はFirefoxとChromeで一般的です。しかし、彼らには珍しい解決策があります

Firefoxは、cssインポートプロセスで機能するためにバックスラッシュをエスケープする必要があります。

@import url( " http:// localhost/〜domain_name \\ user_name/path/to/css ");

Chromeには通常、エンコードされたバックスラッシュソリューションが必要です。

@import url( " http:// localhost/〜domain_name%5Cuser_name/path/to/css ");

  • URLで\を処理するための統合ソリューションとは何ですか?
  • \がユーザー名に表示されないようにする方法はありますか?
11
Shoaib Nawaz

URLのバックスラッシュを処理するための統合ソリューションは、%5Cを使用することです。 RFC 2396は、URLでその文字をまったく許可していませんでした(したがって、その文字に関する動作は、単なるエラー回復動作でした)。 RFC 3986はそれを許可しますが、特に既存のURLプロセッサと正確に互換性がないため、広く実装されていません。

特にChromeは、IEと同じことを行います。つまり、Windowsのファイルパスが行うことであるため、バックスラッシュを入力するたびにスラッシュを意味していると想定します。

9
Boris Zbarsky

FirefoxでSlashyアドオンを使用してみてください。これは、Firefoxへのリンクです。

スラッシュ

3
cafebabe1991

このバックスラッシュの自動変換の問題は、Chromeバージョン> = 53.0.2785.116で修正されました。

これで、円記号は%5Cとして適切に扱われます。

1