【问题标题】:Angular http.head on asset returns 404资产返回 404 的 Angular http.head
【发布时间】:2018-01-29 13:47:42
【问题描述】:

我创建了一个检查文件是否存在的服务。

fileExists(path: string): Observable<boolean> {
    return this.http.head(path)
        .mapTo(true)
        .catch((error) => {
            console.log(error);
            return Observable.of(false);
        });
}

我里面有一个pdf文件:/assets/text/text.pdf

当我在浏览器中打开 url 时,会显示 pdf,但是当我通过服务运行路径时,我得到一个 404

HttpErrorResponse {
     headers: HttpHeaders,
     status: 404,
     statusText: "OK",
     url: "https://localhost:4200/assets/text/text.pdf",
     ok: false, 
}

编辑:当我用 get 替换 head 时,我得到一个“%PDf 中的意外令牌 %...”,这意味着它找到了 PDF 的正文

https://github.com/angular/angular-cli/issues/5170

如果您对此有解决方案...

【问题讨论】:

  • 你对这条路径进行编码吗?
  • 没有。我认为它来自服务器不允许头部请求...
  • 你在 Postman 中尝试过 HEAD 请求吗?
  • 如果您使用的是 HttpClient(不是 http),则必须添加 {observe:'response'} 以获得完整响应,请参阅 angular.io/guide/http#reading-the-full-response
  • @D.Simon 邮递员也说 404。在 Eliseo 我根本没有得到任何回应。

标签: angular typescript rxjs httprequest


【解决方案1】:

经过调查,webpack 开发服务器不允许 HEAD 请求。

https://github.com/angular/angular-cli/issues/5170

https://github.com/webpack/webpack-dev-server/issues/924

可以做一个代理,但是它用 GET 代替了 HEAD,这是没有意义的。 另一种解决方案是修改中间件,使其接受问题 924 中所述的 HEAD,这太过分了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多