如何解决POST方法跨域出错(GET方法正常)?

weihome
  • 55

我把前端静态页面放在了阿里云的oss对象存储上,服务端(node)跑在云服务器上;
前端需要跨域访问服务端的接口,get方法正常,post方法出错了;post方法之前会发送一个预请求,methodoptions,服务端的路由表是不是需要添加对应的OPTIONS路由,难道所有的post路由都要写一遍对应的optons路由?还请指点迷津,🙏🙏🙏

PS: 腾讯云服务器的带宽是个1M的小破水管,前端也放服务器的话也就没有跨域问题,但是因为带宽太小首屏要等待10秒以上,所有我想服务器只做服务端的功能,前端只从服务器调接口。

get方法正常:
clipboard.png

post方法出错:
clipboard.png

nginx设置跨域的配置:
clipboard.png

node部分路由表:

clipboard.png

回复
阅读 5.2k
4 个回答

原本我是想在node里面加一个中间件,凡是methodoptions的请求一律返回204。不过我觉得配置nginx应该也能实现而且更快捷,上网找了一下,在nginx.conf加上了这段代码

if ($request_method = 'OPTIONS') {
  add_header 'Access-Control-Allow-Origin' '*';
  add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
  add_header 'Access-Control-Allow-Headers' 'Content-Type';
  add_header 'Access-Control-Max-Age' 1728000;
  add_header 'Content-Type' 'text/plain charset=UTF-8';
  add_header 'Content-Length' 0;
  return 204;
}

实测后每个post请求都会先发起一个options预请求,得到服务端的回应后,根据回应的信息,判断是否自动发起post请求

clipboard.png

第一个(预请求)
clipboard.png

第二个(实际的请求)

clipboard.png

很多跨域问题就是通过get的方式来解决的。

你这个都404了,应该不是跨域的问题。

GeneXu
  • 2
新手上路,请多包涵

在请求里加上withCredentials: true试试

你知道吗?

宣传栏