javascript - 请求的资源上不存在 'Access-Control-Allow-Origin' header 。因此不允许访问 Origin 'http://127.0.0.1:1111'

标签 javascript angularjs http tomcat

我有一个我无法真正理解的情况。两台计算机,其中一台我使用括号进行 Web 开发,另一台 (Linux) 我正在运行 Tomcat (7)。两者都在同一个局域网内(因此地址范围相同)。我收到标题中显示的错误,因此我完全卡住了。尝试了以下代码但没有成功:

var req = { url: l_url, method:"POST", headers: { 
                    'Content-Type': 'application/x-www-form-urlencoded' ,
    //                'Access-Control-Allow-Origin': '*',
                    'Access-Control-Allow-Origin': 'http://127.0.0.1',
                    'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
                    'Access-Control-Allow-Headers': 'Content-Type, application/x-www-form-urlencoded'
                    }, data: l_params } ;

$http(req).
            success(function(data, status, headers, config) {
                console.log("DB_Services - Success; data is: " + JSON.stringify(data)) ;
                 l_deferred.resolve(data);
            }).
            error(function(data, status, headers, config) {
                console.log("DB_Services - Error: " + data) ;
                 l_deferred.reject(status);
            });
             return l_deferred.promise;

错误(Chrome 的控制台)显示为:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin” header 。因此不允许访问来源“http://127.0.0.1:58275”。

我的搜索使我得出结论(不确定它是否正确)Tomcat 正在拒绝请求,即使我包含了上面显示的标题详细信息也是如此。

我还发现可以告诉 Tomcat 允许请求,但不知道如何以及在哪里配置它。

所以,我的问题是:

1) 我的 http 请求措辞是否正确?

2) 如何让 Tomcat 允许这个请求?

提前感谢您的任何建议。

最佳答案

您可以尝试在服务器端的 java 代码中添加一个过滤器类,示例代码

public class CorsFilter extends OncePerRequestFilter {

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
    response.addHeader("Access-Control-Allow-Origin", "*");
    if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) {
        //Add CORS "pre-flight" request
        response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
         response.addHeader("Access-Control-Allow-Headers", "Authentication-token");
        response.addHeader("Access-Control-Allow-Headers", "Content-Type");
        response.addHeader("Access-Control-Max-Age", "3600");
    }
    filterChain.doFilter(request, response);
}

将其添加到 web.xml 中

<filter>
    <filter-name>cors</filter-name>
    <filter-class>location.of.filter.class</filter-class>
</filter>
<filter-mapping>
    <filter-name>cors</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

并在你的 angular js 应用程序配置中尝试添加

app.config(['$httpProvider', function($httpProvider) {
    $httpProvider.defaults.useXDomain = true;
    delete $httpProvider.defaults.headers.common['X-Requested-With'];
}]);

这已经解决了我的问题,希望对你也有帮助。

关于javascript - 请求的资源上不存在 'Access-Control-Allow-Origin' header 。因此不允许访问 Origin 'http://127.0.0.1:1111',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34962154/

相关文章:

javascript - 在 GET 中发送 & 号

javascript - 无法使用meteorjs中的点击事件获取输入值

javascript - TinyMCE 将链接附加到当前 URL

javascript - 选择更改时,AngularJS 下拉多选不会取消选中

javascript - Angular2 添加 HTML 到动态元素

javascript - 如何实现 AJAX 响应的缓存?就像在 Internet Explorer 中一样

php - Slim Framework 的 HTTP 缓存不会过期

javascript - Angular 5 如何从 Assets 加载全局变量

javascript - 检查 Jade 中是否存在字段

angularjs - Angular js : Set HTTP status code for cancelled requests