我正在创建一个Vapor服务器,但是当没有按下enter时,它正在处理URL中的GET请求。请参阅下面的示例:
假设我有代码get('hello')
,无论何时输入,它都会以json
格式返回hello world。
如果我要运行Vapor服务器,请键入localhost:8080/hello
,然后在我的浏览器中按Enter键,它将返回{"hello":"world"}
,它按预期工作。在控制台上,它将打印GET /hello
,它按预期工作。但是,如果我要从URL清除hello,我会localhost:8080/
输出为空,将GET /
打印到控制台。如果我要将h追加到localhost:8080/h
,则该网址将自动填充到localhost:8080/hello
,因为我之前输入了它,将GET /hello
打印到控制台,然后我按下了输入URL。
每当我在URL中输入文本时,它都会向Vapor服务器发送请求并处理请求 - 即使我没有按Enter键发送请求。
为什么这样做,以及如何防止这种情况?
答案 0 :(得分:2)
Safari(可能还有其他一些浏览器)使用预取功能。请参阅Safari首选项的“搜索”部分中的“在后台预加载热门命中”。如果启用,您的浏览器将在不同时间发送GET
个请求,而您甚至不知道它。
您无法在广阔的世界中阻止此行为,因此您需要为此进行规划。 GET
个端点不应该执行任何重要工作,也不应更改任何模型状态。将这些类型的端点置于动词POST
之后。