axios配合服务器端设置跨域访问
1.IIS配置
axios为了实现跨域访问,这里使用IIS进行实例。要是实现跨域访问,打开IIS服务器中HTTP响应头一栏,看到里面只有一个选项:
浏览器请求时,会出现跨域错误:
这个时候,服务器HTTP响应头中添加:”Access-Control-Allow-Origin -> *”
设置完成之后,发现还是有错误:
这是因为axios默认的get请求会添加一个 “Access-Control-Request-Headers: content-type” 的请求头,
所以应该继续添加IIS服务器的响应头 “ Access-Control-Allow-Headers -> Origin, X-Requested-With, Content-Type, Accept “
这样便可以实现跨域访问了,如果其他后台服务,比如Spring Boot编写的语言,只需要将设置相应投即可,例:response.setHeader(“Access-Control-Allow-Headers”, “ Origin, X-Requested-With,Content-Type, Accept”);
有时候为了实现后台得到前台的用户身份,需要设置:axios.defaults.withCredentials = true; 将cookie信息携带,后台可以做用户验证。开启这个选项之后,后台可以拿到身份认证信息,但是前台会报错:
这个时候要修改:Access-Control-Allow-Origin -> *,将其设置为具体的带端口号的访问形式:比如前台的访问页面是localhot:8088,则设置:
这个时候,前台还是有错误,比如:
这个时候,IIS中的响应头,应该添加:”Access-Control-Allow-Credentials -> true”
最后大功告成:(这里错误是服务器错误,不是跨域的问题)
1 | Access-Control-Allow-Credentials -> true |
1.如何解决出现AXIOS的Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response
2.跨域问题服务端解决办法 Request header field Authorization is not allowed by Access-Control-Allow-Headers
3.ajax跨域post提交json字符串报错Request header field Content-Type is not allowed by Access-Control-Allow-Header
4.CORS: Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true
5.CORS: credentials mode is ‘include’
6.axios跨域请求报错:Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response. 增加 Content-Type
2.nginx配置
使用nginx配置跨域的时候,即便是设置了 add_header Access-Control-Allow-Origin ,还是有可能在OPTION请求中出现403错误。
这个时候应该设置OPTION请求返回return 204状态码就好了。
nginx配置的内容如下:
1 | ## 设置跨域白名单 |
其中如果不配置$request_method = ‘OPTIONS’这个,还是会出现:”Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource”
1.Nginx配置跨域请求 Access-Control-Allow-Origin * (这里讲了如何配置预检请求的通过和原理,其实应该仔细的查看)
2.如何解决出现AXIOS的Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response. (这里讲了如何通过代码的方式进行设置Content-Type)
3.Nginx 跨域 add_header 403状态下无效 (这个多半无效)
3.凭据不支持,如果 CORS 头 ‘Access-Control-Allow-Origin’ 为 ‘*’)
服务器已经设置了跨域,但是请求的时候,还是报错了,这个主要就是在设置的时候开启了cookie支持,关闭之后就可以了。
1 | const server = axios.create({ |
1.HTTP访问控制(CORS)踩坑小记 将 XMLHttpRequest 的 withCredentials 标志设置为 true,从而向服务器发送 Cookies。服务器端的响应需要携带 Access-Control-Allow-Credentials: true ,浏览器才会把响应内容返回给请求的发送者。