Как избежать ошибок CORS (не удалось получить или сервер не найден или произошла ошибка) при выполнении запросов из редактора Swagger?

У меня есть следующее определение 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

Я хочу получить 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, я получаю сообщение об ошибке:

ОШИБКА Сервер не найден или произошла ошибка

Что я делаю не так?


person Rudziankoŭ    schedule 18.07.2018    source источник
comment
Какой инструмент вы используете для отправки запроса?   -  person Helen    schedule 18.07.2018
comment
локальный редактор swagger из браузера   -  person Rudziankoŭ    schedule 18.07.2018
comment
Что такое сообщение об ошибке в консоли браузера?   -  person Helen    schedule 18.07.2018
comment
@Helen, No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8081' is therefore not allowed access. Можно как-то это исправить или поиграть с чванством и now.httpbin.org из другого места?   -  person Rudziankoŭ    schedule 18.07.2018


Ответы (1)


В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Таким образом, доступ к источнику 'http://localhost:8081' запрещен.

Это проблема CORS. Сервер по адресу https://now.httpbin.org не поддерживает CORS, поэтому браузеры не позволяют страницы, обслуживаемые из других доменов, для отправки запросов на now.httpbin.org из JavaScript.

У вас есть несколько вариантов:

  • Попросите владельцев https://now.httpbin.org Поддержка CORS.

    Примечание. Сервер не должен требовать аутентификации для предварительных запросов OPTIONS. OPTIONS запросы должны возвращать 200 с соответствующими заголовками CORS.

  • Если вы являетесь владельцем, рассмотрите возможность размещения пользовательского интерфейса Swagger на том же сервере и порту (now.httpbin.org:443), чтобы полностью избежать CORS.

  • Отключите ограничения CORS в своем браузере. Это снижает безопасность браузера, поэтому делайте это только в том случае, если понимаете риски.

  • Используйте SwaggerHub вместо Swagger Editor, чтобы редактировать и тестировать определения API. SwaggerHub проксирует запросы «попробовать» через свои серверы, поэтому на него не распространяются ограничения CORS. (Раскрытие информации: я работаю в компании, которая производит SwaggerHub.)


Кстати, ваше определение ответа недействительно. В ответе отсутствует description, а schema является неправильным (например, содержит дополнительное ключевое слово items). Должен быть:

      responses:
        200:
          description: OK
          schema:
            type: object
            properties:
              now:
                type: object
                properties:
                  rfc2822:
                    type: string
person Helen    schedule 18.07.2018