Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CORS Error: “requests are only supported for protocol schemes: http…” etc

I am trying to run a simple application. I have an Express backend which returns a JSON string when visited at localhost:4201/ticker. When I run the server and make a request to this link from my Angular Service over http, I get the following error:

XMLHttpRequest cannot load localhost:4201/ticker. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

I read the following article: Understanding and Using CORS and as stated, used the cors module with my express server. However, I am still getting the error as given above. Part of code is given below:

Server code:

private constructor(baseUrl: string, port: number) {     this._baseUrl = baseUrl;     this._port = port;     this._express = Express();     this._express.use(Cors());     this._handlers = {};     this._hInstance = new Handlers();     this.initHandlers();     this.initExpress(); } private initHandlers(): void {     // define all the routes here and map to handlers     this._handlers['ticker'] = this._hInstance.ticker; } private initExpress(): void {     Object.keys(this._handlers)         .forEach((key) => {             this._express.route(this._url(key))                 .get(this._handlers[key]);         }); } private _url(k: string): string {     return '/' + k; } 

Here is the handler function:

ticker(req: Request, res: Response): void {     Handlers._poloniex         .getTicker()         .then((d) => {             return Filters.tickerFilter(d, Handlers._poloniex.getBases());         })         .then((fdata) => {              //res.header('Access-Control-Allow-Origin', "*");             //res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");             res.header('Content-Type', 'application/json');             res.send(JSON.stringify(fdata));         })         .catch((err) => {            this._logger.log([                 'Error: ' + err.toString(),                 'File: ' + 'handlers.class.ts',                 'Method: ' + 'ticker'             ], true);         });    } 

Here is my Angular Service:

export class LiveTickerService {    private _baseUrl: string;   private _endpoints: {[key:string]: string};    constructor(     private _http: Http   ) {     this._baseUrl = 'localhost:4201/';      this._endpoints = {        'ticker': 'ticker'      };    }    getTickerData(): Observable<Response> {     return this._http.get(this._baseUrl + this._endpoints['ticker'])       .map(resp => resp.json())   }  } 

Here is how I am using my Service:

getTicker() {   let a = new Array<{[key: string]: any}>();   this._tickerService.getTickerData()      .subscribe(         data => {           let parsed = JSON.parse(JSON.stringify(data));           Object.keys(parsed)             .forEach((k) => {               a.push({k: parsed[k]});             });          this.data = a;         },         error => console.log(error.toString()),         () => console.log('Finished fetching ticker data')       );   return this.data; } 
like image 573
Abrar Hossain Avatar asked Sep 16 '17 21:09

Abrar Hossain


People also ask

How do I fix cross origin requests are only supported for protocol schemes?

Just change the url to http://localhost instead of localhost . If you open the html file from local, you should create a local server to serve that html file, the simplest way is using Web Server for Chrome . That will fix the issue.

Does CORS work with https?

CORS requests may only use the HTTP or HTTPS URL scheme, but the URL specified by the request is of a different type. This often occurs if the URL specifies a local file, using the file:/// scheme.

How do I fix CORS request not HTTP?

Reason: CORS request not HTTP This often occurs if the URL specifies a local file, using a file:/// URL. To fix this problem, make sure you use HTTPS URLs when issuing requests involving CORS, such as XMLHttpRequest , Fetch APIs, Web Fonts ( @font-face ), and WebGL textures, and XSL stylesheets.

What are CORS errors?

The CORS behavior, commonly termed as CORS error, is a mechanism to restrict users from accessing shared resources. This is not an error but a security measure to secure users or the website which you are accessing from a potential security bleach.


1 Answers

XMLHttpRequest cannot load localhost:4201/ticker. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

Any time you see that “only supported for protocol schemes” message, it almost certainly means you’ve just forgotten to put the https or http on the request URL in your code.

So in this case, the fix is to use the URL http://localhost:4201/ticker in your code here:

this._baseUrl = 'http://localhost:4201/'; 

…because without the http:// there, localhost:4201/ticker isn’t really the URL you intend.

like image 124
sideshowbarker Avatar answered Sep 24 '22 02:09

sideshowbarker