查询字符串存在的意义
它让一个URL、一个页面能够携带可变的数据,而不需要为每一种可能的状态单独建一个页面。搜索结果、筛选条件、分页、追踪统计和API请求,基本都依赖通过URL传递参数这一机制。之所以能对某个特定的筛选结果收藏或分享,正是因为这种状态本身就保存在URL里。
如何手动构造一条查询字符串
把每一对key=value用"&"连接起来,并在拼接前先对每个key和value中的特殊字符做百分号编码,最后在整体前面加上"?",拼接到基础URL后面即可。编码这一步没做对,是链接失效最常见的原因,尤其是内容中包含空格或非ASCII字符的时候。
常见问题
查询字符串是完全可见的吗,安全吗?
是的,它会完整出现在浏览器地址栏、浏览历史、服务器日志中,还常常会随"Referer"请求头被发送到其他网站。因此绝对不应该用它来传递密码之类的敏感信息,即便走的是HTTPS连接,这一点也不会改变。
查询字符串和URL的路径部分有什么区别?
路径(比如/products/shoes)通常以相对固定的层级结构来标识某一个具体资源。查询字符串(?color=red&size=10)则是用来传递可选的、可变的参数,对这个资源做筛选或调整,避免为每一种参数组合都单独建一个路径。