简体   繁体   English

AngularJS $ http获取方法错误,例如“响应预检请求”

[英]AngularJS $http Get method error like “Response to preflight request”

 $http({
    method: 'GET',
    url : 'http: //esbuatt1wm.ito.unisys.com:7001/invoke/wm.server/ping',
        timeout: 10000,
    headers: {
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Methods': 'GET,POST,PUT,DELETE,OPTIONS,JSONP',
        'Content-Type': '*',
        'Access-Control-Allow-Headers': 'Content-Type',
        'Access-Control-Allow-Credentials': 'true'
    },
    params: {}, // Query Parameters (GET)
    transformResponse: function(data, status, headers, config) {
        console.log('transferms data ' + data);
        // string -> XML document object
        return $.parseXML(data);
    }
 }).success(function(data, status, headers, config) {
    // XML document object
    $scope.xml = data.documentElement.innerHTML;
    console.dir('xml data ' + $scope.xml);
 }).error(function(data, status, headers, config) {
    $window.alert('ERROR.');
 });
#############Error #############错误

XMLHttpRequest cannot load http://esbuatt1wm.ito.unisys.com:7001/invoke/wm.server/ping . XMLHttpRequest无法加载http://esbuatt1wm.ito.unisys.com:7001/invoke/wm.server/ping Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. 对预检请求的响应未通过访问控制检查:请求的资源上不存在“ Access-Control-Allow-Origin”标头。 Origin ' http://localhost:1337 ' is therefore not allowed access. 因此,不允许访问源' http:// localhost:1337 '。

Use following code in config function 在配置函数中使用以下代码

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

Providing header will not help you, as you still hitting the server from you local ie localhost. 提供标头将无济于事,因为您仍然从本地(即本地主机)访问服务器。 The issue is when you hit sever from local, server will treat the request as of different domain request. 问题是当您从本地命中服务器时,服务器会将请求视为不同的域请求。

Either you can use express.js, (express is a server). 您都可以使用express.js(express是服务器)。 In this case, server is communicating with server so, this error will get removed. 在这种情况下,服务器正在与服务器通信,因此此错误将被消除。

Or if at the server you trying to hit, your backend code persists, enable CORS request for that particular call or any other call when you will make. 或者,如果在您尝试命中的服务器上,您的后端代码仍然存在,请在进行呼叫时为该特定呼叫或任何其他呼叫启用CORS请求。

If you are using spring boot you can use the following code: 如果您使用的是Spring Boot,则可以使用以下代码:

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Component
public class SimpleCORSFilter implements Filter {

private final Logger log = LoggerFactory.getLogger(SimpleCORSFilter.class);

public SimpleCORSFilter() {
    log.info("SimpleCORSFilter init");
}

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;

    response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
    response.setHeader("Access-Control-Allow-Credentials", "true");
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me");

    chain.doFilter(req, res);
}

@Override
public void init(FilterConfig filterConfig) {
}

@Override
public void destroy() {
}

}`

enabling it will solve your problem. 启用它可以解决您的问题。 These are two option by which you can overcome from this error. 这是您可以克服此错误的两种选择。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM