У меня есть бэкэнд, разработанный в netuno с API в Java, и я хочу отправить PDF, у меня нет ошибок при отправке Excel, но по какой-то причине я не получаю его с PDF,мой внешний интерфейс - «реаги» и «редукс».
При тестировании в почтальоне работает pdf (и да, я знаю, что в почтальоне нет проблем cors), в браузере, если я отправляю поврежденный pdf, он отправляетсяна веб-интерфейс, но если PDF имеет правильные данные, он больше не передает в Cors.
Я уже установил параметры на стороне сервера для получения правильных заголовков
_header.response.set('Access-Control-Allow-Origin', '*')
_header.response.set('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE, OPTIONS')
_header.response.set('Access-Control-Allow-Headers', 'Content-Type, Expires, Cache-Control, must-revalidate, post-check=0, pre-check=0, Pragma')
_header.response.set('Access-Control-Allow-Credentials', 'true')
Что касается Java, PDF идет со следующими заголовками
HttpServletResponse res = proteu.getServletResponse();
res.setHeader("Expires", "0");
res.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
res.setHeader("Pragma", "public");
res.setContentType("application/pdf");
res.setContentLength(baos.size());
OutputStream out = res.getOutputStream();
baos.writeTo(out);
out.flush();
out.close();
Мой вызов извлечения похож на это прямо сейчас:
import fetch from "cross-fetch";
const FileSaver = require("file-saver");
const qs = require("qs");
fetch("myEndPoint", {
headers: {
accept: "application/pdf",
"content-type": "application/x-www-form-urlencoded"
},
referrerPolicy: "no-referrer-when-downgrade",
method: "POST",
mode: "no-cors",
body: qs.stringify({
...action.value
})
})
.then(resp => resp.blob())
.then(blob =>
FileSaver.saveAs(
blob,
"myPdf" +
new Date(Date.now())
.toLocaleString()
.replace(new RegExp("/", "g"), "")
.split(",")[0] +
".pdf"
)
);
когда я выполняю код в браузере, этотак оно и есть:
fetch("myEndPoint", {
credentials: "omit",
headers: { accept: "application/pdf", "content-type": "application/x-www-form-urlencoded", "sec-fetch-mode": "cors" },
referrer: "http://localhost:3000/foo",
referrerPolicy: "no-referrer-when-downgrade",
body:
"myData=foo",
method: "POST",
mode: "cors"
});
И я получаю следующий код ошибки:
Access to fetch at 'myEndPoint' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
, что странно, учитывая, что все остальные вызовы работают, кроме этого, и единственная разница заключается втип документа, который я получаю.
Я хаНа стороне сервера нет ошибок.
Почему Chrome редактирует mode: "no-cors"
для "mode: "cors"
??
, если я пытаюсь использовать "sec-fetch-mode: no-cors"в заголовке вызова извлечения Chrome отвечает:
Refused to set unsafe header "sec-fetch-mode"