前端发送ajax POST请求 报错,postman没问题

来源:6-8 API对接mysql(博客更新和删除)

慕丝4001486

2021-07-24

前端原生js发送ajax post请求
![图片描述

图片描述

图片描述

图片描述

处理了options也不行,postman什么都不用处理都可以发送。。。

已解决

是options预请求的跨域问题,在nodejs中把options跨域问题解决后还是出错是因为,在options跨域后,前端Ajax设置请求头的contentType只能是application/x-www-form-urlencoded,multipart/form-data,text/plain三种格式之一,把Ajax请求头设置contentType为application/x-www-form-urlencoded后就正常执行了。


在正式跨域的请求前,浏览器会根据需要,发起一个“PreFlight”(也就是Option请求),用来让服务端返回允许的方法(如get、post),被跨域访问的Origin(来源,或者域),还有是否需要Credentials(认证信息)
三种场景:

如果跨域的请求是Simple Request(简单请求 ),则不会触发“PreFlight”。Mozilla对于简单请求的要求是:
以下三项必须都成立:

只能是Get、Head、Post方法
除了浏览器自己在Http头上加的信息(如Connection、User-Agent),开发者只能加这几个:Accept、Accept-Language、Content-Type、。。。。
Content-Type只能取这几个值:
application/x-www-form-urlencoded
multipart/form-data
text/plain

写回答

2回答

双越

2021-07-25

提示跨域了。

看你代码截图,是设置了允许跨于,但不知道是否真正执行了这几行  res.setHeader 的代码。

如果确定执行了,你可以下载讲师代码,运行一下,然后对比看看啥区别。

0
2
慕丝4001486
已解决,是options预请求的跨域问题,在nodejs中把options跨域问题解决后还是出错是因为,在options跨域后,前端Ajax设置请求头的contentType只能是application/x-www-form-urlencoded,multipart/form-data,text/plain三种格式之一,我把Ajax请求头设置contentType为application/x-www-form-urlencoded后就正常执行了。 在正式跨域的请求前,浏览器会根据需要,发起一个“PreFlight”(也就是Option请求),用来让服务端返回允许的方法(如get、post),被跨域访问的Origin(来源,或者域),还有是否需要Credentials(认证信息) 三种场景: 如果跨域的请求是Simple Request(简单请求 ),则不会触发“PreFlight”。Mozilla对于简单请求的要求是: 以下三项必须都成立: 只能是Get、Head、Post方法 除了浏览器自己在Http头上加的信息(如Connection、User-Agent),开发者只能加这几个:Accept、Accept-Language、Content-Type、。。。。 Content-Type只能取这几个值: application/x-www-form-urlencoded multipart/form-data text/plain
2021-07-25
共2条回复

双越

2021-07-25

看下 chrome http 请求的截图,返回什么

0
2
慕丝4001486
已上传图片
2021-07-25
共2条回复

Node.js+Express+Koa2+Nest.js 开发服务端

从入门到实战,一站式掌握 Node.js+Express+Koa2

4051 学习 · 2006 问题

查看课程