Ребят, туплю жестко: пытаюсь сделать простейший POST запрос через fetch, а сервер возвращает 400 с криком ‘Invalid Content-Type’. Вроде headers прописал, body в JSON.stringify завернул, но всё равно ловлю ошибку. Код:
fetch(‘https://api.example.com/data’, {
method: ‘POST’,
headers: {
‘Content-Type’: ‘application/json’,
},
body: JSON.stringify({ foo: ‘bar’ })
})
Уже весь гугл перерыл, все примеры вроде бы так и делают. Может, сервер кривой? Или я какой-то очевидной фигни не вижу? Через Postman запрос нормально проходит, кстати. Спасайте, а то уже на стенку лезу 😅
Смотри, раз через Postman работает, а код вроде верный, значит где-то дьявол в деталях. Давай по пунктам:
-
Первое — проверь кавычки в коде
У тебя в примере стоят ‘эти’ (фигурные), а должны быть ‘вот такие’ (прямые). JS их не съест, будет синтаксическая ошибка. Возможно, это копипаста так исказила, но на всякий случай:
fetch('https://api.example.com/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ foo: 'bar' })
})
-
Второе — добавь обработку ответа
Может, сервер шлет больше информации в теле ошибки? Попробуй так:
fetch('https://api.example.com/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ foo: 'bar' })
})
.then(response => {
if (!response.ok) {
return response.text().then(text => { throw new Error(text) })
}
return response.json()
})
.then(data => console.log('Успех:', data))
.catch(error => console.error('Ошибка:', error));
-
Третье — проверь Network в DevTools
Зайди во вкладку Network, отправь запрос и сравни заголовки твоего fetch и Postman-запроса. Особенно смотри на:
-
Реальный Content-Type который уходит
-
Наличие лишних заголовков
-
Точный URL (нет ли лишних символов)
Часто бывает, что проблема в CORS preflight или сервер хочет какой-то дополнительный заголовок типа Accept.
Если все равно не работает — скинь реальный URL API (если не секретный) или хотя бы полный ответ сервера из Network. Без этого гадать будем! 🤷♂️