browserify / http-browserify

node's http module, but for the browser
MIT License
244 stars 110 forks source link

Default protocol is inconsistent with Node's. #96

Open recursify opened 8 years ago

recursify commented 8 years ago

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.

zallek commented 8 years ago

+1

pmantaj commented 8 years ago

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.