默认情况下,哪些客户端可以/不能访问 RESTful Web 服务?

Posted

技术标签:

【中文标题】默认情况下,哪些客户端可以/不能访问 RESTful Web 服务?【英文标题】:What clients can / can't access a RESTful web service by default? 【发布时间】:2014-09-27 09:30:46 【问题描述】:

我目前正在开发一个 API,该 API 将在几周内投入生产。我对 REST 比较陌生,开始阅读 CORS - 并意识到它可能会影响我。

REST 服务可以被客户端访问的条件是什么?我一直在同一台服务器上使用示例 html/js,并通过 Postman(谷歌浏览器插件)访问我的 API。到目前为止,我没有遇到任何问题。

API 上线后,将托管在“api.myserver.com”。一开始,请求将来自“app.myOTHERserver.com”。如果我不使用 JSONP 等对 CORS 友好的方法或允许我的域的特殊“访问控制”标头,这些请求会被拒绝吗?

如何从其他非浏览器客户端访问 REST API?比如 C# 应用程序?默认情况下是否允许这些请求?

假设我确实需要在服务器端添加“访问控制”标头,以便在我的 API 上线时允许上述场景,让您的 Web 服务器(在我的例子中为 nginx)更好(性能方面)处理标题,还是应该通过 php 或 NodeJS 添加它们?

【问题讨论】:

这个范围很广。您是否有一个集成环境,可用于实际 FQDN,您的 API 已部署到该环境?如果没有,我建议您研究一下——这正是集成环境在测试中的用途。 这是真的,我也这样做了——尽管它还没有完全准备好。我只是想事先做一些腿部工作 【参考方案1】:

API 上线后,将托管在“api.myserver.com”。 一开始,请求将来自“app.myOTHERserver.com”。 如果我不使用对 CORS 友好的方法,这些请求会被拒绝吗 像 JSONP 或允许我的域的特殊“访问控制”标头?

您可以指定哪些客户端可以访问您的网络服务以进行扩展。假设您使用的是 Express:How to allow CORS?

【讨论】:

【参考方案2】:

这更多是关于网络浏览器应用的same-origin policy,而不是一般的 RESTful API。

如果您的 API 旨在供部署在与 API 不同的源主机/端口上的 Web 应用程序使用,那么您有以下选择:

    使用允许CORS 等技术发挥作用的适当标头进行响应。 让提供 Web 内容的 Web 服务器(在您的示例中为 app.myOTHERserver.com)也通过将您的 API 请求从 Web 服务器代理到 API 服务器来处理您的 REST API 请求。例如,您可以让您的 API 在 URL /api 下的 Web 服务器上公开,然后只需设置一个 Web 代理配置,将该 URL 下的请求转发到您的 API 服务器。 使用 JSONP 或其他技术。

如果您的 API 将被非 Web 应用程序使用,您无需担心。这只是浏览器在运行 javascript 代码时应用的限制,以确保用户没有无意中点击了一个网络钓鱼链接,其中包含一些试图将他们的 PayPal 密码发送到平壤的黑客。

【讨论】:

谢谢。这就是我一直在寻找的,并且似乎并没有太宽泛。您是否认为在性能方面,通过 Web 服务器在响应标头(或任何地方)中添加已批准的域比通过我的应用程序编写的语言执行此操作更好? 我敢打赌,性能差异可以忽略不计。一个更重要的问题是让您决定哪里最适合您的需求。如果它在您的代码中,那么您可以放心地切换 Web 服务器技术,但 DevOps 可能更难通过强制重新编译应用程序代码来重新配置其行为。

以上是关于默认情况下,哪些客户端可以/不能访问 RESTful Web 服务?的主要内容,如果未能解决你的问题,请参考以下文章

linux 文件都有哪些特殊权限

centos7中nginx在打开firewall的情况下能不能用ip地址访问?

默认情况下可与大多数防火墙一起使用的 Websocket 配置

c++ 默认移动赋值不能访问受保护的基成员

Linux配置FTP(vsftpd)服务和无法上传下载问题解决

dockertoolbox在没网情况下打开