如何使用Angular2向外部API发送POST请求?
我正在尝试利用CORS发布帖子请求。我偶然发现了几篇与CORS相关的文章/答案,但不知何故无法正常工作。如何使用Angular2向外部API发送POST请求?
据我所知,access-control-allow-origin: *
将被设置在服务器端来得到这个工作,但我在这里是一个角 - cli项目。
我的项目纯粹是基于Angular 2.1的,并且没有涉及后端服务器。有关如何正确设置它的任何建议将受到高度赞赏。
是我得到确切的错误是这样的:
"NetworkError: 404 Not Found - https://flowxo.com/hooks/a/rbpja7r2/?usertype=User"
和此警告在控制台:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the
remote resource at https://flowxo.com/hooks/a/rbpja7r2/?usertype=User.
(Reason: CORS header 'Access-Control-Allow-Origin' missing).
更新:
这里是我如何努力使POST请求:
let headers = new Headers();
headers.append('Access-Control-Allow-Headers', 'Content-Type');
headers.append('Content-Type', 'application/json');
headers.append('Access-Control-Allow-Methods', 'POST, OPTIONS');
headers.append('Access-Control-Allow-Origin', '*');
return this.http.post(
this.flowxoUrl,
JSON.stringify(formData),
{headers: headers}
)
.map((res:Response) => res.json())
.catch((error:any) => Observable.throw(error.json().error || 'Server error')); //...errors if any
这是服务器端问题,而不是Angular。
您的服务器应回应Access-Control-Allow-Origin
表头。
的Java(春季)例如:
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class SimpleCorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;
response.setHeader("Access-Control-Allow-Origin", "*"); //you can specify domains here * - is a wildcard, it will allow all origins to request
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with, authorization, content-type");
if("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
filterChain.doFilter(servletRequest, servletResponse);
}
}
@Override
public void destroy() {}
}
这是我的问题。如果项目不涉及后端服务器,我是否可以不使用CORS? –
它涉及后端服务器。它是你的还是不是。如果服务器所有者不允许您的前端来源进行查询,则无法执行任何操作。 –
这是完全有道理的,但我的问题在于我是否正确地做事情?请使用代码查看更新后的问题。 –
你可以分享你的服务器端代码,也有一些镀铬的插件,使人们有可能使CORS请求。 –
不涉及后端服务器 –
在这种情况下,您将需要使用Chrome插件,该插件应该可以工作https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=zh-CN –