【问题标题】:Does a RESTful API need CORS implementation anytime?RESTful API 是否需要随时实现 CORS?
【发布时间】:2017-05-09 05:40:48
【问题描述】:

我在客户端-服务器项目中为 CORS 实现而苦苦挣扎。 CORS 意味着,仅当标头包含 CORS 值时才允许来自其他来源(例如其他域)的调用。

因此,例如,如果我在 www.domain.com 上托管一个网站并在同一个域上调用一个 RESTful API,那么一切都很好。

但是,例如,如果我为移动应用程序开发 API,则移动设备没有相同的 API 域。这怎么可能一起工作?我是否每次都需要在我的服务中实现 CORS?

问题出现了,因为我开发了一个 Angular 2 应用程序,它在 localhost:4200 上的 dev 中运行,而我的 API 在 localhost:8080 上运行(使用 Spring Boot 构建)。所以客户端抛出异常,因为它不是同一个来源(不同的端口)。

目标是将我的 API 托管在互联网某处的根服务器上,并将客户端托管在不同的网络空间提供商上(因为它只是一个页面应用程序)。 api 使用http://1.2.3.4:8080/api/v1 运行,客户端使用http://www.example.com:80/myPage 运行

那么,我需要每次都实现跨域吗?还是有其他方法可以实现?

【问题讨论】:

  • 是的,如果您在不同的域上运行 Angular 2 应用程序,则服务器需要支持 CORS。幸运的是,使用 Spring Boot 很容易:spring.io/guides/gs/rest-service-cors
  • @jonrsharpe 感谢您的链接!但为什么移动设备不是不同的来源?
  • @Surras 因为 CORS 是一种浏览器检查,所以您的手机没有使用浏览器来呈现您的应用,至少不是完整的。
  • @jonrsharpe 啊,解释一下 :) 谢谢!您能发布一个答案,以便我将其标记为答案吗?

标签: rest api angular cors


【解决方案1】:

是的,如果您正在开发 API 并希望将其公开并希望移动用户或其他网站消费者使用它,您应该始终为任何网站设置 CORS(*)。在这里你可以阅读更多信息:

https://spring.io/understanding/CORS

编辑: 此链接有效: https://auth0.com/blog/cors-tutorial-a-guide-to-cross-origin-resource-sharing/

【讨论】:

  • 链接已损坏。
【解决方案2】:

出于安全考虑,浏览器会强制执行同源策略,即在网页中运行的脚本(通常是 AJAX 调用)无法访问位于不同域中的另一个页面的数据。在某些情况下,这可能是限制性的。 CORS(跨源资源共享)是大多数现代浏览器支持的 W3C 规范,用于指定何时允许跨源请求是安全的。

在 Spring Boot 中,启用 CORS 就像 adding the @CrossOrigin annotation 一样简单。可以在方法级别添加此注释以仅启用该特定请求映射或在类级别添加以启用整个控制器。

您可以通过在注释中添加“origins”属性来列出允许的域和端口。如果未指定,则默认允许所有来源(出于安全原因,最好避免这种情况)。

以下是在控制器级别为 example.com 域和端口 80 启用 CORS 的示例

@CrossOrigin(origins = "http://www.example.com:80")
@RestController
@RequestMapping("/yourmapping")
public class YourController {

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 2015-07-15
    • 2019-06-06
    • 2012-01-06
    • 1970-01-01
    • 2014-05-10
    • 2019-07-24
    相关资源
    最近更新 更多