Nginx CORS 크로스 필드

3296 단어 nginx
장면
우리 의 자원 은 네트워크 의 사방팔방 에서 왔 기 때문에 크로스 오 버 를 사용 해 야 한다. 업계 에 도 크로스 오 버 해결 방안 이 매우 많다. 이번 에는 크로스 오 버 와 상태 코드 간 의 문 제 를 이야기 하 러 왔 다.
문제.
URL 주소 가 되 돌아 오 는 상태 코드 가 400, 403, 404, 500 일 때 도 메 인 을 뛰 어 넘 는 자원 은 되 돌아 오지 않 습 니 다. 즉, Nginx 에 add_header 키 워드 를 설정 하 더 라 도 내용 에 따라 되 돌아 오지 않 습 니 다.
예 를 들 어 말 하 다.
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods *;

우리 가 대응 하 는 주 소 를 요청 할 때, 설 정 된 머리 정 보 를 되 돌려 주어 야 하지만, 최종 결 과 를 봅 시다.
200
HTTP/1.1 200 OK
Server: openresty/1.11.2.2
Date: Fri, 26 Jan 2018 08:46:39 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 558
Last-Modified: Tue, 28 Mar 2017 01:13:24 GMT
Connection: keep-alive
ETag: "58d9b8b4-22e"
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: *
Accept-Ranges: bytes

내용 이 틀림없다.
404
HTTP/1.1 404 Not Found
Server: openresty/1.11.2.2
Date: Fri, 26 Jan 2018 08:47:18 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 175
Connection: keep-alive

신기 하 다. 여기 404 상태 코드 아래 에서 사용자 정의 응답 헤드 가 사 라 졌 다.
원인 과 해결 방식
Nginx 문서 에서 말 한 것 을 유의 하 십시오.
Adds the specified field to a response header provided that the response code equals 200, 201 (1.3.10), 204, 206, 301, 302, 303, 304, 307 (1.1.16, 1.0.13), or 308 (1.13.0). The value can contain variables.
그 러 니까 addheader 는 상기 응답 상태 코드 의 응답 헤드 에 만 추 가 됩 니 다.
우리 의 API 는 각종 상태 코드 가 되 돌아 오기 때문에 다른 상태 코드 에서 어떻게 해 야 합 니까?모두 문서 에 인자 가 있 는 것 을 유의 하 세 요.
Syntax:    add_trailer name value [**always**];
Default:    —
Context:    http, server, location, if in location
This directive appeared in version 1.13.2.
[always] 인자 가 있 는 것 을 발견 할 수 있 습 니 다. 그러면 이 매개 변 수 는 설정 헤드 를 모든 영향 에 적용 하 는 것 입 니 다.
인자 추가:
add_header Access-Control-Allow-Origin * always;
add_header Access-Control-Allow-Methods * always;

nginx 서버 를 다시 시작 한 후 다시 시도 합 니 다.
200
HTTP/1.1 200 OK
Server: openresty/1.11.2.2
Date: Fri, 26 Jan 2018 09:01:36 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 558
Last-Modified: Tue, 28 Mar 2017 01:13:24 GMT
Connection: keep-alive
ETag: "58d9b8b4-22e"
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: *
Accept-Ranges: bytes

200 요청 은 변 하지 않 았 고 모든 것 이 정상 이 었 다.
404
HTTP/1.1 404 Not Found
Server: openresty/1.11.2.2
Date: Fri, 26 Jan 2018 09:02:12 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 175
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: *

지금 404 도 맞습니다.우리 의 크로스 필드 도 바로 설정 이 완료 되 었 습 니 다.
OPTIONS 요청 에 대하 여
전단 에서 크로스 도 메 인 요청 을 할 때 이 인터페이스 가 크로스 도 메 인과 대응 하 는 요청 방법 을 지원 하 는 지 알 아 보기 위해 OPTIONS 요청 을 미리 시작 합 니 다.
배치 에 있어 서 는 이렇게 할 수 있다.
if ($request_method = OPTIONS) {
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods *;
    add_header Access-Control-Allow-Credentials true;
    return 204;
   }

물론 내 가 있 는 이곳 * 을 이렇게 사용 하 는 것 은 좋 지 않다. 너 는 도 메 인 이름 에 대응 하여 설정 해 야 한다.
또한 PHP 에 있어 서 저 희 는 CORS 확장 라 이브 러 리 를 제공 하여 fastd 에서 직접 사용 할 수 있 습 니 다.
github: cors-provider

좋은 웹페이지 즐겨찾기