如果URL在chrome中包含“#”,则会被截断

时间:2015-12-16 15:22:48

标签: javascript google-chrome url

假设按以下方式发出http get请求:

var url = "https://ss1.bdstatic.com/k4oTfnSm1A5BphGlnYG/newmusic/happy.png";
var img = new Image();
img.src = url + '?hello=world|a=1|href=#feedback';
在chrome(47.0)中

,请求网址为https://ss1.bdstatic.com/k4oTfnSm1A5BphGlnYG/newmusic/happy.png?hello=world|a=1|href=

  

丢失了#feedback

在Firefox(42)中,请求网址为https://ss1.bdstatic.com/k4oTfnSm1A5BphGlnYG/newmusic/happy.png?hello=world|a=1|href=#feedback

为什么chrome会截断网址?

1 个答案:

答案 0 :(得分:2)

您的网址是有效的网址,但并不代表您的想法。

如果正确解析了您的网址,请执行以下操作:

scheme = https
authority = ss1.bdstatic.com
path = k4oTfnSm1A5BphGlnYG/newmusic/happy.png
Query = hello=world|a=1|href=
fragment = feedback

如果您希望查询为hello=world|a=1|href=#feedback,则必须对#进行编码,否则将被理解为查询和片段开始的结束。

对您进行编码,您的网址将如下所示:

https://ss1.bdstatic.com/k4oTfnSm1A5BphGlnYG/newmusic/happy.png?hello=world|a=1|href=%23feedback

如果您想在Javascript中对其进行编码,请使用encodeURIComponent

var url = "https://ss1.bdstatic.com/k4oTfnSm1A5BphGlnYG/newmusic/happy.png";
var img = new Image();
img.src = url + '?hello=world|a=1|href=' + encodeURIComponent('#feedback');

之所以出现差异,可能是因为RFC 2616并未说明网址在HTTP请求中可能有fragment,因此Chrome认为他们不能拥有,而Firefox则将其作为查询部分的一部分。