Angular 4:“(未知 URL)的 Http 失败响应:0 未知错误”
Posted
技术标签:
【中文标题】Angular 4:“(未知 URL)的 Http 失败响应:0 未知错误”【英文标题】:Angular 4: "Http failure response for (unknown URL): 0 Unknown Error" 【发布时间】:2018-02-01 07:25:17 【问题描述】:我正在尝试使用 API URL。我正在使用以下代码调用 API。
import HttpClient, HttpClientModule, HttpParams from "@angular/common/http";
@Injectable()
export class PropertyPrefService
constructor(private http: HttpClient,
private configurationService:Configuration)
public searchProjects(propFilter:string):any
let temp:any;
const options = propFilter ?
params: new HttpParams().set('query', propFilter)
: ;
return this.http.get<any>(this.configurationService.propertySystemApiUrl, options)
.subscribe((results:any) =>
console.log(results);
);
在 Angular 代码中,我没有得到任何响应并且出现错误:
(未知 url)的 Http 失败响应:0 未知错误。
但是,当我在 Chrome 上打开开发者工具时发出请求时,我看到从服务器收到响应。
网址是“https://...”网址,而不是“http://...”。
【问题讨论】:
试试 return this.http.get(this.configurationService.propertySystemApiUrl,options) .subscribe((results:any) => console.log(results); );我相信api url是正确的。 乍一看似乎是正确的。您是否仔细检查过this.configurationService.propertySystemApiUrl
实际上是您的网址?尝试在 http-request 之前做一个控制台日志。你在哪里调用方法?我想也许你需要在订阅中添加一个返回语句。 return results
(在 console.log(results) 之后);
能分享一下“configurationService”的代码吗?
是的,链接是正确的。我收到了回复,但我可以在 Chrome 开发人员工具中看到。通过这个角度代码,它给出了错误。
配置代码 - @Injectable() 导出类配置 propertySystemApiUrl = "abc.xyz.com/api/v1/exports/projects"
【参考方案1】:
问题是 Angular Universal 使用了 Express,安全性向服务器验证 SSL 证书;我使用的是自签名 SSL 证书。
解决方案是在您的环境中添加NODE_TLS_REJECT_UNAUTHORIZED=0
以禁用Node.js 中的SSL 验证。您应该只在开发中设置它;在生产中是非常危险的。
【讨论】:
您能否看一下“安全验证 SSL 证书” 并在需要时修复它(通过编辑您的答案)?例如,“安全性” 是什么意思(它在您的答案的原始修订版中) - 再次,通过编辑您的答案来回应。 这个答案的问题在于,当没有 Angular Universal 存在时,OP 描述的错误也会出现。【参考方案2】:引用Sander Elias on Google Groups:
“错误 0 是您在请求未发出时得到的。最常见的原因是服务器上未正确配置 CORS。让我将其改写为:在 98% 的情况下,这是一个服务器端问题。”
【讨论】:
【参考方案3】:你不在同一个域,相同的协议,后端和前端之间的相同端口。
【讨论】:
根据 [github.com/angular/angular/issues/… Angular bugtracker),状态码 0 表示 CORS 问题。所以答案不应该被否决。 这是不可理解的。你能修复它(通过编辑你的答案)吗? @StephanRauh 这个答案表明对不同协议、域或端口上的服务器的请求将失败,状态码为 0。此语句不准确。 a) 如果配置正确,则不必如此; b) 它也可能在相同的协议/域/端口上失败(here 似乎不是这种情况)。此外,答案试图解释,但工作量不大。 @AndréWerlang 你说服了我!【参考方案4】:以防万一其他人偶然发现这一点,这些解决方案都不适合我。对我有用的是关闭 uBlock Origin。出于显而易见的原因,它会阻止任何包含“广告”一词的网址。
【讨论】:
【参考方案5】:同意@StephanRauh 并想给他加几分。当请求未发出或由于某种原因无法与服务器通信时,就会发生这种情况。 原因可能是:
-
如果互联网连接速度很慢,无法连接到服务器或根本不可用。
服务器本身已关闭,即我们的请求没有处理程序。
【讨论】:
【参考方案6】:我遇到了完全相同的问题。我已经能够在 Chrome 开发人员工具中看到结果。但我总是收到Http failure response for (unknown url): 0 Unknown Error
错误消息。
就我而言,原因是我使用responseType:'text'
来查询有效负载text/html
。但这由于某种原因不兼容。我不得不切换到 responseType: 'blob'
并使用 FileReader
将 blob 转换为字符串。
所以我猜当返回的内容与您配置的responseType
不匹配时,您也会遇到同样的问题。默认是json
。
this.httpClient.get(url, responseType: 'blob')
.subscribe(data =>
const reader = new FileReader();
reader.onloadend = (e) =>
const readerResult = reader.result;
console.log(readerResult); // Print blob content as text
;
reader.readAsText(data, 'UTF-8');
, error => console.log(error));
【讨论】:
【参考方案7】:我在 iPhone/iPad 设备上测试 Angular 应用时遇到了这个问题。应用程序在桌面上运行良好。我在节点服务器上启用了 cors,但仍然出现此错误。所以,我做了以下来解决它。
使用 IP 运行 ng serve:ng serve --host 192.168.1.10
使用 IP 的点 API: 在 environment.ts 中,我将 URL 更改为以下:
apiUri: 'http://192.168.1.10:9000/api'
现在我可以从移动设备访问 URL。
【讨论】:
【参考方案8】:TL;DR:/etc/hosts
缺少包含域名的条目。
在 Angular Universal 中,我遇到了一个问题,即 s-s-r 部分抛出该错误,因为服务器端渲染发生在服务器上 (;))。
假设我的网站在https://myproject.com/ 可用并且运行良好。当您直接点击任何 URL 时,s-s-r 就会启动。现在,如果 s-s-r 必须进行 API 调用,它将向本地网络中的https://myproject.com/api/blah/show 发出 HTTP 请求。这就是它抛出错误的地方。
为了调试,我尝试运行 curl https://myproject.com/api/blah/show
(在 VPS 上),但我得到了一个错误。
为了解决这个问题,我必须在我的 /etc/hosts
文件中添加以下行:
127.0.0.1 myproject.com
之后,curl
命令和 s-s-r 都起作用了!
堆栈:
Ubuntu 16 和 18 nginx 让我们加密 SSL 角度通用 快递【讨论】:
【参考方案9】:当我尝试在我的 Angular 项目中使用 Azure 搜索服务时遇到了这个问题。 然后,当我启用接受来自所有来源的请求的 CORS 时,我开始获取响应。
请在您的 chrome 中检查您的开发者工具(控制台)。它可以为您提供有关请求的一些见解。
【讨论】:
【参考方案10】:我从节点 8 切换到节点 12,问题就神奇地消失了。
【讨论】:
以上是关于Angular 4:“(未知 URL)的 Http 失败响应:0 未知错误”的主要内容,如果未能解决你的问题,请参考以下文章
(未知 url)的 Http 失败响应:android 上的 0 未知错误
devextreme-datagrid update:message:“(未知URL)的Http失败响应:0未知错误”
Angular 更新 4.4.3 ,Angular5 预计10月23日发布
忘记 Angular 3:Google 将发布 Angular 4