SvelteKit搭配Express时跨站POST提交被禁止的问题排查
SvelteKit + Express 环境下POST请求403错误求助
我的环境是SvelteKit应用搭配Express服务器(用于处理WebSocket)。POST请求在Vite开发环境下正常运行,但在Express生产环境里完全没法用,会出现状态码403的错误,提示“Cross-site POST form submissions are forbidden”,引用策略为“strict-origin-when-cross-origin”。
我查过Stack Overflow上的相关问题,但除了禁用CSRF校验这种不安全的方案外,其他解决办法都不管用。也翻了SvelteKit官方的Node适配器文档,没找到能解决的方法。
我已经试过这些办法:
- 在.env文件中添加
ORIGIN=http://localhost:3000,安装了dotenv依赖并在服务器文件里加了dotenv.config(),但没效果。 - 在
svelte.config.js中设置csrf: {checkOrigin: false}能解决问题,但这个方法不安全,不推荐使用。 - 终端运行
node -r dotenv/config build,输出“Listening on 0.0.0.0:3000”但Express服务器完全启动不了,不确定是否需要把这个命令加到package.json里,而且文件里也没有node build相关配置。 - 用
node -r dotenv/config server.js启动Express服务器后,访问localhost:3000会出现“Invalid request body”(状态码400)错误。
就算读了不少相关博客,配置SvelteKit的WebSocket还是让人头疼。
我的server.ts代码如下:
import express from "express"; import { handler } from "./build/handler.js"; import { attach_sockets } from "./sockets.js"; import dotenv from "dotenv"; dotenv.config(); const PORT = 3000; const app = express(); const server = app.listen(PORT, () => { console.log("server is listening on port", PORT); }); app.use(handler); attach_sockets(server);
内容的提问来源于stack exchange,提问作者Script Raccoon
相关产品推荐
相关产品推荐

