Проблемы с CORS в Nginx

TL; DR

Как выполнять рукописный шрифт в iframe на странице ⚡️ AMP для того, чтобы прочитала признак в окне мать.

Я стараюсь выполнять рукописный шрифт в iframe на странице Акселератед Мобиле Pages, но получаю ошибку в Google Chrome:

disqus-v1.0.10.html:27 Uncaught DOMException: Blocked a frame
with origin "https://media.toledano.org" from accessing a cross-origin
frame. at https://media.toledano.org/assets/js/disqus-v1.0.10.html:27:40

В Safari ошибка эта:

SecurityError (DOM Exception 18): Blocked a frame with origin
"https://media.toledano.org" from accessing a frame with origin 
"https://yo.toledano.org". Protocols, domains, and ports must match.

Линия с проблемой ищет стоимость признака в специфическом элементе:

window.parent.document.getElementById('content').attributes["data-idx"].value}

Идея состоит в том, что я загружаю iframe на странице, и рукописный шрифт, который содержит iframe, ищет такую линию как эта:

<main id="content" role="main" class="" data-idx="d09a0882-74a2-4d66-97d8-63e37172a1b4">

Если единственное использование document.getElementById('content').attributes["data-idx"].value} результат недействительный, потому что iframe имеет в виду, если сам (или же media), поэтому я отношусь в parent (или же в yo).

Замечание

Я не разбираюсь в, что сторона функционирует это CORS, так что в обеих сторонах я добавил заголовки разрешений.

Как я, заголовки функционируют... Я делаю запрос прося заголовки и могу видеть, что они функционируют.

Протестируй 1. - Источник: я - Судьба: происходи (yo -> media)

> $ curl -I -s -X GET -H "Origin: yo.toledano.org" https://media.toledano.org
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 0
Connection: keep-alive
Date: Tue, 01 Aug 2017 16:50:37 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD
Access-Control-Max-Age: 3000
Last-Modified: Fri, 14 Aug 2015 22:03:34 GMT
ETag: "d41d8cd98f00b204e9800998ecf8427e"
Accept-Ranges: bytes
Server: AmazonS3
Vary: Origin
Age: 2632
X-Cache: Hit from cloudfront
Via: 1.1 64184371bdc0c4545cde799b5949d17c.cloudfront.net (CloudFront)
X-Amz-Cf-Id: 0TmdSyBCGXHdRhFoykbzGJiOG6TN1GbdLkGFn13fUdtDOTc3GIMCZA==

Заголовок Access-Control-Allow-Origin присутствуй, как он ожидается.

Протестируй 2. - Источник происходит, судьба я (media -> yo)

$ curl -I -s -X GET -H "Origin: media.toledano.org" https://yo.toledano.org
HTTP/1.1 200 OK
Server: nginx/1.10.3 (Ubuntu)
Date: Tue, 01 Aug 2017 17:36:26 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 19630
Connection: keep-alive
Vary: Accept-Encoding
Expires: Tue, 01 Aug 2017 17:38:23 GMT
Cache-Control: max-age=600
X-Frame-Options: SAMEORIGIN
Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: toledano.org
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With

Заголовок Access-Control-Allow-Origin присутствуй, как он ожидается.

Протестируй 3, Свидетель. Google в меня и в средний показатель (google.com -> yo; google.com -> media)

$ curl -I -s -X GET -H "Origin: google.com" https://yo.toledano.org
HTTP/1.1 200 OK
# bla bla bla
X-Frame-Options: SAMEORIGIN
Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: toledano.org
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With

Там - заголовки... как я они не были бы должны появляться...

$ curl -I -s -X GET -H "Origin: google.com" https://media.toledano.org
HTTP/1.1 200 OK
# bla bla bla
X-Cache: Hit from cloudfront
Via: 1.1 a658139699129536c4b1341e7df68ce6.cloudfront.net (CloudFront)
X-Amz-Cf-Id: qJUhJ8VxTKvX3yU8toi87DNae41F35_HZKB4M7qwUxky_-Aq0Wrdcg==

Здесь они не, потому что одинокий CloudFront позволяет в домен toledano.org.

Рассуждения

  • blog сделан в Джанго, с пакетом django-cors-header и конфигурация: CORS_ORIGIN_ALLOW_ALL = True.
  • Такое использование Nginx как Веб сервер и я добавляю этот заголовок к ответам: add_header 'Access-Control-Allow-Origin' 'toledano.org';
  • Рукописный шрифт поселен в Amazon S3+Cloudfront и у bucket есть разрешение шире: <AllowedOrigin>*</AllowedOrigin> и поведение распределения только позволяет домен toledano.org.

Что я должен делать, чтобы выполнять на странице AMP рукописный шрифт, который загружается в iframe, чтобы получать искавшую стоимость?

Надбавка:
  • В чем я ошибаюсь? Какова моя ошибка?
  • Как функционирует CORS?

Я издаю: это страница доказательства: https://yo.toledano.org / я разрабатываю / agrupar-resultados-con-mysql / amp /


Реестр Попыток

  1. Я продолжил подсказку комментария @fredyfx и оно не функционировало.
  2. Поскольку у меня есть идея, что проблема - с Nginx, я сделал это доказательство: a) проверять, находится ли источник в белом списке; b), если - включать переменную; c), если активная переменная, включать заголовки...

    1. Я сделал regex, чтобы принимать мои субдомены: https?://(.*\.toledano\.org)(:[0-9]+)? и если оно функционирует.
    2. Я добавляю этот код к конфигурации Nginx:

      set $cors '';
      if ($http_origin ~ 'https?://(localhost|127\.0\.0\.1|.*\.toledano\.org)(:[0-9]+)?') {
        set $cors '1';
      }
      

      и я добавляю заголовки доказательства...

      add_header 'nSpaces-Origen' "$http_origin";
      add_header 'nSPaces-CORS' "$cors";
      

      и доказательство правильно, я вижу заголовок nSpaces-CORS...

      $ curl -I -s -X GET -H "Origin: https://media.toledano.org" https://yo.toledano.org 
      HTTP/1.1 200 OK
      # bla bla bla
      Access-Control-Allow-Origin: *
      nSpaces-Origen: https://media.toledano.org
      nSPaces-CORS: 1
      
    3. Тогда я добавляю этот фрагмент, чтобы включать оставшуюся часть заголовков...

      if ($cors = '1') {
        add_header 'Access-Control-Allow-Origin' "$http_origin";
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With';
      }
      

      и доказательство: уже оно не функционирует! (Результат - тот же самый, что тот 2.1).

5
задан 01.08.2017, 22:19
0 ответов