Проблема состоит в том что на сервере явно указано какие методы может обрабатывать сервер, но сервак дырявый и все равно отдает данные. Как пофиксить чтобы заголовки CORS запрещали получать данные с помощью POST запроса?
Другие методы, CORS не пропускает, проблема только с POST.
Запрос является не простым, у меня стоит Content-Type: application/json.
chat gpt спрашивал, тот только советует явно в коде запретить обращаться с помощью POST.
server.js
import http from "node:http";
// Заголовки CORS
const setCORSHeaders = (res) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Headers", "Content-Type");
res.setHeader("Access-Control-Allow-Methods", "GET");
res.setHeader("Access-Control-Max-Age", "86400"); // 24 часа
};
const server = http.createServer((req, res) => {
setCORSHeaders(res);
// Preflight Запрос
if (req.method === "OPTIONS") {
res.writeHead(200);
res.end();
return;
}
if (req.url === "/data") {
const responseData = { message: "Data Get Successfully" };
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify(responseData));
} else {
res.writeHead(404, { "Content-Type": "application/json" });
res.end(JSON.stringify({ error: "Ресурс не найден" }));
}
});
const port = 5050;
server.listen(port, () => {
console.log(`Сервер запущен на порту ${port}`);
});
client.js
function getData() {
fetch("http://localhost:5050/data", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
})
.then((response) => {
if (response.ok) {
return response.json();
}
throw new Error("Network response was not ok");
})
.then((data) => {
document.getElementById("response").textContent =
JSON.stringify(data);
})
.catch((error) => {
console.error("Error:", error);
});
}
let serverData = document.querySelector(".getData");
serverData.addEventListener("click", getData);
DevTools: Network - POST ЗАПРОС КОТОРЫЙ ДОЛЖЕН НЕ РАБОТАТЬ
DevTools: Network - PUT,PATCH,DELETE ЗАПРОСЫ КОТОРЫЕ НЕ РАБОТАЮТ КАК И ЗАДУМЫВАЛОСЬ