Добавление дополнительного вызова сервера в приложение Springboot, вызывающее проблему с CORS - PullRequest
1 голос
/ 09 июля 2020

Для контекста, я работал над приложением springboot с интерфейсом ReactJS. Интерфейс ReactJS подключается к приложению springboot, и приложение обращается к другому серверу, чтобы получить запрошенные данные для отображения во внешнем интерфейсе. Я дошел до того момента, когда я смог сделать почтовый запрос с полезной нагрузкой JSON, получить запрошенные данные в виде другой полезной нагрузки JSON и без проблем отобразить их во внешнем интерфейсе.

Мне пришлось внести изменение и добавить еще одну переменную к объекту, который возвращался во внешний интерфейс. И теперь браузер сообщает мне, что:

Access to fetch at [url] been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Все, что отличается, - это добавление данных к возвращаемому объекту и тот факт, что я снова обращаюсь к серверу, на котором хранятся данные. .

Вот заголовок ответа, когда я не делаю дополнительный вызов, и я возвращаю JSON полезную нагрузку

HTTP/1.1 200
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: *
Set-Cookie: [I erased the cookie after pasting]
Content-Type: text/plain;charset=ISO-8859-1
Content-Length: 83363
Date: Thu, 09 Jul 2020 18:05:40 GMT
Keep-Alive: timeout=60

Вот заголовок ответа, когда я делаю дополнительный вызов

HTTP/1.1 500
Connection: close
Date: Thu, 09 Jul 2020 18:13:24 GMT

Я отлаживал бэкэнд, и никаких ошибок на стороне сервера не возникало, и при обработке данных ничего не происходит. У меня внезапно возникла проблема с CORS.

Ниже приведен мой почтовый запрос, который работал до сих пор

fetch(url, {
            headers: {
                'Content-Type': 'text/plain',
                'Accept': '*/*',
                'Accept-Encoding': 'gzip, deflate, br',
            },
            method: 'post',
            body: JSON.stringify(jsonData)
        })

Я уверен, что включил все, что мне нужно делать на стороне Springboot для CORS, учитывая, что он работает все время, за исключением попыток получить дополнительные данные. Если мне чего-то не хватает, я хотел бы знать, и если эту проблему можно прояснить, прочитав документацию по springboot и cors, укажите мне в этом направлении.

Примечание: я также пробовал добавить

@Configuration
@EnableWebMvc
public class SpringBootConfiguration implements WebMvcConfigurer{

    @Override
    public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**");
    }
}

в мое приложение, но это тоже не работает. Для меня это все еще в новинку, поэтому я не уверен, что происходит.

Спасибо.

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Заголовок, кажется, был слишком большим с добавленными данными. Итак, все, что мне нужно было сделать, это увеличить max-http-header-size в моем application.properties. Теперь я могу получить полную полезную нагрузку JSON без проблем. Я был слишком сосредоточен на ошибке на стороне интерфейса, которой я пренебрегал, до go достаточно глубоко в серверной части, чтобы увидеть, что происходит.

Я добавил в своем application.properties

server.max-http-header-size = 48000

Я на самом деле не устанавливал 48000, это намного ниже, я нашел ответ здесь

Как установить max-http-header-size в приложении spring boot 2.x

0 голосов
/ 09 июля 2020

У меня были проблемы с CORS, и предоставленный вами фрагмент я пробовал, но в итоге по неизвестным причинам он сломал некоторые другие конечные точки. Вы можете добавить @CrossOrigin(origins = "URL", allowedHeaders = "*") к своим контроллерам.

Например,

@Controller
@CrossOrigin(origins = "localhost", allowedHeaders = "*")
public class Controller
...