webuploader,跨域上传报错405,导致无法上传的原因及解决办法。

webuploader跨域上传时会发送两个请求:

一个是options请求,一个是post请求。在我一次项目的使用中,在进行上传的options请求的时候,系统报错。

HTTP 405 错误 – 方法不被允许 (Method not allowed)

然后查询了一下为什么会发送options请求。

OPTIONS请求首先发出,向服务器请求是否能够允许访问, 如若服务器端允许跨域, 则POST请求发送过去, 如果不被允许直接报500了.

也就是说,options等于是一次敲门吧,就是问问后台我能不能进去访问一下你的数据,如果不行,我就报500,你后面跟着的post也就甭进来了。如果允许,那你后面的小老弟们就被允许了。这种请求叫做Preflighted Request(带预检的跨域请求)。但是这次我返回的是405也就是说,我连第一次敲门都没敲上。之后问了后台的小伙伴,发现是后台没有定义options的请求。

于是我又换了ajax的上传方式,但是这一次并没有发生options请求,这就纳闷了,同样是跨域为什么ajax没有发送options请求呢?

原来ajax的请求是分为简单请求和非简单请求的。

简单请求:请求方法为 HEAD、GET、POST 中的 1 种请求, header 中没有自定义的请求头,Content-Type 为以下几种:application/x-www-form-urlencoded、multipart/form-data、text/plain等。

非简单请求:header 中包含自定义请求头的 AJAX 请求,PUT、DELETE 形式的 AJAX 请求,Content-Type 字段的类型是 application/json 等。

当 AJAX 发出的是非简单请求时,浏览器才会发送预检(OPTIONS)请求,而且这个预检请求在服务端是可以设置缓存时间的。也就是第一次访问时才会发送预检请求,在缓存的时间内再次请求是不会发送预检请求的。

所以说,ajax是因为简单请求没有报错,而webuploader是因为后台没有设置options所以报错了。

解决办法:1,使用ajax的简单请求。2.后台添加options的方法。

你可能感兴趣的:(跨域上传,webuploader,前端上传报错,报错405,ajax简单请求,跨域上传)