【发布时间】:2020-07-24 19:37:44
【问题描述】:
当我从安全 url 请求时,我收到“https://www.google.com 的 Http 失败响应:0 未知错误”。
我正在尝试测试我的 ionic/angular 移动应用。当我尝试使用 http 请求时,我遇到了 Android 9 的问题,但 Android 7 运行良好。无论如何,我需要将我的后端设置为公共 https 服务器。所以现在我正在使用 https 请求进行测试,并且 7 和 9 Android 版本都不起作用。
我正在使用 Angular 7,
"@ionic/angular": "^4.6.1",
"@ionic-native/core": "^5.0.0",
"rxjs": "~6.5.1"
我做了这些小函数是为了让我的问题更简单。
在我的 html 文件中,我有以下代码:
我的文件.html
<ion-button
(click)="onStartTest()"
>Click me</ion-button>
<p id="testme"></p>
myFile.page.ts
onStartTest() {
this.taskService.onTest().subscribe(result => {
document.getElementById('testme').innerText = 'result ' + result;
console.log(result);
}, error => {
document.getElementById('testme').innerText = error.message;
console.log('Problem ', error.message);
});
}
myTask.service.ts
onTest() {
return this.http.get('https://www.google.com').pipe(
catchError(err => {
return throwError(err);
})
);
}
起初我尝试了服务器的 URL,但我将其更改为“https://www.google.com”只是为了验证后端是否正确。
我还有一个interceptors.ts 文件,我用它来进行身份验证,但是当我执行onStartTest() 函数时我没有登录,但我会分享它。
interceptors.ts
import {Injectable} from '@angular/core';
import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';
import {Observable} from 'rxjs';
@Injectable()
export class TokenInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const token = localStorage.getItem('auth_token');
let newHeaders = req.headers;
if (token) {
console.log(token);
newHeaders = newHeaders.set('Authorization', 'Token ' + token);
const modified = req.clone({
headers: newHeaders
});
return next.handle(modified);
} else {
newHeaders = newHeaders.set('Content-Type', 'application/json');
const modified = req.clone({
headers: newHeaders
});
return next.handle(modified);
}
}
}
我认为这些是解决此问题的必要文件。 我还用 Postman 测试了 google 的 url,以确保我应该获得状态 200
我还知道当响应代码为 20x 或 30x 时,有一个“add_header”指令 (nginx) 添加“Allow-access-control-origin”。根据我与 Postman 的屏幕截图,谷歌以 200 状态响应,但我的应用程序仍然出现状态 0 错误。
忽略第一个错误。这是我在应用程序启动时与 http 一起使用的功能。现在我正在测试 https。
我表面上尝试使用 ionic-native 库 HTTP,但我的应用程序完全崩溃了。
我也执行了命令ionic serve --ssl,但还是没有。
我在某处读到,为了安全连接,我需要一个证书,但我知道这是服务器的工作。
我尝试从 Vanilla JavaScript 向 Dark Sky 请求,它工作正常。所以角度/离子端有问题,而不是服务器端。
我错过了什么?我真的需要尽快解决这个问题! 我想向 https url 发送安全请求并获得适当的响应。
【问题讨论】:
-
Google 不响应我所说的 CORS 请求
-
我想到了这一点,这就是我使用 Postman 测试它的原因。使用邮递员获得 200 状态。无论如何,我会尝试使用另一个 URL,但我认为这不是问题,因为当我使用服务器中的 url 时,我遇到了完全相同的错误。
-
我在黑暗的天空中使用了这个网址,但仍然出现同样的错误,即 https:api.darksky.net/forecast/b66bc3384e22439cafb91f9124f7c5e0/…
-
因为这个api也没有实现CORS。阅读有关 CORS 的信息,并且有很多与此相关的 SO 问题。这与https无关。使用 POSTMAN 发送和 OPTIONS 请求进行检查。如果您的问题是“为什么我不能从 https 网站请求 http 内容”,那么这是出于安全原因。您的错误消息清楚地表明了这一点
标签: android angular ionic4 angular-httpclient