同样的 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 2017-03-03 16:51:55 +08:00 可以看一下 mdn 的 CORS 那页 |
![]() | 2 surfire91 2017-03-03 17:10:19 +08:00 把 Request 和 Response 都贴下 |
![]() | 3 mogita 2017-03-03 17:13:05 +08:00 via iPhone Allow origin 头不是请求方加的,是响应方加的。如 1 楼看看 cors 文档或教程吧。 |
![]() | 4 HanningWu 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 2017-03-03 17:48:39 +08:00 PhantomJS 不太清楚,我怀疑是 macOS 和 Linux 下处理跨域不一样。 你可以尝试在服务端加上 CORS ,然后再试试。 |
![]() | 6 nino 2017-03-03 17:55:57 +08:00 不需要,你可以改 PhantomJS 的安全性设置 |
![]() | 7 liuxu 2017-03-03 18:04:27 +08:00 服务端, php 返回时发送: header("Access-Control-Allow-Origin:*"); |
![]() | 11 Pastsong 2017-03-03 18:10:29 +08:00 jsonp |
![]() | 12 HanningWu OP @surfire91 这个「跨域设置」是什么东西的属性?操作系统的属性还是浏览器的属性?我看 StackExchange 上很多人说如果使用 Chrome 调试出现这个 Cross-origin request not supported 错误,可以更改 Chrome 的跨域设置来解决。但是我用 PhantomJS 的话并不是什么浏览器啊。 |
15 antowa 2017-03-03 18:44:31 +08:00 Allow-Control-Allow-Origin:* ?? |
![]() | 17 HanningWu OP @jiangzhuo 我才知道 phantomjs 有--debug 这个选项,感谢。 ubuntu 下的 debug 内容的前 41 行内容与[macOS]( https://gist.github.com/patricorgi/44230f23d2c4352bcb4412c2d9abc057)完全一致,从 42 行之后的内容 ubuntu 就没有了,之后就是报错(该帖中提到的那两行错误) |
![]() | 18 wly19960911 2017-03-03 20:08:41 +08:00 via Android 跨域是服务器端的,请求方不能设置,没办法 |
![]() | 19 HanningWu OP @wly19960911 可是我在 macOS 下能用 phantomjs 跑这个 js 脚本, ubuntu 就不行。肯定是 PhantomJS 的设置问题。。 |
20 dhssingle 2017-03-03 20:29:45 +08:00 跨域看浏览器的 |
![]() | 22 aleen42 2017-03-03 23:37:42 +08:00 理论上来说, XHR 会受同源限制,不能进行跨域请求 |
![]() | 23 HanningWu OP @aleen42 macOS 下使用 phantomjs 的`--web-security=no`选项可以跨过同源限制。 |
24 kingze1992 2017-03-04 09:21:21 +08:00 试试这个 http://stackoverflow.com/questions/12021578/phantomjs-failing-to-open-https-site --ignore-ssl-errors 我感觉是 https 的原因 |
![]() | 25 surfire91 2017-03-06 14:01:29 +08:00 ![]() @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 我设置过,没有效果。 |