我有一个我无法真正理解的情况。两台计算机,其中一台我使用括号进行 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/