request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource
本问题已经有最佳答案,请猛点这里访问。
我在我的示例应用程序中使用backbonejs。 以前,我在nodejs上托管这个,但现在想在tomcat上运行它,但是这个更改在客户端浏览器上给了我一个错误。 我搜索并发现要解决此问题,必须将crossdomain(https://stackoverflow.com/a/33820700/5086633)设置为true。 不知道我应该怎样和应该处理这个问题。 在这方面的任何帮助都非常感谢。
1 2 3 4 5 | XMLHttpRequest cannot load http://localhost:8080/backbonejs/testpost. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 403. |
使用ajaxPrefilter,模型和集合如下。
1 2 3 4 5 6 7 8 9 10 | $.ajaxPrefilter( function( options, originalOptions, jqXHR ) { options.url = 'http://localhost:8080/backbonejs' + options.url; }); var Banks = Backbone.Collection.extend({ url: '/testpost' }); var Bank = Backbone.Model.extend({ urlRoot: '/testpost' }); |
在express.js中:
1 2 3 4 5 | app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin","*"); res.header("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept"); next(); }); |
在本机NodeJS服务器中:
1 2 | res.header("Access-Control-Allow-Origin","*"); res.header("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept"); |
也可以用这个来实现......
这篇文章很方便如何在Spring Security 3.2中设置Access-Control-Allow-Origin过滤器
无需在tomcat服务器中执行此操作。 另外,我没有在这里使用AddFilterBefore。 下面的代码足以解决问题。
1 2 3 4 5 6 | rootContext.setServletContext(container); FilterRegistration.Dynamic corsFilter = container.addFilter("corsFilter", CORSFilter.class); corsFilter.addMappingForUrlPatterns(null, false,"/*"); |
我在Web.xml中添加了这个功能。
1 2 3 4 5 6 7 8 | <filter> <filter-name>CorsFilter</filter-name> <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> </filter> <filter-mapping> <filter-name>CorsFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |