桌面应用程序是不是需要 HTTP 预检请求?

Posted

技术标签:

【中文标题】桌面应用程序是不是需要 HTTP 预检请求?【英文标题】:Do Desktop apps need HTTP preflight requests?桌面应用程序是否需要 HTTP 预检请求? 【发布时间】:2020-04-18 23:34:38 【问题描述】:

我正在开发一个需要从第三方 API 获取信息的应用。我一直在用 Vuejs 将它开发成一个 Web 应用程序。对于我尝试使用 axios、jquery 和 fetch API 的请求,但我在预检请求时遇到问题,似乎 API 没有正确处理 OPTIONS 请求并且它抛出了 405 错误(我做了一个 GET通过 Postman 在同一个 url 上请求,它工作正常,我还在 firefox 网络面板上编辑了一个 OPTIONS 请求成为一个 GET 请求,它返回了 200 状态)。 现在我正在考虑放弃 Web 应用程序的想法并将其作为桌面应用程序工作,但我需要知道预检请求是否也会成为此类应用程序的默认行为。 感谢您的关注!

【问题讨论】:

【参考方案1】:

不,CORS 预检请求是由浏览器发出的,并且由于浏览器安全模型是必需的。它们不会被桌面应用程序使用。

您可以使用 curl、postman 等轻松地对此进行测试。听起来您已经尝试过了,但您描述的细节已被取消。不要将任何内容更改为GET。使用您尝试发出的实际请求,但在浏览器上下文之外进行。如果 API 响应正确,那么它应该可以在桌面应用程序中运行。

【讨论】:

谢谢,实际上我试图提出的请求是 GET 请求。我也已经在邮递员中对其进行了测试。所以谢谢你的帮助! =) @Akelesis:但GET 请求永远不会触发预检。所以我不确定你为什么担心GET 请求。请注意,浏览器会为您处理预检,您无需自己制作OPTIONS 请求。 是的,问题只是……我有一个带有自定义标头的跨源 GET 请求,当我使用邮递员联系 API 时,它运行顺利,但是当我通过浏览器尝试时它触发了一个 OPTIONS 请求,似乎 URL 无法处理这种请求,并且给了我一个 405 错误。起初我认为提供错误的标头是我的错,然后我在Firefox中测试了将请求的类型编辑为GET并重新发送它并被接受。所以,我断定这是来自浏览器的预检请求有问题。

以上是关于桌面应用程序是不是需要 HTTP 预检请求?的主要内容,如果未能解决你的问题,请参考以下文章

无法调用我的 api 抛出错误不允许需要预检的跨域请求

从 C# 桌面应用程序到受 Siteminder 保护的服务器的 HTTP 请求

.NET 桌面客户端应用程序:套接字还是 HTTP 请求? [关闭]

Angular CORS 简单请求在 POST 中触发带有 Authorization 标头的预检

为啥跨域 HEAD 请求需要预检?

关于netbeans和java桌面程序开发