CORS는 어떻게 설정합니까?


12

Drupal 8에는 RESTful 웹 서비스가 핵심으로 내장되어 있으며 8.2 이후 cors 모듈이 필요하지 않습니다 .

이제 서비스를 사용하려면 여기에 지정된 default.service.yml 파일을 활성화하고 구성 하십시오.

그러나 다른 도메인을 통한 웹 서비스 액세스를 허용하도록이 설정을 구성 할 수 없었습니다.

cors에 대한 현재 service.yml 설정은 다음과 같습니다.

cors.config:
    enabled: true
    # Specify allowed headers, like 'x-allowed-header'.
    allowedHeaders: ['x-csrf-token,authorization,content-type,accept,origin,x-requested-with']
    # Specify allowed request methods, specify ['*'] to allow all possible ones.
    allowedMethods: ['POST, GET, OPTIONS, DELETE, PUT']
    # Configure requests allowed from specific origins.
    allowedOrigins: ['*']
    # Sets the Access-Control-Expose-Headers header.
    exposedHeaders: false
    # Sets the Access-Control-Max-Age header.
    maxAge: 1000
    # Sets the Access-Control-Allow-Credentials header.
    supportsCredentials: false

이에 대한 자세한 구성을 찾으려고했지만 찾지 못했습니다.

두 개의 다른 도메인에서 테스트 개발을 위해 이것을 만들고 있습니다.

웹 서비스에 pantheon dev 환경을 사용하고 해당 서비스를 소비하기 위해 localhost 사용자 정의 .dev 도메인을 사용합니다.

크롬 CORS 확장을 사용하여 서비스 액세스가 잘 작동합니다.


이전 답변에서 설명한대로 site / default / services.yml을 이미 변경했지만 작동하지 않는 경우 웹 서버에서 CORS가 활성화되어 있는지 확인하십시오. 예를 들어 Nginx의 경우 서버 블록 구성에서 위치를 추가 / 수정해야합니다. https://enable-cors.org/server_nginx.html
Pin

답변:


16

나는 판테온에서 최근에 이것을 만났으며, 아직 해결하지 않았다면 도움이되기를 바랍니다.

cors.config:
    enabled: true
    # Specify allowed headers, like 'x-allowed-header'.
    allowedHeaders: ['x-csrf-token','authorization','content-type','accept','origin','x-requested-with', 'access-control-allow-origin','x-allowed-header','*']
    # Specify allowed request methods, specify ['*'] to allow all possible ones.
    allowedMethods: ['*']
    # Configure requests allowed from specific origins.
    allowedOrigins: ['http://localhost/','http://localhost:3000','http://localhost:3001','http://localhost:3002','*']
    # Sets the Access-Control-Expose-Headers header.
    exposedHeaders: false
    # Sets the Access-Control-Max-Age header.
    maxAge: false
    # Sets the Access-Control-Allow-Credentials header.
    supportsCredentials: true

몇 가지 유의할 사항 ...

Pantheon에서 파일의 위치와 관련하여 service.yml 파일이 / sites / default와 / sites에 있는지 확인하십시오. 나는 그것이 두 곳에서 효과가 있다는 인상 아래 잘못되었습니다. / sites / default 디렉토리에있는 경우에만 작동합니다.

각각의 따옴표로 쉼표로 구분 된 allowedHeaders 목록을 확인하십시오. 나는 원래 위의 예에서와 같이 단일 문자열을 가지고 있었고 미묘한 차이를 발견하기 전에 수많은 시간이 실패했습니다. 메서드를 구체적으로 나열하려는 경우 allowedMethods가 동일한 방식으로 작동한다고 확신합니다.

또한 내 코드 스 니펫은 Pantheon 샌드 박스에 대한 개발에 잘 작동하지만 프로덕션에 들어가기 전에 조금 더 잠그고 싶을 것입니다. Pantheon에서 HTTPS를 제공하면 헤더를 통해 정보를 전달하려는 경우 HTTPS를 사용해야합니다. 그래도 여전히 문제가 있거나 길을 넘어간 다른 사람에게 도움이 되길 바랍니다.


4
allowedOrigins를 지정한 다음 '*'도 전달해야하는 이유는 무엇입니까?
Christian

두 옵션을 모두 보여 주기만하면됩니다. 어느 쪽이든 생략하십시오.
Shawn Matthews

exposedHeaders는 당 허위 또는 배열해야 drupal.org/project/drupal/issues/2905848

누군가 관심이 있다면 allowedOrigins 필드가 정규식을 허용한다고 믿지 않습니다. 정규식 패턴을 사용하여 여러 하위 도메인을 허용 목록에 추가하려고 시도했으며 drupal이 불평했습니다. 이 예와 같이 쉼표로 구분 된 명시적인 도메인 목록을 사용해야했습니다. settings.php의 trusted-hosts 설정처럼 작동하기를 바랐습니다.
Tony Stecca

9

찾기 : ... / sites / default / default.services.yml

사본을 작성하고 사본 이름을 다음으로 변경하십시오.

... / sites / default / services.yml

코드에서이 부분을 찾으십시오. cors.config : enabled : false

다음과 같이 바꾸십시오-cors.config : enabled : true

캐시를 지우십시오.


D : 나는 당신의 대답은, 감사 지우기 캐시는 가장 중요한 점을 보여주는 (캐시를 재 구축) 톱까지 모든 노력을 가정
emy

3

다음 설정이 나를 위해 일했습니다.

cors.config:
  enabled: true
  # Specify allowed headers, like 'x-allowed-header'.
  allowedHeaders: ['x-csrf-token','authorization','content-type','accept','origin','x-requested-with']
  # Specify allowed request methods, specify ['*'] to allow all possible ones.
  allowedMethods: ['*']
  # Configure requests allowed from specific origins.
  allowedOrigins: ['*']
  # Sets the Access-Control-Expose-Headers header.
  exposedHeaders: false
  # Sets the Access-Control-Max-Age header.
  maxAge: false
  # Sets the Access-Control-Allow-Credentials header.
  supportsCredentials: false

0

exposedHeaders : true가 유효하지 않아 경고가 발생합니다. implode () : Asm89 \ Stack \ CorsService-> addActualRequestHeaders () (/ vendor / asm89 / stack-cors / src / Asm89 / Stack / CorsService의 94 행에 잘못된 인수가 전달됨) php) # 0 /web/core/includes/bootstrap.inc(584) https://developer.mozilla.org/en-US/docs/Web/을 참조 하려면 허위이거나 허용되는 헤더가있는 배열이어야합니다. HTTP / 헤더 / 액세스 제어 노출 헤더

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.