I'm trying to post a message on a Kafka cluster on Confluent cloud. It works fine on Postman, but when I try on my Svelte app, I got this error:
Access to fetch at <ENDPOINT> from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: 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.
The request looks like this:
var apiHeaders = new Headers();
apiHeaders.append("Content-Type", "application/json");
apiHeaders.append("Authorization", "Basic <BASE64>");
const clusterId = '<CLUSTERID>';
const restEndpoint = '<ENDPOINT>';
const postMessage = (data, topic) => {
let raw = JSON.stringify({
"value": {
"type": "JSON",
"data": {
data
}
}
});
let requestOptions = {
method: 'POST',
headers: apiHeaders,
body: raw,
redirect: 'follow'
};
fetch(`${restEndpoint}/kafka/v3/clusters/${clusterId}/topics/${topic}/records`, requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
}
export const sendLogMessage = (data) => {
postMessage(data, '<TOPICNAME>');
}
My headers are set like this on AWS Amplify:
And also my headers are set like this on svelte.config.js
:
import adapter from '@sveltejs/adapter-static';
// import adapter from '@sveltejs/adapter-node';
// import adapter from '@sveltejs/adapter-auto';
// import firebase from "svelte-adapter-firebase";
/** @type {import('vite').Plugin} */
const viteServerConfig = {
name: 'log-request-middleware',
configureServer(server) {
server.middlewares.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST");
res.setHeader("Cross-Origin-Resource-Policy", "cross-origin");
res.setHeader("Cross-Origin-Opener-Policy", "same-origin");
res.setHeader("Cross-Origin-Embedder-Policy", "require-corp");
res.setHeader("Access-Control-Allow-Headers", "Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-requested-with");
next();
});
}
};
/** @type {import('@sveltejs/kit').Config} */
const config = {
kit: {
adapter: adapter(), // for the firebase adapter use "firebase()" instead of "adapter()"
vite: {
plugins: [viteServerConfig]
},
prerender: {
default: true
},
trailingSlash: 'never'
}
};
export default config;