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

typescript Angular 4基本动画#angular #js

为何Angular 4 是 Angular 2 的下一个版本,为啥没有 Angular 3,x