WebSocket Domain User Connection Error

I keep getting this error on my server: [error] Could not check origin for Phoenix.Socket transport.

I have a Phoenix and JS application running on heroku, just fine on myapp.herokuapp.com, which uses feeds.

I followed the instructions of the heroku custom domain and cannot download javascript of my application now after changing my prod.exs configuration to: url: [scheme: "https", host: "myapp.com", port: 443] from: url: [scheme: "https", host: "myapp.herokuapp.com", port: 443]

I get this JS error when visiting the application using myapp.com custom domain:

 WebSocket connection to 'wss://myapp.com/socket/websocket?token=undefined&vsn=1.0.0' failed: Error during WebSocket handshake: Unexpected response code: 400 

accompanying hero magazines:

 2016-11-27T03:27:52.259269+00:00 heroku[router]: at=info method=GET path="/socket/websocket?token=undefined&vsn=1.0.0" host=myapp.com request_id=94bd304b-e8f5-44aa-aff0-9336425e40b3 fwd="2601:602:9301:2b00:3c91:6660:9593:ad2c,2601:0602:9301:2b00:3c91:6660:9593:ad2c,108.162.245.66" dyno=web.1 connect=1ms service=1ms status=400 bytes=119 2016-11-27T03:28:03.671267+00:00 heroku[router]: at=info method=GET path="/socket/websocket?token=undefined&vsn=1.0.0" host=myapp.herokuapp.com request_id=71483e0c-8f2a-4485-8506-5931513de1fb fwd="50.159.116.207" dyno=web.1 connect=0ms service=1ms status=403 bytes=195 2016-11-27T03:28:03.650158+00:00 app[web.1]: 03:28:03.649 [error] Could not check origin for Phoenix.Socket transport. 2016-11-27T03:28:03.650173+00:00 app[web.1]: 2016-11-27T03:28:03.650174+00:00 app[web.1]: This happens when you are attempting a socket connection to 2016-11-27T03:28:03.650175+00:00 app[web.1]: a different host than the one configured in your config/ 2016-11-27T03:28:03.650175+00:00 app[web.1]: files. For example, in development the host is configured 2016-11-27T03:28:03.650176+00:00 app[web.1]: to "localhost" but you may be trying to access it from 2016-11-27T03:28:03.650177+00:00 app[web.1]: "127.0.0.1". To fix this issue, you may either: 2016-11-27T03:28:03.650178+00:00 app[web.1]: 2016-11-27T03:28:03.650178+00:00 app[web.1]: 1. update [url: [host: ...]] to your actual host in the 2016-11-27T03:28:03.650179+00:00 app[web.1]: config file for your current environment (recommended) 2016-11-27T03:28:03.650179+00:00 app[web.1]: 2016-11-27T03:28:03.650180+00:00 app[web.1]: 2. pass the :check_origin option when configuring your 2016-11-27T03:28:03.650180+00:00 app[web.1]: endpoint or when configuring the transport in your 2016-11-27T03:28:03.650181+00:00 app[web.1]: UserSocket module, explicitly outlining which origins 2016-11-27T03:28:03.650182+00:00 app[web.1]: are allowed: 2016-11-27T03:28:03.650182+00:00 app[web.1]: 2016-11-27T03:28:03.650183+00:00 app[web.1]: check_origin: ["https://example.com", 2016-11-27T03:28:03.650184+00:00 app[web.1]: "//another.com:888", "//other.com"] 

When I am at myapp.herokuapp.com, the JS error is slightly different:

 WebSocket connection to 'wss://myapp.herokuapp.com/socket/websocket?token=undefined&vsn=1.0.0' failed: Error during WebSocket handshake: Unexpected response code: 403 

accompanying hero magazines:

 2016-11-27T03:31:31.615163+00:00 heroku[router]: at=info method=GET path="/socket/websocket?token=undefined&vsn=1.0.0" host=myapp.herokuapp.com request_id=d43b57da-6aef-426b-ba69-7706c95ccc6d fwd="50.159.116.207" dyno=web.1 connect=0ms service=1ms status=403 bytes=195 2016-11-27T03:31:31.580305+00:00 app[web.1]: 03:31:31.579 [error] Could not check origin for Phoenix.Socket transport. 2016-11-27T03:31:31.580319+00:00 app[web.1]: 2016-11-27T03:31:31.580320+00:00 app[web.1]: This happens when you are attempting a socket connection to 2016-11-27T03:31:31.580321+00:00 app[web.1]: a different host than the one configured in your config/ 2016-11-27T03:31:31.580322+00:00 app[web.1]: files. For example, in development the host is configured 2016-11-27T03:31:31.580322+00:00 app[web.1]: to "localhost" but you may be trying to access it from 2016-11-27T03:31:31.580323+00:00 app[web.1]: "127.0.0.1". To fix this issue, you may either: 2016-11-27T03:31:31.580324+00:00 app[web.1]: 2016-11-27T03:31:31.580325+00:00 app[web.1]: 1. update [url: [host: ...]] to your actual host in the 2016-11-27T03:31:31.580325+00:00 app[web.1]: config file for your current environment (recommended) 2016-11-27T03:31:31.580326+00:00 app[web.1]: 2016-11-27T03:31:31.580326+00:00 app[web.1]: 2. pass the :check_origin option when configuring your 2016-11-27T03:31:31.580327+00:00 app[web.1]: endpoint or when configuring the transport in your 2016-11-27T03:31:31.580327+00:00 app[web.1]: UserSocket module, explicitly outlining which origins 2016-11-27T03:31:31.580328+00:00 app[web.1]: are allowed: 2016-11-27T03:31:31.580329+00:00 app[web.1]: 2016-11-27T03:31:31.580329+00:00 app[web.1]: check_origin: ["https://example.com", 2016-11-27T03:31:31.580330+00:00 app[web.1]: "//another.com:888", "//other.com"] 

When I save my configuration as url: [scheme: "https", host: "myapp.herokuapp.com", port: 443] , I get no errors when visiting myapp.herokuapp.com, but when I visit myapp.com, I get the following error in the JS console:

 WebSocket connection to 'wss://myapp.com/socket/websocket?token=undefined&vsn=1.0.0' failed: Error during WebSocket handshake: Unexpected response code: 403 

accompanying hero magazines:

 2016-11-27T03:34:55.671996+00:00 heroku[router]: at=info method=GET path="/socket/websocket?token=undefined&vsn=1.0.0" host=myapp.com request_id=ab595797-26ab-4952-ac77-2ab31bf18384 fwd="50.159.116.207,50.159.116.207,108.162.245.248" dyno=web.1 connect=0ms service=1ms status=403 bytes=214 2016-11-27T03:34:55.661334+00:00 app[web.1]: This happens when you are attempting a socket connection to 2016-11-27T03:34:55.661335+00:00 app[web.1]: a different host than the one configured in your config/ 2016-11-27T03:34:55.661321+00:00 app[web.1]: 03:34:55.661 [error] Could not check origin for Phoenix.Socket transport. 2016-11-27T03:34:55.661333+00:00 app[web.1]: 2016-11-27T03:34:55.661347+00:00 app[web.1]: files. For example, in development the host is configured 2016-11-27T03:34:55.661348+00:00 app[web.1]: to "localhost" but you may be trying to access it from 2016-11-27T03:34:55.661349+00:00 app[web.1]: "127.0.0.1". To fix this issue, you may either: 2016-11-27T03:34:55.661350+00:00 app[web.1]: 1. update [url: [host: ...]] to your actual host in the 2016-11-27T03:34:55.661352+00:00 app[web.1]: endpoint or when configuring the transport in your 2016-11-27T03:34:55.661351+00:00 app[web.1]: config file for your current environment (recommended) 2016-11-27T03:34:55.661349+00:00 app[web.1]: 2016-11-27T03:34:55.661351+00:00 app[web.1]: 2016-11-27T03:34:55.661352+00:00 app[web.1]: 2. pass the :check_origin option when configuring your 2016-11-27T03:34:55.661354+00:00 app[web.1]: are allowed: 2016-11-27T03:34:55.661355+00:00 app[web.1]: 2016-11-27T03:34:55.661353+00:00 app[web.1]: UserSocket module, explicitly outlining which origins 2016-11-27T03:34:55.661355+00:00 app[web.1]: check_origin: ["https://example.com", 2016-11-27T03:34:55.661356+00:00 app[web.1]: "//another.com:888", "//other.com"] 

I tried setting check_origin to false, but it does not work. Heroku logs no longer display an error when visiting myapp.com.

 heroku[router]: at=info method=GET path="/socket/websocket?token=undefined&vsn=1.0.0" host=myapp.com request_id=379b61c9-94be-4a1c-ac43-419e9554ac51 fwd="2601:602:9301:2b00:3c91:6660:9593:ad2c,2601:0602:9301:2b00:3c91:6660:9593:ad2c,108.162.245.122" dyno=web.1 connect=1ms service=1ms status=400 bytes=119 

but I still get this in the JS console:

 WebSocket connection to 'wss://myapp.com/socket/websocket?token=undefined&vsn=1.0.0' failed: Error during WebSocket handshake: Unexpected response code: 400 

My complete configuration for the endpoint of my application

 config :my_app, MyApp.Endpoint, http: [port: {:system, "PORT"}], url: [scheme: "https", host: "myapp.com", port: 443], check_origin: false, force_ssl: [rewrite_on: [:x_forwarded_proto]], cache_static_manifest: "priv/static/manifest.json", secret_key_base: System.get_env("SECRET_KEY_BASE") 

edit . Why do I use cloudflare for my dns and have the full ssl option.


change 2 . I can load myapp.com if I save check_origin: false in my configuration and I change the socket.js file from:

 let socket = new Socket("/socket", {params: {token: window.userToken}}) 

in

 let socket = new Socket("wss://myapp.herokuapp.com/socket", {params: {token: window.userToken}}) 

Since I do not want to keep check_origin false, I tried updating it to this:

 url: [scheme: "https", host: "myapp.com", port: 443], check_origin: ["myapp.com", "myapp.herokuapp.com", "//myapp.com", "//myapp.herokuapp.com"], 

After recompiling the application with these new settings, it leaves me with this JS error in the console when I try to visit myapp.com:

 WebSocket connection to 'wss://myapp.herokuapp.com/socket/websocket?token=undefined&vsn=1.0.0' failed: Error during WebSocket handshake: Unexpected response code: 503 
+5
source share
1 answer

The first problem is the use of the hero and cloudflare. This article says that this cannot be done with a custom url, you can only use it with the heroku default url https://support.cloudflare.com/hc/en-us/articles/205893698-Configure- Cloudflare-and-Heroku-over-HTTPS

who said that without using cloudflare I had problems too. What worked for me is to set the check_origin parameter to the full path to the URLs you are accessing. I also used www for me, so my configuration looked like this:

 url: [scheme: "https", host: "myapp.com", port: 443], check_origin: [ "https://myapp.com", "https://www.myapp.com" ], 

(the rest of my configuration is the same as yours)

0
source

Source: https://habr.com/ru/post/1260401/


All Articles