Reactjs не может читать смарт-контракт?

У меня есть проект в ReactJs, где я использую web3.js для чтения смарт-контракта, а также клиент Ethereum, предоставленный Infura. Проблема в том, что когда я получаю доступ к своему проекту в Google Chrome, все работает нормально. Если я получаю доступ к своему проекту через Microsoft Edge, я получаю следующую ошибку:

SEC7120: [CORS] Источник 'http://localhost:3000' не нашел 'http://localhost:3000' в заголовке ответа Access-Control-Allow-Origin для ресурса из разных источников по адресу 'https://rinkeby.infura.io/v3/censored'.

Я просмотрел другие сообщения и нашел этот который не решил мою проблему.

Другие вещи, которые я заметил: если я захожу на веб-сайт из Internet Explorer, я могу читать данные как обычно. Если я перехожу в Google Chrome и не использую MetaMask, я могу читать данные как обычно. Если я активирую MetaMask и не выберу правильную сеть infura (Ropsten), а выберу, например, основную сеть, она не будет работать должным образом.

ОБНОВЛЕНИЕ: Кажется, это не проблема с моей стороны, а вместо этого исходит от Infura. Я спросил их, не является ли Microsoft Edge ограничением их службы и готовы ли они что-то с этим делать.


person Iulian    schedule 12.10.2018    source источник
comment
Это ошибка CORS. Это не имеет ничего общего с reactjs, это просто означает, что базовый URL-адрес, с которого вы запрашиваете, отличается от того, который вы также запрашиваете, что не позволяет ваша цель. Трудно сказать что, не видя кода.   -  person SpeedOfRound    schedule 12.10.2018


Ответы (1)


Ах, старая добрая проблема CORS. Поскольку у вас нет контроля над настройками CORS сервера, вам лучше создать небольшое серверное приложение, которое будет передавать эти запросы от имени вашего реагирующего приложения.

person Dylan Pierce    schedule 12.10.2018
comment
Я хочу кое-что понять. Итак, технически эта проблема CORS возникает только при локальном тестировании приложений? Потому что я был бы не против развернуть его на клиентах, поскольку я все еще могу протестировать его в Google Chrome, поэтому это не повлияет на мой опыт. - person Iulian; 12.10.2018
comment
@Cristian CORS — это мера безопасности, вы столкнетесь с той же проблемой в производственной среде. Это настройка на сервере смарт-контракта. Это немного больно, но если вам интересно, почему и как это работает — developer.mozilla.org/en-US/docs/Web/HTTP/CORS - person Dylan Pierce; 12.10.2018