http.post(url、postData、选项)未设置头

http.post(url、postData、选项)未设置头,post,angular,http-headers,Post,Angular,Http Headers,在以下代码中使用HTTP post方法时出现问题: let body = JSON.stringify(applicationLink); let requestHeaders = new Headers(); var headers = new Headers(); headers.set('Content-Type', ['application/json']); headers.set('Access-Control-Allow-Origin'

在以下代码中使用HTTP post方法时出现问题:

    let body = JSON.stringify(applicationLink);
    let requestHeaders = new Headers();

    var headers = new Headers();

    headers.set('Content-Type',  ['application/json']);
    headers.set('Access-Control-Allow-Origin', ['*']);

    let reqoptions =  new RequestOptions({
        headers: headers
    });



    return this._http.post(this._applicationLinksUrl + this._linkServicePath,body,reqoptions).map(res => res.json())
当我执行代码时,我看到一个错误:

XMLHttpRequest cannot load http..... Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http....' is therefore not allowed access.

Request Method:OPTIONS is mde instead of post
Request URL:http://localhost:7001/workprocess-service/resources/links
Request Method:OPTIONS
Status Code:200 OK
Remote Address:[::1]:7001
Response Headers
view source
Allow:OPTIONS,POST,GET,HEAD
Content-Type:application/vnd.sun.wadl+xml
Date:Thu, 26 May 2016 11:10:25 GMT
Last-Modified:Thu, 26 May 2016 09:02:27 CEST
Transfer-Encoding:chunked
Vary:Accept
X-Powered-By:Servlet/3.0 JSP/2.2
Request Headers
view source
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:access-control-allow-origin, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:localhost:7001
Origin:http....
Referer:http....
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36
而且我的数据没有链接到请求

如果我删除
reqoption

return this._http.post(this._applicationLinksUrl + this._linkServicePath,body).map(res => res.json())
请求是POST,但我收到错误415(不支持的媒体类型)


我的数据链接到请求

您需要让服务器设置头
访问控制允许源站
,因为您正在发送“跨源站资源共享”请求。这仅仅意味着您将请求发送到的url与您从中发送的url不同

我看到您的后端是
servlet/3.0
,您可以通过添加一个web过滤器来启用CORS“所有来源”

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.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;


@WebFilter(urlPatterns = {"*"})
public class CORSFilter implements Filter{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse) response;

        res.addHeader("Access-Control-Allow-Origin", "*");
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
    }
}

我试过了,但结果还是一样。我觉得投诉甚至没有送达法院server@Florence在飞行前请求“选项请求”成功返回之前,post请求不会被发送。那么,返回的选项请求是否没有错误?如果没有,错误是什么?是否仍
对飞行前请求的响应未通过访问…
?@Abdulrahman飞行前请求“选项请求”成功返回。请求URL:。。。。请求方法:选项状态代码:200正常远程地址:10.32.135.180:2005@Florence它们是否相同
10.32.135.180
test.smals…
,如果是,则只需将请求发送到
test.smals…
,根本不触发CORS。如果它们不相同,我编辑了我的答案,并将
WebFilter
更改为包含
urlPattern
,请重试。@Florence还有,当前的错误是什么?是否仍
对飞行前请求的响应未通过访问…
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.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;


@WebFilter(urlPatterns = {"*"})
public class CORSFilter implements Filter{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse) response;

        res.addHeader("Access-Control-Allow-Origin", "*");
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
    }
}