jononomo

jononomo

I’m trying to get websockets working in a non-dev environment and I’m confused about whether I should be using ws:// or wss:// Ideally, I would like my prod environment to mirror my dev environment exactly - with live code reload and no security and so forth.

But for now, I just want to know what setting in my project determines whether I should try to connect to websockets using ws:// or wss://

Also, I’m not sure whether this might be affected by my deployment system, which is convox (praxis) – I think that might force me into https/wss. But long story short - how can I check which one it is? Especially for websockets.

Showing Posts 9 to 1

Azolo

Azolo

ws:// is basically signaling to upgrade an http request, whereas wss:// is signaling to negotiate an ssl connection then upgrade a http request.

Just for clarification, https:// is just signaling to negotiate an ssl then handle an http request.

Are you going to use or force https in production?
If yes, then use wss. If no, then use ws.

Here is the guide to setup ssl on Phoenix if you need a place to look for the settings.

idi527

idi527

Then I guess you can use ws://, because force_ssl is the only option in phoenix that I know of that’s responsible for using https. And according to the RFC [page 17] (or at least to my understanding of it), it’s the only part of the http request that defines which scheme to use, ws or wss.

The “Request-URI” part of the request MUST match the resource name defined in Section 3 (a relative URI) or be an absolute http/https URI that, when parsed, has a resource name, host, and port that match the corresponding ws/wss URI.

jononomo

jononomo OP

ok, thanks - I do not use force_ssl anywhere :slight_smile:

idi527

idi527

If you set :force_ssl flag to true in your endpoint, then I guess it makes cowboy to force ssl during the upgrade callback and you need to use wss://, I might be wrong though.

jononomo

jononomo OP

Yes, my question is - how do I tell which scheme I chose?

idi527

idi527

Then I guess it’s up to you which scheme to use. There might be some restrictions on the backend, though.

jononomo

jononomo OP

@idi527 - sorry, no I don’t need to know how the browser decides – this app I am running does not have a user-facing side. It only exists as a websocket endpoint. I am trying to connect to it from a different domain entirely.

jononomo

jononomo OP

thanks @idi527 - that’s a good tip

idi527

idi527

Do you mean how the browser decides what scheme to use? Maybe this will help https://github.com/phoenixframework/phoenix/blob/master/assets/js/phoenix.js#L625

  # from the link above, in case it changes
  protocol(){ return location.protocol.match(/^https/) ? "wss" : "ws" }

  endPointURL(){
    let uri = Ajax.appendParams(
      Ajax.appendParams(this.endPoint, this.params), {vsn: VSN})
    if(uri.charAt(0) !== "/"){ return uri }
    if(uri.charAt(1) === "/"){ return `${this.protocol()}:${uri}` }

    return `${this.protocol()}://${location.host}${uri}`
  }
— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews