Swagger UI 上的 CORS 问题

Yah*_*iya 10 swagger swagger-ui swagger-2.0

有人可以告诉我为什么会出现这些错误。

\n\n
 GET http://127.0.0.1:9000/api-docs/service.json\n\n  200 OK 4ms    swagger-ui.js (line 30261)\n  Unable to Load SwaggerUI  /api-docs/ (line 83)\n  Cross-Origin Request Blocked: The Same Origin Policy disallows \n  reading the remote resource at http://127.0.0.1:9000/api-\n   docs/service.json. This can be fixed by moving the resource to the \n  same domain or enabling CORS.\n  uncaught exception: Can\'t read from server. It may not have the \n appropriate access-control-origin settings.\n
Run Code Online (Sandbox Code Playgroud)\n\n

我正在尝试在端口 9090 上运行 Swagger UI,在 9000 上运行 Swagger API 文档,并尝试在 UI 中显示文档。

\n\n

我已在 API 文档服务器(端口 9000)上添加了 CORS 过滤器,如下所示。

\n\n
 FilterHolder cors = swaggerUIContext.addFilter(CrossOriginFilter.class,"/*",EnumSet.of(DispatcherTyp\xe2\x80\x8c e.REQUEST)); \ncors.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");       \ncors.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_ORIGIN_HEADER, ""); \ncors.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,POST,HEAD"); \n cors.setInitParameter(CrossOriginFilter.ALLOWED_HEADERS_PARAM, "Content-Type, api_key, Authorization"); \n
Run Code Online (Sandbox Code Playgroud)\n\n

firefox V33.0 中的请求和响应标头是

\n\n
 Response Headers\n   Content-Length   428\n   Content-Type application/json\n\n   Request Headers\n     Accept application/json;charset=utf-8,*/*\n     Accept-Encoding    gzip, deflate\n     Accept-Language    en-US,en;q=0.5\n     Connection keep-alive\n     Host   localhost:9000\n    Origin  http://localhost:9090\n    Referer http://localhost:9090/api-docs/\n     User-Agent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:33.0)       \n    Gecko/20100101 Firefox/33.0\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我在服务器上设置 CORS 的方法

\n\n
       final ResourceHandler swaggerUIResourceHandler = new ResourceHandler();\n    swaggerUIResourceHandler.setResourceBase("target/classes/api-docs");\n    final ServletContextHandler swaggerUIContext = new ServletContextHandler();\n    swaggerUIContext.setContextPath("/api-docs");\n    swaggerUIContext.setHandler(swaggerUIResourceHandler);\n\n    FilterHolder cors = swaggerUIContext.addFilter(CrossOriginFilter.class,"/*",EnumSet.of(DispatcherType.REQUEST));\n    cors.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");\n    cors.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_ORIGIN_HEADER, "*");\n    cors.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,POST,HEAD");\n    cors.setInitParameter(CrossOriginFilter.ALLOWED_HEADERS_PARAM, "Content-Type, api_key, Authorization");\n\n    ServletHolder def = new ServletHolder("default", DefaultServlet.class);\n    def.setInitParameter("resourceBase","./http/");\n    def.setInitParameter("dirAllowed","false");\n    swaggerUIContext.addServlet(def,"/");\n\n    HandlerList handlers = new HandlerList();\n\nhandlers.setHandlers(new Handler[] { swaggerUIContext, new DefaultHandler() });\nserver.setHandler(handlers);\n
Run Code Online (Sandbox Code Playgroud)\n

Xav*_*tte 0

我刚刚遇到类似的问题:Swagger UI: HTTP Content-type "application/json" Causes "Unable to Load SwaggerUI"

尝试将 GET service.json 响应的 HTTP Content-type 标头从“application/json”更改为“text/html”,甚至将其删除。我不知道为什么,但它似乎对Swagger UI产生了影响。