nginx配置 解决ajax请求跨域问题
2017-12-06 14:29
851 查看
文章来源:http://to-u.xyz/2016/06/30/nginx-cors/
要实现本地
并且要支持
*代表任何域都可以访问,可以改成只允许某个域访问,如
背景描述
最近在研究RESTful API接口设计,使用的是
Nginx,
要实现本地
http://127.0.0.1跨域访问服务器端
http://api.zlzkj.com,
并且要支持
DELETE
PUT等请求。
跨域配置
只需要在Nginx配置文件里加入以下配置,即可开启跨域
add_header Access-Control-Allow-Origin *;
*代表任何域都可以访问,可以改成只允许某个域访问,如
Access-Control-Allow-Origin: http://www.zlzkj.com[/code]。 这样的配置虽然开启了跨域请求,但只支持GETHEADPOSTOPTIONS请求,使用DELETE发起跨域请求时,浏览器出于安全考虑会先发起OPTIONS请求,服务器端接收到的请求方式就变成了OPTIONS,所以引起了服务器的405 Method Not Allowed。
所以要对OPTIONS请求进行处理if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
#其他头部信息配置,省略...
return 204;
}
当请求方式为OPTIONS时,设置Allow的响应头,重新处理这次请求。
配置好并重启Nginx,刷新页面重新发起请求,在控制台里你会发现,出现了二次请求,
第一次是OPTIONS请求,第二次才是DELETE请求,这就是对OPTIONS请求进行处理的结果,到这里总算完成了一次DELETE跨域请求了。完整配置参考
add_header Access-Control-Allow-Origin *;location / {
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
return 204;
}
index index.php;
try_files $uri @rewriteapp;
}
放到配置文件的server {}里参考文章
http://www.rails365.net/articles/cong-kua-yu-dao-cors-yi
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
https://segmentfault.com/q/1010000005837213
相关文章推荐
- 用反向代理nginx proxy_pass配置解决ie8 ajax请求被拦截问题 ie8用nginx代理实现跨域请求访问 nginx405正向代理request_uri
- Nginx解决ajax跨域请求问题
- Spring Boot学习总结(6)——SpringBoot解决ajax跨域请求问题的配置
- ajax请求中遇到的跨域问题的解决办法(jsonp)
- 通过jsonp解决ajax的跨域请求问题
- 启用 CORS 来解决这个问题(ajax跨域请求)
- 用Nginx和Apache的反向代理解决Ajax的跨域问题
- 解决ajax跨域请求数据cookie丢失问题
- 夺命雷公狗jquery---62通过$.getJSON来解决Ajax跨域请求问题
- 几个问题(十一)-------ajax是否能跨域请求,解决的办法
- 用Nginx和Apache的反向代理解决Ajax的跨域问题
- ajax请求ashx跨域问题解决办法
- 用iframe设置代理解决ajax跨域请求问题
- 用Nginx和Apache的反向代理解决Ajax的跨域问题
- 跨域解决 & ajax post 请求springmvc ctr 问题
- Nginx与Tomcat、Client之间请求的长连接配置不一致问题解决[转]
- 前端使用Jquery的getJSON方法,后台使用PHP,解决IE和火狐Firefox中存在的跨域ajax请求问题。
- WebApp开发:ajax请求跨域问题的解决