为啥在 URL 中处理 Vapor GET 请求

Posted

技术标签:

【中文标题】为啥在 URL 中处理 Vapor GET 请求【英文标题】:Why are Vapor GET requests being processed in the URL为什么在 URL 中处理 Vapor GET 请求 【发布时间】:2017-09-12 23:24:54 【问题描述】:

我正在创建一个 Vapor 服务器,但它正在处理 URL 中的 GET 请求,此时未按下 Enter。请参阅下面的示例:

假设我有代码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,因为我之前输入了它,在我按下输入 URL 之前将 GET /hello 打印到控制台。

每当我在 URL 中输入文本时,它都会向 Vapor 服务器发送一个请求,并处理该请求——即使我没有按 Enter 键来发送请求。

为什么要这样做,如何预防?

【问题讨论】:

【参考方案1】:

Safari(可能还有其他一些浏览器)使用预取功能。请参阅 Safari 偏好设置的“搜索”部分中的“在后台预加载热门歌曲”。如果启用,您的浏览器将在不同时间发送GET 请求,而您甚至都不知道。

您无法在广阔的世界中阻止这种行为,因此您需要为此做好计划。 GET 端点不应该做任何重要的工作,或者改变任何模型状态。将这些端点放在像POST 这样的动词后面。

【讨论】:

我猜测试 GET 请求的最佳方法是使用特定程序(例如 Postman)来测试 - 因为只有我的应用程序会向云上的服务器发送请求。

以上是关于为啥在 URL 中处理 Vapor GET 请求的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Vapor 3 处理多部分请求

带有“@”的 HttpClient 访问 url(在符号处)

为啥 Spring Boot 由于 URL 未规范化而拒绝 GET 请求? [复制]

jQuery中的getJSON方法的url参数中,为啥加上callback=

当我使用 Mock Service Worker 测试两个 get 请求时,为啥 req.url.searchParams 参数对象为空?

为啥HttpClient请求返回400,URL请求返回302正常