为啥在 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 请求的主要内容,如果未能解决你的问题,请参考以下文章
带有“@”的 HttpClient 访问 url(在符号处)
为啥 Spring Boot 由于 URL 未规范化而拒绝 GET 请求? [复制]
jQuery中的getJSON方法的url参数中,为啥加上callback=
当我使用 Mock Service Worker 测试两个 get 请求时,为啥 req.url.searchParams 参数对象为空?