Заголовки CORS устанавливаются для одного домена, но не для другого, при использовании идентичной конфигурации - PullRequest
0 голосов
/ 04 января 2019

Заголовки CORS 'Access-Control-Allow- *' не устанавливаются ни на какие запросы от моего домена www, но работают нормально для моего бета-домена с идентичной конфигурацией.

У меня есть Angular 7, размещенный на Apache2, говорящий с бэкэндом Java Spring, размещенным на Apache Tomcat. Я также использую Cloudflare CDN, но сейчас я обхожу этот кеш.

Версия:

@angular/http@~7.1.0
rxjs@~6.3.3
spring-boot-starter-parent@2.0.4.RELEASE
Tomcat 8.5.14

В целях подготовки у меня есть два домена, работающих на моем сервере Apache2: https://beta.example.com и https://www.example.com. Оба из них имеют идентичные конфигурации виртуальных хостов (за исключением DocumentRoot / Directory, очевидно) и содержат этот блок: -

<IfModule mod_headers.c>

  Header unset Access-Control-Allow-Origin
  Header unset Access-Control-Allow-Headers
  Header unset Access-Control-Allow-Methods

  Header always set Access-Control-Allow-Origin "https://beta.server.com"
  Header always append Access-Control-Allow-Origin "https://www.server.com"
  Header always set Access-Control-Allow-Headers "Authorization,Content-Type,Origin"
  Header always set Access-Control-Allow-Methods "POST,GET,PUT,DELETE"
</IfModule>

RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]

В моем приложении Java Spring у меня есть следующий файл конфигурации:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

  @Override
  public void addCorsMappings(CorsRegistry registry) {

    registry.addMapping("/**")
      .allowedOrigins("https://www.server.com", "https://beta.server.com")
      .allowedMethods("POST", "GET", "PUT", "DELETE")
      .allowedHeaders("Authorization", "Content-Type", "Origin");

  }

}

Как вы можете видеть, везде, где я указал источник, я указал оба источника вместе, поэтому они должны вести себя одинаково.

Наконец, я делаю HTTP-вызовы из Angular следующим образом:

this.headers = new HttpHeaders({
  'Authorization': 'Bearer ' + this.getAccessToken(),
  'Content-Type': 'application/json'
});

getUser(): Promise<any> {
  return this.http.get(this.apiUrl + '/user', { headers: this.headers }).toPromise();
}

Когда я посещаю https://beta.example.com,, все предварительные запросы выполняются успешно, и все загружается нормально. Все заголовки CORS отображаются в предварительных ответах, так как они были установлены в конфигурации виртуального хоста. Все отлично!

HTTP/2.0 200 OK
date: Fri, 04 Jan 2019 14:52:40 GMT
set-cookie: __cfduid=d5fcc5cd672befaae80920288ee1527fc1546613559; expires=Sat, 04-Jan-20 14:52:39 GMT; path=/; domain=.server.com; HttpOnly
vary: Origin
vary: Access-Control-Request-Method
vary: Access-Control-Request-Headers
access-control-allow-origin: https://beta.server.com
access-control-allow-methods: POST,GET,PUT,DELETE
access-control-allow-headers: authorization, content-type
access-control-max-age: 1800
allow: GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
server: cloudflare
cf-ray: 493e87bdb89dc2d3-FRA
X-Firefox-Spdy: h2

Однако при https://www.example.com, OPTIONS возвращает 200 OK, но выдает следующую ошибку в веб-консоли:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.myserver.com:8443/api/v2/user. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.myserver.com:8443/api/v2/user. (Reason: CORS request did not succeed).

Вот заголовки ответа:

HTTP/2.0 200 OK
date: Fri, 04 Jan 2019 14:54:55 GMT
set-cookie: __cfduid=d90819c09242b1c78140a54a7c8a2e5fb1546613695; expires=Sat, 04-Jan-20 14:54:55 GMT; path=/; domain=.server.com; HttpOnly
allow: GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
server: cloudflare
cf-ray: 493e8b0c9936c2d3-FRA
X-Firefox-Spdy: h2
...