我正在创建一个 Vapor 服务器,但当未按下 Enter 键时,它正在处理 URL 中的 GET 请求。请参阅下面的示例:
假设我有代码 get('hello')
,每当输入它时,它都会在 json
中返回 hello world格式。
如果我要运行 Vapor 服务器,请输入 localhost:8080/hello
,然后在浏览器中按回车键,它将返回 {"hello":"world"}
,按预期工作。在控制台上,它将打印 GET /hello
,按预期工作。但是,如果我要从 URL 中清除 hello,我会得到 localhost:8080/
输出将为空,打印 GET /
到控制台。如果我将 h 附加到此: localhost:8080/h
,那么 URL 将自动补全为 localhost:8080/hello
因为我输入较早,打印 GET /hello
在我按下 URL 中的 Enter 键之前,到控制台。
每当我在 URL 中输入文本时,它都会向 Vapor 服务器发送请求并处理该请求 - 即使我不按 Enter 键发送请求。
为什么要这样做,如何防止这种情况发生?
最佳答案
Safari(可能还有其他一些浏览器)使用预取功能。请参阅 Safari 偏好设置的“搜索”部分中的“在后台预加载热门命中”。如果启用,您的浏览器将在您不知情的情况下多次发送 GET
请求。
您无法在广阔的世界中阻止这种行为,因此您需要为此做好计划。 GET
端点不应执行任何重要工作,或更改任何模型状态。将这些类型的端点放在诸如 POST
之类的动词后面。
关于swift - 为什么在 URL 中处理 Vapor GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46186649/