2017-04-12 1 views
0

메신저 내 magento의 나머지 API를 사용하여 HTTP GET 요청을 얻으려고합니다.각도 2 : 프리 플라이트에 대한 응답 처리 방법이 유효하지 않은 HTTP 상태 코드 400입니다. 잘못된 요청

다음은 동일하게 달성하기위한 angular2 코드입니다.

public ngOnInit() { 
    let headers = new Headers({ 'Accept': 'application/json' }); 
    headers.append('Authorization', 'Bearer x9a278mu7xoh4k0jkj08doc5j4b3ac22'); 
    headers.append('Access-Control-Allow-Headers', 'Content-Type'); 
    headers.append('Access-Control-Allow-Methods', 'GET'); 
    headers.append('Access-Control-Allow-Origin', '*'); 

    let options = new RequestOptions({ headers: headers }); 
    return this.http.get('http://10.2.../Mage_ang2/index.php/rest/V1/customers/1',options) 
     .map(response => console.log(response.json)) 
     .subscribe((items: Person[]) => { 
      console.log('items: ' + items); 
      this.people = items; 
     }, error => console.log(error)); 

} 

나는 CORS 문제를 가지고 있다고 가정합니다.

옵션 http://10.2.../Mage_ang2/index.php/rest/V1/customers/1

XMLHttpRequest의은 http://10.2.../Mage_ang2/index.php/rest/V1/customers/1를로드 할 수 없습니다. 프리 플라이트에 대한 응답에 유효하지 않은 HTTP 상태 코드가 있습니다.

Google에서 해결 방법을 찾은 후 아래 단계를 시도했지만 동일하지만 실패했습니다. 젠토 htaccess로 파일에서

1)을 첨가하여 상기 각 2 코드에서

헤더 설정 액세스 제어 - 허용 - 기원 "*"

2)

추가

headers.append ('Access-Control-Allow-Headers', 'Content-Type'); ...

...

3)

내버려 헤더에 응용 프로그램/JSON 콘텐츠 형식을 변경 시도 = 새로운 헤더 ({ '동의': '응용 프로그램/JSON'});

실종 신고입니다.

CORS (magento2에서 angular2까지) 문제를 해결하려면 적절한 해결책이 필요합니다.

제안 환영! 마 젠토 글로벌 출처 간 액세스 (쇼핑 플랫폼 인 이해)주기

+0

이것이 앵귤러 문제가 아니라는 것을 알 수 있습니다. 즉, 앞면에 헤더를 설정하지 않았 음을 의미합니다. 이것은 서버 측 문제입니다. – Alex

답변

2
Header set Access-Control-Allow-Origin "*" 

보안 측면에서 아주 나쁜 생각처럼 들린다.

headers.append('Access-Control-Allow-Headers', 'Content-Type'); ... 

Access-Control-Allow-Headers

응답 헤더이다. 서버는 다른 방법으로 클라이언트에 보내야합니다. JS는 다른 서버에 액세스 할 수있는 권한을 부여 할 수 없습니다.
let headers = new Headers({ 'Accept': 'application/json' }); 

는 서버가 있기 때문에 기본 설정의 오류를 던지고 있다고 생각하는 어떤 이유가 있습니까?


돌아가서 오류 메시지를 보면 : 프리 플라이트에 대한

응답은 그런 기초 연구의 조금 what a preflight is을 배울 할 500

잘못된 HTTP 상태 코드를 가지고있다.

그런 다음 what HTTP status code 500 means을 찾으려면 좀 더 기본적인 연구를 수행하십시오.

그래서 :

  • 브라우저가 제작되는 옵션은 서버가 500 내부 서버 오류 (IT가 OPTIONS 요청에 응답하도록 프로그램되어 있지 않은 아마도 때문에)로 응답
  • 를 요청합니다.

이는 (그래서 아닌 JS 전혀)과는 500 오류를 던지고있다 이유 식별하여 서버 측 코드 볼 필요가 있다는 것을 의미한다. 서버의 오류 로그를보고 시작할 수 있습니다.

the CORS documentation의 규칙에 따라 OPTIONS 요청에 올바르게 응답하려면 서버를 가져와야합니다.

(다른 방법으로 동일한 지침을 사용하면 브라우저가 프리 플라이트 요청을 처음부터하지 못하게 할 수 있습니다. 요청시 CORS 응답 헤더를 설정하려는 모든 시도를 제거하는 것처럼 간단 할 수 있습니다. 속하지 마라).

+0

팁을 주셔서 감사합니다. 프리 플라이트는 크로스 사이트/도메인을 통해 전송되는 요청이며 OPTIONS 요청을 받기 위해 서버가 올바르게 구성되었는지 확인해야합니다. 500 오류 코드에 대해 서버 로그를 검사했는데 오류가없는 것 같습니다. 또한 어떤 행을 제거해도 headers.append ('Access-Control-Allow-Headers', 'Content-Type'); 브라우저가 프리 플라이트 요청을하지 못하도록하려면 – Sach

+0

브라우저 쪽에서 OPTIONS 요청을 사용하지 않도록 설정하라는 제안 – Sach

+0

@Sach - 내 대답의 마지막 단락을 참조하십시오. – Quentin

관련 문제