如何从 Javascript 设置 WebSocket Origin Header?

Mil*_*les 1 javascript cross-domain websocket

我正在尝试使用 javascript 从本地test.dev页面向在 ip123.123.123.123上运行的服务器发出 websocket 请求test.com。请求通过了,但123.123.123.123服务器看到了Origin: test.devwebsocket 请求中的标头并拒绝连接,因为它想看到Origin: test.com.

这是连接套接字的javascript代码:

ws = new WebSocket("123.123.123.123");

如何使用 javascript 启动带有不诚实Origin标头的websocket 连接Origin: test.com

我希望这样的事情会奏效,但我找不到任何这样的:

ws = new WebSocket("123.123.123.123", "test.com");

Mar*_*cny 5

简单的解决方案是简单地在hosts文件中创建一个条目以映射test.com123.123.123.123. 当您想连接“真实”时,您需要稍后删除此条目test.com

一个不太麻烦的解决方案需要使用代理,它可以即时为您重写您的标头。考虑nginx在您的系统上安装,然后代理请求以123.123.123.123保持Origin 标头之外的所有内容相同。这是您在 nginx 配置文件中需要的条目:

server {
    server_name test.dev;

    location / {
        proxy_pass http://123.123.123.123;
        proxy_set_header Origin test.com;

        # the following 3 are required to proxy WebSocket connections.
        # See more here: http://nginx.com/blog/websocket-nginx/

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
Run Code Online (Sandbox Code Playgroud)