У меня есть страница на http://localhost:3000
, которая содержит iframe, src
is http://localhost:3010/login
. IFRAME делает следующее:Один iframe случайно не работает XHR
- Запросы
src
html. - После получения перенаправления 302, он следует за ним
http://localhost:3000/oauth/authorize?response_type=code&client_id=1&redirect_uri=http%3A%2F%2Flocalhost%3A3011%2Fauthorization_code&state={state}
. - IFrame затем перенаправляется обратно в исходное состояние:
http://localhost:3010/authorization_code?code={code}&state={state}
. - Сервер приложения, внедренный iframe, успешно обменивает код авторизации для токена доступа и перенаправляет на
http://localhost:3010
с файлом cookie, установленным в OAuth2access_token
. - Некоторые JavaScript-код делает XHR равным
http://localhost:3010/api/customerInfo
. - Информация о клиенте возвращается и отображается в iframe с использованием JavaScript.
Так что все это работает отлично.
Однако, когда я добавить второй IFrame встраиваемого приложения со своим собственным происхождением localhost:3020
, которая проходит через тот же поток, один из первых XHR приложений будет неудачно со следующей ошибкой:
XMLHttpRequest cannot load http://localhost:3000/oauth/authorize?response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A3011%2Fauthorization_code&state=17nCw5o0Tr11Y6z8&client_id=1 . No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://localhost:3010 ' is therefore not allowed access. The response had HTTP status code 400.
кажется немного странным, потому что он говорит, что не может загрузить URL-адрес через XHR, который он уже загрузил с помощью перенаправления.
Иногда один iframe терпит неудачу, а иногда и другой. Каждый раз и в каждом браузере один iframe может выполнить XHR, другой вызывает эту ошибку. Я даже задерживал исходный XHR iframes в разных количествах, чтобы они не перекрывались, но безрезультатно.
Фрагменты iframe генерируются динамически (через React) и имеют этот атрибут: sandbox='allow-forms allow-scripts allow-same-origin'
.