发现 Safari 一个 bug(不知道是 feature 还是 bug) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
imherer

发现 Safari 一个 bug(不知道是 feature 还是 bug)

  •  
  •   imherer 2017 年 4 月 14 日 3379 次点击
    这是一个创建于 3299 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天用 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 的请求,和这个无关。

    12 条回复    2017-04-14 18:45:48 +08:00
    RE
        1
    RE  
       2017 年 4 月 14 日   1
    是的, Safari 是有这个 “模糊匹配” 并默认选上的 feature ,一旦回车直接进入模糊匹配的那个 URL ;
    用 iOS 原生输入法,在模糊匹配之后可以删掉后面部分,
    但如果用的是第三方输入法(例如搜狗)是删不掉的,只会是选中状态,要输入其它的字符或空格来替换地址栏的内容
    undeflife
        2
    undeflife  
       2017 年 4 月 14 日   1
    最简单的办法其实是 不要用 get 请求处理写入
    a342191555
        3
    a342191555  
       2017 年 4 月 14 日   1
    safari 偏好设置搜索在后台载入“最常点选”

    GET 请求应该是幂等的
    knightdf
        4
    knightdf  
       2017 年 4 月 14 日   1
    chrome 一样有这个问题,这是是浏览器 prediction 优化特性,会提前加载他认为最匹配的 url ,所以在你敲下去之前其实浏览器就已经把这个页面加载好了,这样你一敲这个网页就出来了
    koor
        5
    koor  
       2017 年 4 月 14 日   1
    输入时匹配到的第一条会预加载,按下回车之后便直接呈现已经下载完成的页面
    MForever78
        6
    MForever78  
       2017 年 4 月 14 日   2
    这个真的是 feature...
    qiyuey
        7
    qiyuey  
       2017 年 4 月 14 日   1
    改用 POST 请求
    Liang
        8
    Liang  
       2017 年 4 月 14 日   1
    这个坑我必须说一下!!!

    有个给用户发奖金的操作,因为很少用,所以我一般是写一个接口然后丢上生产环境访问触发一下;然而有一天,我发现给用户发了 2 笔,但我只访问了接口一次,后来测试之后才发现, safari 读出历史记录之后,会在我回车之前,请求一次。。。

    钱的教训~
    imherer
        9
    imherer  
    OP
       2017 年 4 月 14 日
    谢谢各位大佬的回答
    otakustay
        10
    otakustay  
       2017 年 4 月 14 日
    预加载吧……重点是你为什么用 GET 请求写数据
    morethansean
        11
    morethansean  
       2017 年 4 月 14 日
    Chrome 也会预加载.
    imherer
        12
    imherer  
    OP
       2017 年 4 月 14 日
    @otakustay 确实不应该用 get ,我测个东西为了方便所以就 get 了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2854 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 54ms UTC 12:02 PVG 20:02 LAX 05:02 JFK 08:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86