我从node.js服务器获取数据时遇到问题。
客户端是:
public getTestLines() : Observable<TestLine[]> {
let headers = new Headers({ 'Access-Control-Allow-Origin': '*' });
let options = new RequestOptions({ headers: headers });
return this.http.get('http://localhost:3003/get_testlines', options)
.map((res:Response) => res.json())
.catch((error:any) => Observable.throw(error.json().error || 'Server error'));
}
在服务器端,我还设置了标头:
resp.setHeader('Access-Control-Allow-Origin','*')
resp.send(JSON.stringify(results))
但我得到一个错误
“ XMLHttpRequest无法加载http:// localhost:3003 /
get_testlines
。对预检请求的响应未通过访问控制检查:所请求的资源上没有’Access-
Control-Allow-Origin’标头。来源’ http://本地主机:3000
‘因此不允许访问。”
我该如何解决?当我删除标题时,它说此标题是必需的。
Access-Control-Allow-Origin
是 响应 头,不是请求头。
您需要使其出现在响应中,而不是请求中。
您尝试将其放在响应中:
resp.setHeader('Access-Control-Allow-Origin','*')
…但是没有用。
这可能是因为您没有将其放在对正确请求的响应中。错误消息显示:
对 预检请求的 响应未通过访问控制检查
您已进行了 一些操作 ,使请求被预检。这意味着在浏览器发出您要发出的GET请求之前,它正在发出OPTIONS请求。
据推测,这是由服务器上的另一段代码处理的,因此resp.setHeader('Access-Control-Allow- Origin','*')
不会受到影响。
导致发出预检请求的一件事是添加了请求标头(少数异常除外)。添加Access-Control-Allow-Origin
到 请求
将触发预检请求,因此要解决此问题的第一件事是 从请求中 删除Access-Control-Allow-Origin
。
如果失败,则需要设置服务器,以便它可以响应OPTIONS请求和GET请求。
问题内容: 我尝试使用以下代码通过$ http(角度)发送http请求: 但这不起作用,并且我在Web控制台中有此错误: 你有解决方案吗 ? 问题答案: 您看到此错误是由于在浏览器中实现的称为Same Origin Policy的安全机制所致。 基本上,这是由于您的网页尝试访问驻留在与网页本身不同的主机,端口或方案(HTTP / HTTPS /文件等)所在的服务器上的资源而引起的。 为了解决此问题
我正在创建一个脚本,加载在其他网站的外部。它加载CSS和HTML,在我自己的服务器上工作得很好。 但还是不管用。
我有错误: XMLHttpRequest 无法加载 http://localhost:5984/cp_config/。当凭据标志为 true 时,不能在“访问控制-允许-源”标头中使用通配符“*”。因此,不允许访问源“http://localhost”。XMLHttpRequest 的凭据模式由 withCredentials 属性控制。 但我有一个标题: 我该如何解决这个问题?
问题内容: 我正在使用以下脚本- 我尝试访问的计算机正在运行播放框架。我收到以下错误: 选项404(未找到)jquery-1.9.1.min.js:5 XMLHttpRequest无法加载。原产地不被访问控制允许来源允许的。 我已经难过了两天,有人可以帮我吗? 提前谢谢 问题答案: 问题是您正在尝试进行跨域调用(从到)。Same Origin Policy 不允许这样做,因此浏览器试图使用跨域资源
你有解决办法吗?
我在AngularJS中创建了一个应用程序,并尝试调用Laravel API: MyApp(AngularJS):http://localhost:8080/ API(Laravel样板文件):http://localhost:8000/ api_routes.php: