同样的 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
ck65 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', "https://www.v2ex.com/", false); //这里用同步请求,不用异步 request.send(); if (request.status === "200") { console.log("Succeed!"); } else { console.log("Failed!"); } 在 Ubuntu 系统终端下运行 phantomjs myfile.js 结果是两行错误 XMLHttpRequest cannot load https://www.v2ex.com/. 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 1
@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 我设置过,没有效果。
|