API работает в Postman и curl, и если вы уверены, что отправляете все запросы и заголовки одинаково, то, вероятно, это проблема CORS. Вы не предоставили достаточно информации, чтобы действительно понять, так ли это.
Однако я пытаюсь объяснить, что я понимаю, как CORS работает для браузеров. Браузеры перед выполнением запроса (например, GET, POST, DELETE и т. Д.) Делают запрос OPTIONS. Если сервер, который обрабатывает запрос, видит, что запрос разрешен для этого хоста (с использованием источника и нескольких других факторов), сервер отвечает успешным ответом. Когда браузеры видят, что запрос OPTIONS выполнен успешно, браузер выполняет фактический запрос (GET, POST, DELETE и т. Д.).
Иногда для локальной разработки вам может потребоваться преодолеть это, поскольку localhost не будет поддерживаться сервером. В этом случае вы можете использовать расширения браузера, которые перехватывают ваши запросы xhr и проверяют успешный запрос OPTIONS для вашего браузера, и ваш браузер считает, что сервер ответил успешно на вызов OPTIONS, поэтому он разрешает вызов.
Отправка заголовков с вашим запросом не будет работать. Сервер api должен разрешить возвращение запроса опций со статусом 200, чтобы приложение могло выполнять этот вызов из браузера.
Все вышеперечисленное основано на том, что вы отправили запрос из браузера так же, как от почтальона или скручивания. Вы можете убедиться в этом, если вы используете приложение сетевого монитора, такое как Fiddler, если вы используете Windows. Если вы работаете в macOS или Linux, я не знаю такого инструмента, как Fiddler, должны быть инструменты, но поскольку я не работаю на этой платформе, я не могу предложить другой инструмент для мониторинга сети.