这些天在用VUE开发,用到了VUE的路由,发现用了URL的hash,所以简单的去了解了一下。
由上图里面可以看出一个URI的组成(URL一样)
详解(主要介绍search与hash),以如下的URL为例:
http://www.youcat.top/index;type=c/index.html;type=d?name=a&password=aaa#home?l=1
其中:
location.search == '?name=a&password=aaa';
location.hash == '#home?l=1'
由上当你想要通过URL传入参数的时候,’?
‘的内容需要在#
前面(当’#
‘存在的时候),否则若是在’#
‘后面,则其将会成为’#
‘号的一部分。
有的参考会说:?
后面有多个参数的时候以’&
‘进行分隔,其实这边可以你自己定义,只要你在后台或者前段知道分隔符就行。
除了有些不合规则的字符需要特别处理之外,对査询组件的格式没什么要求。按照常规,很多网关都希望査询字符串以一系列“名/值”对的形式出现,名值对之间用字符“&”分隔
index.html
后面的;type=d
是路径参数,给这个路径使用的,每个路径下都可以使用。
对很多方案来说,只有简单的主机名和到达对象的路径是不够的。除了服务器正在监听的端口,以及是否能够通过用户名和密码访问资源外,很多协议都还需要更多的信息才能工作。负责解析URL的应用程序需要这些协议参数来访问资源。否则,另一端的服务器可能就不会为请求提供服务,或者更糟糕的是,提供错误的服务。比如,像FTP这样的协议,有两种传输模式:二进制和文本形式。肯定不希望以文本形式来传送二进制图片,这样的话,二进制图片可能会变得一团糟,这时候路径参数就有用了
http://www.youcat.top/index;type=c/index.html;type=d?name=a&password=aaa#home?l=1
这个路径的信息并不会全部发送到后端,其中’#
‘后面的信息将不会被发送到后端,即后端根本查不到这个东西。
HTTP服务器通常只处理整个对象,而不是对象的片段,客户端不能将片段传送给服务器。浏览器从服务器获得了整个资源之后,会根据片段来显示感兴趣的那部分资源
通过查看vue的路由信息,我们可见:
http://www.youcat.top/index;type=c/index.html#home?l=1
他的形式如上,而起获取参数的方法为:
this.$route.query.l
由此可见,其内部是进行字符串的截取,转换成对象的形式(猜测)