新同事问,浏览器地址栏那一长串英文到底是什么意思,为什么有的带问号,有的带井号,看着像乱码。
拿一个完整地址拆开看
https://www.example.com:8443/shop/item?id=12&from=list#review。https 是协议,www.example.com 是主机,8443 是端口,/shop/item 是路径,问号后面是查询串,井号后面是锚点。少了端口就用协议默认值,https 是 443,http 是 80。
问号和井号的区别
问号后面的键值对会随请求发给服务器,后端用它筛数据、分页、带来源。井号后面留在浏览器本地,不会发送,常用来定位页面里的某个位置,前端路由也拿它做文章。改井号不会重新请求页面,很多单页应用靠这个切换视图。
那些百分号是什么
URL 只能安全传输一部分字符,中文、空格、斜杠都要转义。空格变 %20,中文按 UTF-8 转成三个百分号编码。JS 里用 encodeURIComponent 处理参数值,别把整个地址都编了,会把斜杠也编掉,服务器就找不到路径。
相对地址和绝对地址
以 / 开头是站内绝对路径,从域名根开始;不带 / 是相对当前目录;//example.com 省略协议,跟随当前页面。写链接时少用相对路径,目录一改就全断,尤其是后台和前台不在一层的时候。
协议和端口别忽略
http 和 https 是两套地址,混用会触发跨域和证书问题。非标准端口要显式写,CDN 回源时经常因为端口不一致导致 502。域名后面带路径的,注意反向代理有没有截断前缀。
常见误区
URL 不等于域名,也不等于文件路径。它是一套统一资源定位规则,同一个页面可以有多个 URL,带参数的、带井号的都算。做 SEO 时要注意参数重复收录,用 canonical 指明主地址。
URL 既是资源地址,也是参数载体。看懂结构,排查 404 和参数丢失会快很多。