【发布时间】:2018-05-16 10:27:48
【问题描述】:
在 Angular 中,ng serve --port 4200 --host 0.0.0.0 创建一个 http 服务器实例。有人告诉我,为了从 Angular 中的服务器端脚本获取数据,需要另一个 localhost。
在 ngOnInit 中我获取数据:
ngOnInit(){
this.http.get('http://localhost/echo.php').subscribe(data => {
console.log(data);
});
}
此提取在 Network tab of Developer tools 中有一个状态代码 200,但我在控制台中收到了 CORS 错误:
Failed to load http://localhost/echo.php: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.
似乎是不同的端口导致了这种情况。我应该怎么做才能防止这种情况发生?浏览器本身通过获取此文件没有问题,抱怨的是 Angular。
更新:我遵循了建议并提出了一个新错误。这次是:GET http://localhost:4200/backend/echo.php 504 (Gateway Timeout)
“其他”服务器配置为侦听端口 80,DocumentRoot 为 backend ..
proxy.conf.json:
{
"/backend/*": {
"target": "http://localhost:80",
"secure": false,
"logLevel": "debug"
}
}
.ts:
ngOnInit(){
this.http.get('http://localhost:4200/backend/echo.php').subscribe(data => {
console.log(data);
});
}
文件结构:
【问题讨论】:
-
它与 Angular 无关。这是浏览器 JavaScript 安全性的核心特性。
-
@Quentin 我认为它可能与 Angular 有关。 angular.io/api/platform-browser/DomSanitizer.
-
@Pac0 — 仅当 Angular 是用 JavaScript 编写时,它才与 Angular 相关。该 URL 似乎与问题无关。
-
我试过这个看看它是否会起作用。但事实并非如此。如果您使用的是 WAMP,如果您的 URL 文件在文件夹中,则可以在 apache 的 httpd.conf 中使用 Directory 标签,如果是另一个域,则可以使用 LocationMatch。我使用该技术能够从角度运行。
标签: angular