헤더에 CORS를 추가했지만 요청에 CORS 문제가 계속 발생합니다. 헤더에서 CORS 및 기타 요청을 추가하고 처리하는 올바른 방법은 무엇입니까?
다음은 서비스 파일 코드입니다.
import { HttpClient, HttpHeaders, HttpClientModule } from '@angular/common/http';
const httpOptions = {
headers: new HttpHeaders({
'Access-Control-Allow-Origin':'*',
'Authorization':'authkey',
'userid':'1'
})
};
public baseurl = 'http://localhost/XXXXXX';
userAPI(data): Observable<any> {
return this.http.post(this.baseurl, data, httpOptions)
.pipe(
tap((result) => console.log('result-->',result)),
catchError(this.handleError('error', []))
);
}
오류:
실행 전 요청에 대한 응답이 액세스 제어 검사를 통과하지 못함 : 요청 된 리소스에 ‘Access-Control-Allow-Origin’헤더가 없습니다. 따라서 원본 ‘ http : // localhost : 4200 ‘은 액세스가 허용되지 않습니다.
실패 : (알 수없는 URL)에 대한 HTTP 실패 응답 : 0 알 수없는 오류
내 서버 측 코드에서 인덱스 파일에 CORS를 추가했습니다.
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
답변
내 경험상 플러그인은 HTTP에서 작동했지만 최신 httpClient에서는 작동하지 않았습니다. 또한 서버에서 CORS 응답 헤더를 구성하는 것은 실제로 옵션이 아닙니다. 그래서 proxy.conf.json
프록시 서버 역할을하는 파일을 만들었습니다 .
여기에서 자세한 내용을 읽어보십시오 .
proxy.conf.json
파일:
{
"/posts": {
"target": "https://example.com",
"secure": true,
"pathRewrite": {
"^/posts": ""
},
"changeOrigin": true
}
}
같은 디렉토리 의 proxy.conf.json
파일 바로 옆에 파일을 배치 했습니다 package.json
.
그런 다음 package.json 파일에서 시작 명령을 수정했습니다.
"start": "ng serve --proxy-config proxy.conf.json"
내 앱 구성 요소의 HTTP 호출 :
return this._http.get('/posts/pictures?method=GetPictures')
.subscribe((returnedStuff) => {
console.log(returnedStuff);
});
마지막으로 내 앱을 실행하려면 npm start
또는ng serve --proxy-config proxy.conf.json
답변
fetch
기능과 no-cors
모드를 시도 할 수도 있습니다. Angular의 내장 http 모듈보다 구성하기가 더 쉽습니다. Chrome Dev 도구 네트워크 탭에서 요청을 마우스 오른쪽 버튼으로 클릭하고 가져 오기 구문으로 복사 할 수 있습니다.
import { from } from 'rxjs';
// ...
result = from( // wrap the fetch in a from if you need an rxjs Observable
fetch(
this.baseurl,
{
body: JSON.stringify(data)
headers: {
'Content-Type': 'application/json',
},
method: 'POST',
mode: 'no-cors'
}
)
);
답변
당신이 나와 같고 로컬 SMS 게이트웨이 서버를 사용하고 있고 192.168.0.xx와 같은 IP에 GET 요청을하면 CORS 오류가 발생합니다.
불행히도 Angular 솔루션을 찾을 수 없었지만 이전 재생을 통해 솔루션을 얻었으며 Angular 7 8 9에 대한 업데이트 버전을 게시하고 있습니다.
import {from} from 'rxjs';
getData(): Observable<any> {
return from(
fetch(
'http://xxxxx', // the url you are trying to access
{
headers: {
'Content-Type': 'application/json',
},
method: 'GET', // GET, POST, PUT, DELETE
mode: 'no-cors' // the most important option
}
));
}
평소처럼. 구독하세요.
답변
NG5의 HttpClient에 대한 헤더를 다음과 같이 만드십시오.
let httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'apikey': this.apikey,
'appkey': this.appkey,
}),
params: new HttpParams().set('program_id', this.program_id)
};
localhost URL로 API 호출을 할 수 있습니다.
- 헤더에있는 매개 변수를 잊지 마십시오 : params : new HttpParams (). set ( ‘program_id’, this.program_id)
답변
Angular 6에서 httpClient를 사용한 POST도 OPTIONS 요청을 수행했습니다.
헤더 일반 :
요청 URL : https : //hp-probook/perl-bin/muziek.pl/=/postData 요청 방법 : 옵션 상태 코드 : 200 OK 원격 주소 : 127.0.0.1 : 443 리퍼러 정책 : 다운 그레이드시 리퍼러 없음
내 Perl REST 서버는 반환 코드 200으로 OPTIONS 요청을 구현합니다.
다음 POST 요청 헤더 :
동의하기:*/* Accept-Encoding : gzip, deflate, br Accept-Language : nl-NL, nl; q = 0.8, en-US; q = 0.6, en; q = 0.4 액세스 제어 요청 헤더 : 콘텐츠 유형 액세스 제어 요청 방법 : POST 연결 : 연결 유지 호스트 : hp-probook 출처 : http : // localhost : 4200 참조 자 : http : // localhost : 4200 / User-Agent : Mozilla / 5.0 (X11; Linux x86_64) AppleWebKit / 537.36 (Gecko와 같은 KHTML) Chrome / 59.0.3071.109 Safari / 537.36
Access-Control-Request-Headers : content-type에주의하십시오.
따라서 내 백엔드 펄 스크립트는 다음 헤더를 사용합니다.
- "Access-Control-Allow-Origin"=> '*', - "Access-Control-Allow-Methods"=> 'GET, POST, PATCH, DELETE, PUT, OPTIONS', - "Access-Control-Allow-Headers"=> 'Origin, Content-Type, X-Auth-Token, content-type',
이 설정으로 GET 및 POST가 작동했습니다!
답변
각도 cors에서 requestoptions를 가져 오십시오
import {RequestOptions, Request, Headers } from '@angular/http';
아래와 같이 코드에 요청 옵션을 추가하십시오.
let requestOptions = new RequestOptions({ headers:null, withCredentials:
true });
API 요청에서 요청 옵션 보내기
아래 코드 스 니펫-
let requestOptions = new RequestOptions({ headers:null,
withCredentials: true });
return this.http.get(this.config.baseUrl +
this.config.getDropDownListForProject, requestOptions)
.map(res =>
{
if(res != null)
{
return res.json();
//return true;
}
})
.catch(this.handleError);
}
모든 API 요청이 먼저 도착하는 백엔드 PHP 코드에 CORS를 추가하십시오.
이것을 시도하고 그것이 작동하는지 여부를 알려주십시오. 작동하지 않는 angular5에서 CORS를 추가 한 다음 CORS를 백엔드에 추가했으며 저에게 효과적이었습니다.
답변
다음은 몇 시간 동안 노력한 후에 나를 위해 일했습니다.
$http.post("http://localhost:8080/yourresource", parameter, {headers:
{'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' } }).
그러나 다음 코드가 작동하지 않았으므로 이유가 확실하지 않습니다. 누군가 가이 답변을 개선 할 수 있기를 바랍니다.
$http({ method: 'POST', url: "http://localhost:8080/yourresource",
parameter,
headers: {'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST'}
})