0

http://www.example.comにリクエストすると、webRequest.onBeforeRequestListenerにはhttp://www.example.com/が表示されるのはなぜですか?例えばwebextension:ブラウザが要求されたURLに末尾にスラッシュを追加するのはなぜですか?

chrome.webRequest.onBeforeRequest.addListener(
    details => console.log('Sending request to', details.url), 
    { urls: ['<all_urls>'] }); 
fetch('http://www.example.com'); 

ネットワーク要求モニターに示されるリクエストURLと一致している

Sending request to http://www.example.com/ 

を印刷します。私はそれを取るとcurlコマンドに変換した場合、要求は次のようになります。

curl 'http://www.example.com/' -H 'Accept: */*' -H 'Connection: keep-alive' 
    -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: en-US,en;q=0.9' 
    -H 'User-Agent: ...' --compressed 

ので、出かける元の要求がhttp://www.example.comためhttp://www.example.com/ないためです。その決定は、サーバーではなく、ブラウザーで行われていなければなりません。

fetchの代わりにXMLHttpRequestを使用すると、同じ現象が発生します。私の例では、Chromeを使用しましたが、Firefoxでは同じです。

質問:

  • なぜブラウザが自動的にそれを変更しますか?他のURLでも発生します。私の理解から、後続のスラッシュを追加することはしばしばうまくいくが、一般に、それは急激な変化である。
  • 特定のURLへの現在のリクエストについて、リスナーのonBeforeRequestをフィルタリングしたい場合、どのように信頼性の高いURLに一致させることができますか?たとえば、URLが同一かどうかを確認するだけでは失敗します。
  • ブラウザに書き換えURLのルールがありますか?
+1

スラッシュに関するその他の回答:https://stackoverflow.com/questions/2581411/do-web-browsers-always-send-a-trailing-slash-after-a-domain-name、https:///webmasters.stackexchange.com/questions/35643/is-trailing-slash-automagically-added-on-click-of-home-page-url-in-browser – PredatorIWD

+0

@PredatorIWDリンクをありがとう。それは私の答えに書いたものを確認するようです。 –

答えて

0

考えてみました。ブラウザは無効なURLを修正するだけです。 URLは次のようになり、Wikipediaから引用する

:権限部分が存在し、また1だった可能性がある場合場合

scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]

パスは、単一のスラッシュ(/)で始まる必要があります。そうではありませんが、二重スラッシュで始めることはできません。パスは常に定義されますが、定義されたパスは空(ゼロ長)なので、末尾にスラッシュはありません。

http://example.com(この例では、スキーマに加えてホスト名:http://example.com)権限部分を持っているが、それは空のパスを残します。仕様によれば、パスは/で始まらなければならないので、ブラウザは空のパスを/に置き換えて修正します。

http://example.com/abcのように有効なURLを使用する場合は、変更する必要はありません。

関連する問題