从Swagger编辑器发出请求时,如何避免CORS错误(“无法获取”或“找不到服务器或发生错误”)?

时间:2018-07-18 16:57:07

标签: cors swagger swagger-ui openapi swagger-editor

我具有以下OpenAPI定义:

swagger: "2.0"

info:
  version: 1.0.0
  title: Simple API
  description: A simple API to learn how to write OpenAPI Specification

schemes:
  - https
host: now.httpbin.org
paths:
  /:
    get:
      summary: Get date in rfc2822 format
      responses:
        200:
          schema:
            type: object
            items:
              properties:
                now:
                  type: object
                    rfc2822:
                      type: string

我想从response中检索rfc2822

{"now": {"epoch": 1531932335.0632613, "slang_date": "today", "slang_time": "now", "iso8601": "2018-07-18T16:45:35.063261Z", "rfc2822": "Wed, 18 Jul 2018 16:45:35 GMT", "rfc3339": "2018-07-18T16:45:35.06Z"}, "urls": ["/", "/docs", "/when/:human-timestamp", "/parse/:machine-timestamp"]}  

但是当我从Swagger编辑器发出请求时,出现错误:

  

找不到错误服务器或发生错误

我在做什么错了?

1 个答案:

答案 0 :(得分:2)

  

所请求的资源上没有“ Access-Control-Allow-Origin”标头。因此,不允许访问来源“ http://localhost:8081”。

这是一个CORS问题。 https://now.httpbin.org上的服务器不支持CORS,因此浏览器将不允许其他域提供的网页通过JavaScript向now.httpbin.org发出请求。

您有几种选择:

  • 询问https://now.httpbin.orgsupport CORS的所有者。

    注意:服务器不得对预检OPTIONS请求进行身份验证。 OPTIONS请求应返回200,带有正确的CORS标头。

  • 如果您是所有者,请考虑将Swagger UI托管在同一服务器和端口(现在为httpbin.org:443)上,以完全避免CORS。

  • 在浏览器中禁用CORS限制。 这会降低浏览器的安全性,因此只有在您了解风险之后才能这样做。

  • 使用SwaggerHub而不是Swagger编辑器来编辑和测试您的API定义。 SwaggerHub代理通过其服务器“尝试”请求,因此不受CORS限制。 (披露:我为SwaggerHub的公司工作。)


顺便说一句,您的响应定义无效。响应缺少description,并且schema错误(例如,具有额外的items关键字)。应该是:

      responses:
        200:
          description: OK
          schema:
            type: object
            properties:
              now:
                type: object
                properties:
                  rfc2822:
                    type: string