"Cross origin requests are only supported for HTTP." error when loading a local file
I'm trying to load a 3D model into Three.js with JSONLoader
, and that 3D model is in the same directory as the entire website.
I'm getting the "Cross origin requests are only supported for HTTP."
error, but I don't know what's causing it nor how to fix it.
Solution 1:
My crystal ball says that you are loading the model using either file://
or C:/
, which stays true to the error message as they are not http://
So you can either install a webserver in your local PC or upload the model somewhere else and use jsonp
and change the url to http://example.com/path/to/model
Origin is defined in RFC-6454 as
...they have the same
scheme, host, and port. (See Section 4 for full details.)
So even though your file originates from the same host (localhost
), but as long as the scheme is different (http
/ file
), they are treated as different origin.
Solution 2:
Just to be explicit - Yes, the error is saying you cannot point your browser directly at file://some/path/some.html
Here are some options to quickly spin up a local web server to let your browser render local files
Python 2
If you have Python installed...
Change directory into the folder where your file
some.html
or file(s) exist using the commandcd /path/to/your/folder
Start up a Python web server using the command
python -m SimpleHTTPServer
This will start a web server to host your entire directory listing at http://localhost:8000
- You can use a custom port
python -m SimpleHTTPServer 9000
giving you link:http://localhost:9000
This approach is built in to any Python installation.
Python 3
Do the same steps, but use the following command instead python3 -m http.server
Node.js
Alternatively, if you demand a more responsive setup and already use nodejs...
Install
http-server
by typingnpm install -g http-server
Change into your working directory, where your
some.html
livesStart your http server by issuing
http-server -c-1
This spins up a Node.js httpd which serves the files in your directory as static files accessible from http://localhost:8080
Ruby
If your preferred language is Ruby ... the Ruby Gods say this works as well:
ruby -run -e httpd . -p 8080
PHP
Of course PHP also has its solution.
php -S localhost:8000
Solution 3:
In Chrome you can use this flag:
--allow-file-access-from-files
Read more here.