XMLHttpRequest 跨域请求(Cross Origin Request)错误

2017-03-03 16:17:52 +08:00
 HanningWu

同样的 JavaScript 脚本文件,在我的 macOS 终端下用 PhantomJS 能正常发送请求;放到另一台同样安装了 PhantomJS 的 Ubuntu 16.04 系统下就出现这个错误

XMLHttpRequest cannot load https://[website].com Cross Origin Requests are not supported.

Google 了一下,有许多人出现了非常类似但是不完全相同的错误,比如

  1. XMLHttpRequest cannot load https://[website].com Cross origin requests are only supported for HTTP
  2. XMLHttpRequest cannot load https://www.[website].com/ No 'Access-Control-Allow-Origin' header is present on the requested resource.

以上这两种错误前部分与我的是一样的,但是后半部分加粗的信息不同。 尤其是第 2 条,我添加了 Access-Control-Allow-Origin 这个 header 到我的请求头中,我的错误仍然会出现。

不知道有没有有 V 友能帮忙找一下原因。

4753 次点击
所在节点    JavaScript
29 条回复
HanningWu
2017-03-03 20:46:45 +08:00
@dhssingle 可我用的是 phantomjs 不是浏览器,连 UserAgent 都没设置。
aleen42
2017-03-03 23:37:42 +08:00
理论上来说, XHR 会受同源限制,不能进行跨域请求
HanningWu
2017-03-04 01:55:19 +08:00
@aleen42 macOS 下使用 phantomjs 的`--web-security=no`选项可以跨过同源限制。
kingze1992
2017-03-04 09:21:21 +08:00
试试这个
http://stackoverflow.com/questions/12021578/phantomjs-failing-to-open-https-site
--ignore-ssl-errors
我感觉是 https 的原因
surfire91
2017-03-06 14:01:29 +08:00
@HanningWu
我拿了你 4 楼的代码试了下,可用。需要加 --web-security=no ,环境是 centos
./phantomjs --web-security=no /tmp/myfile.js
surfire91
2017-03-06 14:01:56 +08:00
@HanningWu
./phantomjs -v
2.1.1
HanningWu
2017-03-06 14:33:14 +08:00
@surfire91 这个 web security flag 我设置为 no 了,但在 ubuntu 下仍然给出相同的错误。 ubunu 系统是不是有毒啊!后来我放弃了 ubuntu ,重装了 windows 系统,然后用 cygwin 来跑 Linux shell 脚本。
HanningWu
2017-03-06 14:34:48 +08:00
@surfire91 我到 Linux StackExchange 问一下,也无人可解,不知道这是 Ubuntu 的原因还是 16.04 这一个版本原因,总之我放弃了。不过还是非常感谢你的帮助。
HanningWu
2017-03-06 14:36:56 +08:00
@kingze1992 这个 flag 我设置过,没有效果。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/344666

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX