我正在尝试从其他域连接到我的websocket。服务器位于localhost:8098上,客户端位于localhost:8080上。每次尝试连接时,都会出现“ Access-Control-Allow-Origin”错误,同时还添加了.setAllowedOrigins("*")
。
不确定是否缺少什么。
服务器
@Configuration
@EnableWebSocketMessageBroker
public class webSocketObjects implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws/Object").setAllowedOrigins("*").withSockJS();
}
客户
<script>
let stompClient=null;
import Stomp from 'stompjs';
import SockJS from 'sockjs-client'
export default {
name: "modal",
props: ['node'],
data() {
return{
bacnetObject: '',
status: "disconnected"
}
},
mounted() {
this.bacnetObject = this.node;
},
methods: {
connect: function(){
const socket = new SockJS('http://localhost:8098/ws/Object');
stompClient = Stomp.over(socket);
stompClient.connect({
}, function (frame) {
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/user', console.log(String.body))
})
},
disconnect: function () {
stompClient.disconnect();
}
}
}
</script>
我得到的错误:
源C http://localhost:8098/ws/Object/info?t=1571728150435从源http://localhost:8080对XMLHttpRequest的访问已被CORS策略阻止:所请求的资源上没有'Access-Control-Allow-Origin'标头。
如果使用凭据,根据MDN上的文档,*
将不起作用。尝试改为指定主机。
对于没有凭据的请求,可以将字面值“ *”指定为通配符;该值告诉浏览器允许从任何来源请求代码来访问资源。尝试对凭证使用通配符将导致错误。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
另一方面,有时根据您的情况,可能需要照顾这些标题
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: header1, header2 ...
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Preflighted_requests