http-browserify icon indicating copy to clipboard operation
http-browserify copied to clipboard

Default protocol is inconsistent with Node's.

Open recursify opened this issue 10 years ago • 2 comments

If not specified, http-browserify sets the protocol to window.location.protocol. This differs from the behavior of Node (see https://nodejs.org/api/http.html#http_http_request_options_callback ). I assume the reasoning was to make https requests if the current location is also https (but I could be wrong here).

Does it make sense to mimic Node's behavior exactly, and just default to http: ?

The issue I'm running into is when running a script locally in the browser, so the protocol is "file:". http-browserify then tries to make file:// requests, which obviously fail.

recursify avatar Oct 29 '15 01:10 recursify

+1

zallek avatar Feb 21 '16 23:02 zallek

I experienced the same problem. I think that http-browserify sets the protocol to window.location.protocol in any case. I tried to call a request to my API, eg. http://<hostname>/api, so I specified the HTTP protocol and http-browserify still tries to send the request to file://<hostname>/api. The reason is that in the lib/request.js file URI is composed from scratch. Take a look:

    self.uri = (params.protocol || 'http:') + '//'
        + params.host
        + (params.port ? ':' + params.port : '')
        + (params.path || '/')
    ;

In my case, it does not work. I need the same URI that I put to a request method. I fixed it by adding a below line after code that I've posted above:

if (params.href !== 'undefined' && params.protocol === 'file:') self.uri = params.href;

It resolved a few problems in my project but I am not sure is this change will not cause breaking a code in another scenario.

pmantaj avatar Sep 24 '16 10:09 pmantaj