跳到内容

CORS

CORS 是一种防止网站使用您的个人数据进行恶意操作的技术。 大多数浏览器 + JavaScript 工具包不仅支持 CORS,而且还强制执行它,这对支持 Swagger 的 API 服务器有影响。

您可以在这里阅读有关 CORS 的信息:http://www.w3.org/TR/cors

在以下两种情况下,无需采取任何措施来支持 CORS

  1. Swagger UI 与应用程序本身托管在同一服务器上(同一主机端口)。
  2. 应用程序位于启用所需 CORS 标头的代理后面。这可能已在您的组织内涵盖。

否则,需要为以下内容启用 CORS 支持

  1. 您的 Swagger 文档。对于 Swagger 2.0,它是 swagger.json/swagger.yaml 和任何外部 $ref 引用的文档。
  2. 为了使 立即试用 按钮工作,还需要在您的 API 端点上启用 CORS。

测试 CORS 支持

您可以使用以下三种技术之一验证 CORS 支持

  • 使用 Curl 访问您的 API 并检查标头。例如
终端窗口
1
$ curl -I "https://petstore.swagger.io/v2/swagger.json"
2
HTTP/1.1 200 OK
3
Date: Sat, 31 Jan 2015 23:05:44 GMT
4
Access-Control-Allow-Origin: *
5
Access-Control-Allow-Methods: GET, POST, DELETE, PUT, PATCH, OPTIONS
6
Access-Control-Allow-Headers: Content-Type, api_key, Authorization
7
Content-Type: application/json
8
Content-Length: 0

这告诉我们 petstore 资源列表支持 OPTIONS,以及以下标头:Content-Typeapi_keyAuthorization

  • 从您的文件系统试用 Swagger UI 并查看调试控制台。 如果未启用 CORS,您将看到如下内容
1
XMLHttpRequest cannot load http://sad.server.com/v2/api-docs. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

Swagger UI 无法轻易显示此错误状态。

  • 使用 https://www.test-cors.org 网站验证 CORS 支持。请记住,即使 Access-Control-Allow-Headers 不可用,这仍然是 Swagger UI 正常工作所必需的,此操作也会显示成功的结果。

启用 CORS

启用 CORS 的方法取决于您用于托管应用程序的服务器和/或框架。 https://enable-cors.org 提供了有关如何在一些常见 Web 服务器中启用 CORS 的信息。

其他服务器/框架可能会为您提供有关如何在他们的用例中专门启用它的信息。

CORS 和标头参数

Swagger UI 允许您轻松地将标头作为参数发送到请求。这些标头的名称必须也在您的 CORS 配置中得到支持。根据我们上面的示例

1
Access-Control-Allow-Headers: Content-Type, api_key, Authorization

只有具有这些名称的标头才允许由 Swagger UI 发送。