>운영 및 유지보수 >엔진스 >Nginx 구성 도메인 간 요청 오류 Access-Control-Allow-Origin * 해결 방법

Nginx 구성 도메인 간 요청 오류 Access-Control-Allow-Origin * 해결 방법

WBOY
WBOY앞으로
2023-05-11 23:10:125807검색

머리말

403 도메인 간 오류가 발생하면 no 'access-control-allow-origin' header is present on the requested resource nginx 서버에 대한 응답 헤더 매개 변수를 구성해야 합니다.

1. 해결 방법

nginx 구성 파일에서 다음 매개 변수를 구성하면 됩니다.

location / { 
 add_header access-control-allow-origin *;
 add_header access-control-allow-methods 'get, post, options';
 add_header access-control-allow-headers 'dnt,x-mx-reqtoken,keep-alive,user-agent,x-requested-with,if-modified-since,cache-control,content-type,authorization';

 if ($request_method = 'options') {
  return 204;
 }
}

위 구성 코드로 문제를 해결할 수 있습니다. 자세히 공부하고 싶지 않다면 여기를 보세요 =-=

2. 설명

1.

서버는 기본적으로 도메인 간 교차가 허용되지 않습니다. nginx 서버에 `access-control-allow-origin *`을 구성하면 서버가 모든 요청 소스(원본)를 수락할 수 있다는 의미, 즉 모든 크로스 도메인 요청을 수락한다는 의미입니다.

2.access-control-allow-headers는 다음 오류를 방지하기 위한 것입니다.

요청 헤더 필드 콘텐츠 유형은 실행 전 응답의 access-control-allow-headers에서 허용되지 않습니다.

this 오류는 현재 요청된 콘텐츠 유형의 값이 지원되지 않음을 나타냅니다. 실제로 이는 "application/json" 유형 요청을 시작했기 때문에 발생했습니다. 여기에는 실행 전 요청이라는 개념이 포함됩니다. 아래의 "실행 전 요청" 소개를 참조하세요.

3. access-control-allow-methods는 다음 오류를 방지합니다.

preflight 응답의 access-control-allow-headers에서 콘텐츠 유형을 허용하지 않습니다.

4. post 요청을 보낼 때 nginx가 여전히 액세스를 거부하는 오류를 처리하기 위해 204 반환이 추가되었습니다

"실행 전 요청"을 보낼 때 메서드 옵션을 사용해야 하므로 서버에서 이 메서드를 허용해야 합니다.

3. 프리플라이트 요청

사실 위 구성에는 w3c 표준인 cros가 포함되어 있으며, 전체 이름은 교차 도메인 문제를 해결하기 위해 제안된 교차 출처 리소스 공유를 요청했습니다.

CORS(Cross-Origin Resource Sharing) 표준은 서버가 어떤 원본 사이트가 어떤 리소스에 액세스할 권한이 있는지 선언할 수 있도록 하는 새로운 http 헤더 필드 세트를 추가합니다. 또한 사양에서는 서버 데이터에 부작용이 있을 수 있는 http 요청 메서드(특히 특정 MIME 유형의 get 또는 post 요청 이외의 http 요청)에 대해 브라우저가 먼저 옵션 메서드를 사용하여 실행 전 요청을 시작해야 한다고 요구합니다. (실행 전 요청) 서버가 도메인 간 요청을 허용하는지 여부를 확인합니다. 서버는 권한을 확인한 후 실제 http 요청을 시작합니다. 실행 전 요청이 반환되면 서버는 클라이언트에 ID 자격 증명(쿠키 및 http 인증 관련 데이터 포함)을 전달해야 하는지 여부를 알릴 수도 있습니다.

사실 콘텐츠 유형 필드가 application/json인 요청은 위에서 언급한 특정 MIME 유형에 대한 게시물 요청이며, CORS는 콘텐츠 유형이 다음 MIME 유형에 속하지 않는 경우 모두 실행 전 요청이라고 규정합니다. :

application/x-www-form-urlencoded
multipart/form-data
text/plain

그래서 application/json 요청은 공식적인 통신 이전에 "preflight" 요청을 추가합니다. 이번에는 "preflight" 확인" 요청은 헤더 정보를 가져옵니다 access-control-request-headers: content-type:

options /api/test http/1.1
origin: http://foo.example
access-control-request-method: post
access-control-request-headers: content-type
... 省略了一些

서버가 응답할 때 반환된 헤더 정보에 access-control-allow-headers: content-type이 포함되어 있지 않으면 no를 의미합니다. 기본이 아닌 콘텐츠 유형을 허용합니다. 즉, 다음 오류가 발생합니다.

요청 헤더 필드 콘텐츠 유형은 실행 전 응답의 액세스 제어 허용 헤더에 의해 허용되지 않습니다.

위 내용은 Nginx 구성 도메인 간 요청 오류 Access-Control-Allow-Origin * 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제