내 서버에서 CORS를 활성화하려고합니다. Apache HTTPD와 Apache Tomee를 모두 호스팅합니다. HTTPD는 다음과 같이 구성됩니다.
SetEnvIf Origin "^https://(.+\.)?my-domain.com$" allowed_origin=$0
Header always set Access-Control-Allow-Origin %{allowed_origin}e env=allowed_origin
Header set Access-Control-Allow-Credentials "true"
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS, HEAD, PUT, DELETE, PATCH"
Header set Access-Control-Allow-Headers "accept,x-requested-method,origin,x-requested-with,x-request,cache-control,content-type"
Header set Access-Control-Max-Age "600"
및 내 Tomee 웹 XML :
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Origin,Accept,X-Requested-With,Content-Type,Access-Control-Request-Method,Access-Control-Request-Headers,Accept-Language,Keep-Alive</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT,PATCH,DELETE</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
내 문제는 Access-Control-Allow-Credentials
preflight OPTIONS 요청에 대한 응답으로 헤더를 두 번 얻는 것입니다 .
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://my-origin.my-domain.com
Access-Control-Allow-Origin: https://my-origin.my-domain.com
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 600
Access-Control-Allow-Methods: GET, POST, OPTIONS, HEAD, PUT, DELETE, PATCH
Access-Control-Allow-Headers: accept,x-requested-method,origin,x-requested-with,x-request,cache-control,content-type,authorization
set
내 HTTPD 구성에서 키워드 사용 이 중복을 제거하지 않는 이유를 이해할 수 없습니다 Access-Control-Allow-Origin
. 또한 'always'키워드를 제거하면 Access-Control-Allow-Origin
하나만 반환 됩니다.
비슷한 문제가 발생합니다. 디버깅에 많은 시간을 보냈습니다.
Apache의 버그입니다. 내부 설계의 실패 및 문서화 실패.
Header [table] set [cookie] [value] [...]
이것이 헤더를 조작하는 명령입니다. Apache에는 적어도 두 개의 쿠키 테이블이 있습니다.
onsuccess
, 기본값, 20X 상태 코드에 사용됩니다.always
, 리디렉션 코드를 포함하여 오류에 사용됩니다.야생에서의 경험에 따르면 모든 테이블의 모든 쿠키가 응답에 추가됩니다.
귀하의 예에서 Tomcat이 설정 한 쿠키는 onsuccess 테이블에 있고 아파치의 쿠키 세트는 always 테이블에 있습니다. 응답은 두 쿠키를 모두 가져 오므로 복제됩니다.
그것보다 더 지저분 해집니다. 테이블은 사용중인 모듈에 따라 다른 의미를 갖습니다. 예를 들어 프록시 나 CGI를 사용할 때 쿠키 관련 테이블 onsuccess
은 업스트림 서버가 성공적으로 오류를 전달 하지만 always
내부 아파치 오류가 발생한 경우입니다.
이 동작은 문서화되지 않았습니다. 그것은 의도적이지 않지만 아파치 내부의 결과로 보입니다. 현재 상태에서 Apache로 헤더를 올바르게 조작하는 것은 기본적으로 불가능합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다