提问者:小点点

“只有HTTP支持跨源请求。”加载本地文件时出错


我试图用JSONLoader将一个3D模型加载到Three.js中,该3D模型与整个网站位于同一个目录中。

我收到“Cross origin requests are only supported for HTTP.”错误,但我不知道是什么原因导致的,也不知道如何修复它。


共3个答案

匿名用户

My crystal ball表示您正在使用file://c:/加载模型,这与错误消息保持一致,因为它们不是http://

因此您可以在本地PC中安装Web服务器,或者将模型上载到其他地方,使用jsonp并将url更改为http://example.com/path/to/model

在RFC-6454中,原产地定义为

   ...they have the same
   scheme, host, and port.  (See Section 4 for full details.)

因此,即使您的文件源自同一主机(localhost),但只要方案不同(http/file),它们也被视为不同的来源。

匿名用户

明确地说-是的,错误是说您不能将浏览器直接指向文件://some/path/some.html

以下是一些选项,可以快速调整本地web服务器,让浏览器呈现本地文件

如果您安装了Python.。。

>

  • 使用命令cd/path/to/your/folder将目录更改为文件some.html或文件所在的文件夹

    使用命令python-m simplehttpserver启动Python web服务器

    这将启动web服务器,在http://localhost:8000中托管整个目录列表

    任何Python安装都内置了这种方法。

    执行相同的步骤,但使用以下命令python3-M http.server

    或者,如果您需要响应更快的设置,并且已经使用了NodeJS.。。

    >

  • 通过键入npm install-g http-server安装http-server

    切换到您的工作目录中,您的some.html位于该目录中

    通过发出http-server-c-1启动http服务器

    这将生成一个node.js httpd,它将目录中的文件作为静态文件提供服务,可从http://localhost:8080访问

    如果您更喜欢的语言是Ruby.。。Ruby之神说这也是可行的:

    ruby -run -e httpd . -p 8080
    

    当然PHP也有它的解决方案。

    php -S localhost:8000
    

  • 匿名用户

    在Chrome中,您可以使用此标志:

    --allow-file-access-from-files
    

    在这里阅读更多。