httpd 중복 Access-Control-Allow-Origin with "Header always set"

기욤

내 서버에서 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-Credentialspreflight 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하나만 반환 됩니다.

사용자 5994461

비슷한 문제가 발생합니다. 디버깅에 많은 시간을 보냈습니다.

Apache의 버그입니다. 내부 설계의 실패 및 문서화 실패.

Header [table] set [cookie] [value] [...]

이것이 헤더를 조작하는 명령입니다. Apache에는 적어도 두 개의 쿠키 테이블이 있습니다.

  • onsuccess, 기본값, 20X 상태 코드에 사용됩니다.
  • always, 리디렉션 코드를 포함하여 오류에 사용됩니다.

야생에서의 경험에 따르면 모든 테이블의 모든 쿠키가 응답에 추가됩니다.

귀하의 예에서 Tomcat이 설정 한 쿠키는 onsuccess 테이블에 있고 아파치의 쿠키 세트는 always 테이블에 있습니다. 응답은 두 쿠키를 모두 가져 오므로 복제됩니다.

그것보다 더 지저분 해집니다. 테이블은 사용중인 모듈에 따라 다른 의미를 갖습니다. 예를 들어 프록시 나 CGI를 사용할 때 쿠키 관련 테이블 onsuccess은 업스트림 서버가 성공적으로 오류를 전달 하지만 always내부 아파치 오류가 발생한 경우입니다.

이 동작은 문서화되지 않았습니다. 그것은 의도적이지 않지만 아파치 내부의 결과로 보입니다. 현재 상태에서 Apache로 헤더를 올바르게 조작하는 것은 기본적으로 불가능합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

TOP 리스트

  1. 1

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  2. 2

    std :: regex의 일관성없는 동작

  3. 3

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  4. 4

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  5. 5

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  6. 6

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  7. 7

    Ionic 2 로더가 적시에 표시되지 않음

  8. 8

    Seaborn에서 축 제목 숨기기

  9. 9

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  10. 10

    복사 / 붙여 넣기 비활성화

  11. 11

    ArrayBufferLike의 typescript 정의의 깊은 의미

  12. 12

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  13. 13

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

  14. 14

    jfreecharts에서 x 및 y 축 선을 조정하는 방법

  15. 15

    PRNG 기간보다 순열이 더 많은 목록을 무작위로 섞는 방법은 무엇입니까?

  16. 16

    C # HttpWebRequest 기본 연결이 닫혔습니다. 전송시 예기치 않은 오류가 발생했습니다.

  17. 17

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  18. 18

    잘못된 구성 개체입니다. Webpack이 Angular의 API 스키마와 일치하지 않는 구성 개체를 사용하여 초기화되었습니다.

  19. 19

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  20. 20

    R의 마침표와 숫자 사이에 문자열 삽입

  21. 21

    Assets의 BitmapFactory.decodeStream이 Android 7에서 null을 반환합니다.

뜨겁다태그

보관