XMLHttpRequest не может загрузить http://192.168.1.253:8080/... Нет 'Access-Control-Allow- Заголовок Origin присутствует на запрошенном ресурсе. Таким образом, доступ к источнику 'http://localhost:4200' запрещен. В ответе был код состояния HTTP 401.
Довольно распространенная ошибка с большим количеством возможных решений, которые не сработали. Я понимаю (я думаю), как должен работать CORS, и я не вижу ничего плохого в своих HTTP-заголовках, но это все равно не работает.
Из Chrome:
Request URL:http://192.168.1.253:8080/...
Request Method:OPTIONS
Status Code:200 OK
Remote Address:192.168.1.253:8080
Referrer Policy:no-referrer-when-downgrade
Response Headers
Access-Control-Allow-Headers:x-requested-with,accept,content-
type,authorization
Access-Control-Allow-Methods:POST, GET, PUT, PATCH, OPTIONS, DELETE
Access-Control-Allow-Origin:*
Access-Control-Max-Age:3600
Allow:GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Connection:keep-alive
Content-Length:0
Date:Mon, 15 May 2017 21:50:55 GMT
Expires:0
Pragma:no-cache
Server:...
X-Content-Type-Options:nosniff
X-Frame-Options:DENY
X-XSS-Protection:1; mode=block
Request Headers
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:authorization,content-type
Access-Control-Request-Method:GET
Cache-Control:no-cache
Connection:keep-alive
Host:192.168.1.253:8080
Origin:http://localhost:4200
Pragma:no-cache
Referer:http://localhost:4200/...
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Насколько я понимаю, для ответа OPTIONS
требуется набор заголовков Access-Control-Allow-Origin
и разрешение типа метода и значений заголовка, что он и делает.
Соответствующий угловой ниже. Я сделал довольно много разных комбинаций этого со всевозможными вещами в заголовке, но ничего не работает.
private getObject<T>(path: string): Promise<T> {
return this.http.get(SERVER_URL + path, this.authenticationToken())
.toPromise()
.then(response => response.json() as T)
.catch(this.handleError);
}
private authenticationToken() : RequestOptions {
let login = JSON.parse(sessionStorage.getItem('currentLogin'));
if (login && login.authenticationToken) {
let headers = new Headers({
'Authorization': 'Basic ' + login.authenticationToken,
'Content-type': 'application/json',
});
return new RequestOptions({ headers: headers });
}
}
У меня такое чувство, что я упускаю что-то очевидное, но это сводит меня с ума, любая помощь приветствуется. Обратите внимание, что это работает с уже существующим приложением Ember, поэтому я не думаю, что это сервер.