
同样的 Javascript 脚本文件,在我的 macOS 终端下用 PhantomJS 能正常发送请求;放到另一台同样安装了 PhantomJS 的 Ubuntu 16.04 系统下就出现这个错误
XMLHttpRequest cannot load https://[website].com Cross Origin Requests are not supported.
Google 了一下,有许多人出现了非常类似但是不完全相同的错误,比如
以上这两种错误前部分与我的是一样的,但是后半部分加粗的信息不同。 尤其是第 2 条,我添加了 Access-Control-Allow-Origin 这个 header 到我的请求头中,我的错误仍然会出现。
不知道有没有有 V 友能帮忙找一下原因。
1 momocraft Mar 3, 2017 可以看一下 mdn 的 CORS 那页 |
2 surfire91 Mar 3, 2017 把 Request 和 Response 都贴下 |
3 mogita Mar 3, 2017 via iPhone Allow origin 头不是请求方加的,是响应方加的。如 1 楼看看 cors 文档或教程吧。 |
4 OP @surfire91 就比如说 //myfile.js var request = new XMLHttpRequest(); request.open('GET', "", false); //这里用同步请求,不用异步 request.send(); if (request.status === "200") { console.log("Succeed!"); } else { console.log("Failed!"); } 在 Ubuntu 系统终端下运行 phantomjs myfile.js 结果是两行错误 XMLHttpRequest cannot load . Cross origin requests are not supported. NETWORK_ERROR: XMLHttpRequest Exception 101: A network error occurred in synchronous requests. 但是在我的 macOS 下运行不会出错 |
5 surfire91 Mar 3, 2017 PhantomJS 不太清楚,我怀疑是 macOS 和 Linux 下处理跨域不一样。 你可以尝试在服务端加上 CORS ,然后再试试。 |
6 nino Mar 3, 2017 不需要,你可以改 PhantomJS 的安全性设置 |
7 liuxu Mar 3, 2017 服务端, php 返回时发送: header("Access-Control-Allow-Origin:*"); |
11 Pastsong Mar 3, 2017 jsonp |
12 HanningWu OP @surfire91 这个「跨域设置」是什么东西的属性?操作系统的属性还是浏览器的属性?我看 StackExchange 上很多人说如果使用 Chrome 调试出现这个 Cross-origin request not supported 错误,可以更改 Chrome 的跨域设置来解决。但是我用 PhantomJS 的话并不是什么浏览器啊。 |
15 antowa Mar 3, 2017 Allow-Control-Allow-Origin:* ?? |
17 HanningWu OP @jiangzhuo 我才知道 phantomjs 有--debug 这个选项,感谢。 ubuntu 下的 debug 内容的前 41 行内容与[macOS]( https://gist.github.com/patricorgi/44230f23d2c4352bcb4412c2d9abc057)完全一致,从 42 行之后的内容 ubuntu 就没有了,之后就是报错(该帖中提到的那两行错误) |
18 wly19960911 Mar 3, 2017 via Android 跨域是服务器端的,请求方不能设置,没办法 |
19 HanningWu OP @wly19960911 可是我在 macOS 下能用 phantomjs 跑这个 js 脚本, ubuntu 就不行。肯定是 PhantomJS 的设置问题。。 |
20 dhssingle Mar 3, 2017 跨域看浏览器的 |
22 aleen42 Mar 3, 2017 理论上来说, XHR 会受同源限制,不能进行跨域请求 |
24 kingze1992 Mar 4, 2017 试试这个 http://stackoverflow.com/questions/12021578/phantomjs-failing-to-open-https-site --ignore-ssl-errors 我感觉是 https 的原因 |
25 surfire91 Mar 6, 2017 @HanningWu 我拿了你 4 楼的代码试了下,可用。需要加 --web-security=no ,环境是 centos ./phantomjs --web-security=no /tmp/myfile.js |
27 HanningWu OP @surfire91 这个 web security flag 我设置为 no 了,但在 ubuntu 下仍然给出相同的错误。 ubunu 系统是不是有毒啊!后来我放弃了 ubuntu ,重装了 windows 系统,然后用 cygwin 来跑 Linux shell 脚本。 |
28 HanningWu OP @surfire91 我到 Linux StackExchange 问一下,也无人可解,不知道这是 Ubuntu 的原因还是 16.04 这一个版本原因,总之我放弃了。不过还是非常感谢你的帮助。 |
29 HanningWu OP @kingze1992 这个 flag 我设置过,没有效果。 |