SvelteKit开发模式下跨站POST提交被禁止问题求助
问题:SvelteKit 跨域POST表单提交被禁止
本地开发环境中,SvelteKit应用部署在http://localhost:5173,前端有一台运行在http://localhost:8057的Nginx服务器,用于提供静态文件并代理需要SvelteKit处理的请求。
在http://localhost:8057/login页面提交登录表单时,页面仅显示提示:"Cross-site POST form submissions are forbidden"。
已尝试的解决方案
设置
ORIGIN环境变量:.env文件内容:ORIGIN=http://localhost:8057通过服务端
import { env } from '$env/dynamic/private';打印确认变量已生效,但问题仍存在;也尝试启动SvelteKit时直接传入变量(ORIGIN=http://localhost:8057 npm run dev),结果依旧。在Nginx中添加
proxy_set_header Origin http://localhost:5173;可以解决问题,但这几乎等同于关闭CSRF防护,不愿采用该方案。尝试文档推荐的
x-forwarded-proto和x-forwarded-host配置:.env文件内容:PROTOCOL_HEADER=x-forwarded-proto HOST_HEADER=x-forwarded-host ORIGIN=http://localhost:8057Nginx配置:
location @sveltekit { proxy_pass http://localhost:5173; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; }但问题仍然存在。
代码运行说明
- 执行
docker-compose up --build启动Nginx - 进入
web-app目录,先运行npm install安装依赖,再执行npm run dev启动SvelteKit应用 - Mac用户需回滚特定提交,因为Docker host网络模式在Mac上无法运行
内容的提问来源于stack exchange,提问作者Cédric Van Rompay
相关产品推荐
相关产品推荐

