
今天用 webstorm debug node 代码,主要流程就是 Safari 访问一个带参数的连接,然后向数据库里插入一条记录 假如链接为: http://localhost:3000?name=1001 , Safari 里输入连接然后敲下回车,就将 1001 写入数据库。 发现的问题就是当我在输入 name 值的时候,如果 Safari 的历史记录里存在对应的或者是模糊匹配到的话, Safari 会触发请求这个匹配到的连接的操作。 也就是说假如我的 Safari 有如下历史记录
http://localhost:3000?name=1002 http://localhost:3000?name=1003 http://localhost:3000?name=1004 我打开 Safari 当我输入到 http://localhost:3000?name=1 它如果优先匹配到 1001 的话,就直接会将 1001 写入数据。 我换了 Chrome 则没有这样的情况,换了 vscode+Safari 或者 终端+Safari 也是同样的问题。 不知道我描述清楚没,大家有这样的情况吗? 另外排除了 favicon.ico 的请求,和这个无关。
1 RE 2017 年 4 月 14 日 是的, Safari 是有这个 “模糊匹配” 并默认选上的 feature ,一旦回车直接进入模糊匹配的那个 URL ; 用 iOS 原生输入法,在模糊匹配之后可以删掉后面部分, 但如果用的是第三方输入法(例如搜狗)是删不掉的,只会是选中状态,要输入其它的字符或空格来替换地址栏的内容 |
2 undeflife 2017 年 4 月 14 日 最简单的办法其实是 不要用 get 请求处理写入 |
3 a342191555 2017 年 4 月 14 日 safari 偏好设置搜索在后台载入“最常点选” GET 请求应该是幂等的 |
4 knightdf 2017 年 4 月 14 日 chrome 一样有这个问题,这是是浏览器 prediction 优化特性,会提前加载他认为最匹配的 url ,所以在你敲下去之前其实浏览器就已经把这个页面加载好了,这样你一敲这个网页就出来了 |
5 koor 2017 年 4 月 14 日 输入时匹配到的第一条会预加载,按下回车之后便直接呈现已经下载完成的页面 |
6 MForever78 2017 年 4 月 14 日 这个真的是 feature... |
7 qiyuey 2017 年 4 月 14 日 改用 POST 请求 |
8 Liang 2017 年 4 月 14 日 这个坑我必须说一下!!! 有个给用户发奖金的操作,因为很少用,所以我一般是写一个接口然后丢上生产环境访问触发一下;然而有一天,我发现给用户发了 2 笔,但我只访问了接口一次,后来测试之后才发现, safari 读出历史记录之后,会在我回车之前,请求一次。。。 钱的教训~ |
9 imherer OP 谢谢各位大佬的回答 |
10 otakustay 2017 年 4 月 14 日 预加载吧……重点是你为什么用 GET 请求写数据 |
11 morethansean 2017 年 4 月 14 日 Chrome 也会预加载. |