Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Headers

2020/10/12 22:01 · javascript ·  · 0评论

我正在尝试使用发布请求将文件发送到服务器,但是在发送请求时会导致错误:

Access-Control-Allow-Headers不允许请求标头字段Content-Type。

所以我搜索了错误并添加了标题:

$http.post($rootScope.URL, {params: arguments}, {headers: {
    "Access-Control-Allow-Origin" : "*",
    "Access-Control-Allow-Methods" : "GET,POST,PUT,DELETE,OPTIONS",
    "Access-Control-Allow-Headers": "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"
}

然后我得到错误:

Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Origin

所以我用谷歌搜索,我唯一能找到的类似问题是提供了一半答案,然后关闭了主题。我应该添加/删除哪些标题?

服务器(POST请求发送到服务器Access-Control-Allow-Headers的响应中需要包含标头(等)将它们放入客户的请求中无效。

这是因为服务器需要指定它接受跨域请求(并允许Content-Type请求标头,依此类推)–客户端无法自行决定给定服务器应允许CORS。

我有同样的问题。在jQuery文档中,我发现:

对于跨域请求,内容类型设置为比其他任何东西application/x-www-form-urlencodedmultipart/form-datatext/plain将触发浏览器发送预检OPTIONS请求到服务器。

因此,尽管服务器允许跨源请求但不允许跨源请求Access-Control-Allow-Headers,但它将引发错误。默认情况下,角度内容类型为application/json,它正在尝试发送OPTION请求。尝试覆盖有角度的默认标头或Access-Control-Allow-Headers在服务器端允许这是一个角度样本:

$http.post(url, data, {
    headers : {
        'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8'
    }
});

如果这可以帮助任何人,(即使这有点差,因为我们必须只允许出于开发目的使用它)这是一个Java解决方案,因为我遇到了相同的问题。[编辑]不要使用通配符*,因为这是一个不好的解决方案,localhost如果确实需要在本地工作,请使用通配符*

public class SimpleCORSFilter implements Filter {

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) res;
    response.setHeader("Access-Control-Allow-Origin", "my-authorized-proxy-or-domain");
    response.setHeader("Access-Control-Allow-Methods", "POST, GET");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
    chain.doFilter(req, res);
}

public void init(FilterConfig filterConfig) {}

public void destroy() {}

}

服务器(POST请求发送到的服务器)需要在其响应中包含Content-Type标头。

这是要包括的典型标头的列表,包括一个自定义“ X_ACCESS_TOKEN”标头:

"X-ACCESS_TOKEN", "Access-Control-Allow-Origin", "Authorization", "Origin", "x-requested-with", "Content-Type", "Content-Range", "Content-Disposition", "Content-Description"

这就是您的http服务器人员需要为要将请求发送到的Web服务器进行配置。

您可能还想让服务器人员公开“ Content-Length”标头。

他会将其识别为跨域资源共享(CORS)请求,并应了解进行这些服务器配置的含义。

有关详细信息,请参见:

您可以使用以下方法在PHP中激活适当的标头:

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, X-Requested-With");

以下对我来说适用于nodejs:

xServer.use(function(req, res, next) {
  res.setHeader("Access-Control-Allow-Origin", 'http://localhost:8080');
  res.setHeader('Access-Control-Allow-Methods', 'POST,GET,OPTIONS,PUT,DELETE');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type,Accept');

  next();
});

您尝试设置的标题响应标题。响应中,必须由您向其发出请求的服务器提供它们。

他们在客户端上没有位置。如果可以由需要许可的站点而不是拥有数据的站点授予许可,那么授予许可的方法将毫无意义

如果有人在Express服务器上遇到此问题,请添加以下中间件

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

如果您在PC或Mac上的Chrome中测试了对ionic2或angularjs 2的一些JavaScript请求,则请确保为chrome浏览器安装了CORS插件,以允许跨源访问。

mayba的get请求将不需要它就可以工作,但是post and puts和delete将需要您安装cors插件以进行测试,而不会出现问题,definitley并不酷,但是我不知道人们如果没有CORS插件怎么做。

并确保json响应不会因某些json状态返回400

这是后端问题。如果在后端使用Sails api更改cors.js并在此处添加您的文件

module.exports.cors = {
  allRoutes: true,
  origin: '*',
  credentials: true,
  methods: 'GET, POST, PUT, DELETE, OPTIONS, HEAD',
  headers: 'Origin, X-Requested-With, Content-Type, Accept, Engaged-Auth-Token'
};

Asp Net Core中,可以快速使它为开发工作;在中Startup.csConfigure method添加

app.UseCors(options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());

就我而言,我将@HeaderParam作为几个参数接收到Web服务方法中。

这些参数必须以这种方式在CORS过滤器中声明:

@Provider
public class CORSFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {

        MultivaluedMap<String, Object> headers = responseContext.getHeaders();

        headers.add("Access-Control-Allow-Origin", "*");
        ...
        headers.add("Access-Control-Allow-Headers", 
        /*
         * name of the @HeaderParam("name") must be declared here (raw String):
         */
        "name", ...);
        headers.add("Access-Control-Allow-Credentials", "true");
        headers.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");   
    }
}

Request header field Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers错误表示Access-Control-Allow-Origin响应未处理或不允许HTTP标头字段。Access-Control-Allow-Origin从请求标头中删除字段。

如果您使用localhostPHP并将其设置为可解决此问题:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Content-Type'); 

从您的前端使用:

{headers: {"Content-Type": "application/json"}}

和繁荣不再有问题localhost

对我来说,在服务器web.config文件中添加了以下内容

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="https://other.domain.com" />
            <add name="Access-Control-Allow-Methods" value="GET,POST,OPTIONS,PUT,DELETE" />
            <add name="Access-Control-Allow-Headers" value="Content-Type,X-Requested-With" />
        </customHeaders>
    </httpProtocol>
<system.webServer>
本文地址:http://javascript.askforanswer.com/access-control-allow-headersbuyunxuqingqiubiaotouziduanaccess-control-allow-headers.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!