URI 本质上是一个字符串,这个字符串的作用是唯一地标记资源的位置或者名字

1
http://www.chrono.com:8080/11-1?uid=1234&name=mario&referer=xxx

scheme + :// + host:port + path + [?query] + [#fragment]

path: / + [目录名] + / + … + 文件名 ,path中第一个/是web服务器配置文件中的根,不是操作系统的根

  • 第一个多出的部分是协议名之后、主机名之前的身份信息“user:passwd@”,表示登录主机时的用户名和密码,但现在已经不推荐使用这种形式了(RFC7230),因为它把敏感信息以明文形式暴露出来,存在严重的安全隐患
  • 第二个多出的部分是查询参数后的片段标识符“#fragment”,它是 URI 所定位的资源内部的一个“锚点”或者说是“标签”,浏览器可以在获取资源后直接跳转到它指示的位置。但片段标识符仅能由浏览器这样的客户端使用,服务器是看不到的。也就是说,浏览器永远不会把带“#fragment”的 URI 发送给服务器,服务器也永远不会用这种方式去处理资源的片段