我已经部署了一个由lambda函数支持的AWS websocket API网关。我可以从websocketking.com 成功连接并使用websocket服务
当我尝试从我的客户端应用程序(Angular,socket.io v3(连接时,我会收到以下错误:
Access to XMLHttpRequest at 'https://sockets.example.com/socket.io/?EIO=4&transport=polling&t=NRSfmDM' from origin 'http://www.example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
如何配置AWS websocket API网关以支持CORS?
谢谢。
我最初认为它可以用与HTTP API相同的方式完成-通过CLI-https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-cors.html
然而,似乎没有允许WebSocket协议使用CORS的选项。我看到消息An error occurred (BadRequestException) when calling the UpdateApi operation: Cors is not supported for WEBSOCKET protocolType
基于此,我认为目前还不支持WebSocket协议的CORS。
如果这是您的一个选项,您可以为API使用自定义域https://docs.aws.amazon.com/apigateway/latest/developerguide/websocket-api-custom-domain-names.html,这样您的web客户端和API将具有相同的来源。
Milan回答说,AWS Websocket API网关协议不支持CORS,您需要将客户端处理应用程序部署到与Websocket API相同的域。
我发现,如果您在客户端上使用WebSocket API,则不需要指定CORS:https://developer.mozilla.org/en-US/docs/Web/API/WebSocket在您的客户端上。
基本上,WebSocket协议默认情况下不会强制浏览器检查CORS策略:https://www.freecodecamp.org/news/how-to-secure-your-websocket-connections-d0be0996c556/
但从v3开始,socket.io明确要求您启用它们:https://socket.io/docs/v3/handling-cors/