默认情况下,哪些客户端可以/不能访问 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 服务?的主要内容,如果未能解决你的问题,请参考以下文章
centos7中nginx在打开firewall的情况下能不能用ip地址访问?
默认情况下可与大多数防火墙一起使用的 Websocket 配置