无法加载“端点”:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 If-Modified-Since

Posted

技术标签:

【中文标题】无法加载“端点”:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 If-Modified-Since【英文标题】:Failed to load 'endpoint': Request header field If-Modified-Since is not allowed by Access-Control-Allow-Headers in preflight response 【发布时间】:2018-05-11 22:57:24 【问题描述】:

我使用 nodejs 创建了一个 API 服务,当我通过浏览器访问时它工作正常。但是当我尝试从 Web 应用程序(MEAN 应用程序)调用它时,得到 "Failed to load http://localhost:2020/api/posts: Request header field If-Modified-Since is not allowed by Access-Control-Allow - 预检响应中的标题" 问题。

在 API 服务的 index.js 中添加以下代码。

    // Add headers
    app.use(function (req, res, next) 

    // Website you wish to allow to connect
    res.setHeader('Access-Control-Allow-Origin', '*');

    // Request methods you wish to allow
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

    // Request headers you wish to allow
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

    // Set to true if you need the website to include cookies in the requests sent
    // to the API (e.g. in case you use sessions)
    res.setHeader('Access-Control-Allow-Credentials', true);

    // Pass to next layer of middleware
    next();
);

并在网络应用程序的控制器中添加以下行,

app.config(["$routeProvider", "$httpProvider", function ($routeProvider, $httpProvider) 
    $httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = '*';

]);

但没有运气添加上述行。如何解决这个问题?

谢谢。

【问题讨论】:

【参考方案1】:

您需要在服务器代码中将If-Modified-Since 添加到Access-Control-Allow-Headers

res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type,If-Modified-Since');

此外,您在客户端触摸 HTTP 标头的部分对我来说似乎没用,我认为您对此无能为力。

【讨论】:

感谢您的回复。我已应用您的答案并得到另一个错误在预检响应中 Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Headers。我通过从 Web 应用程序的控制器中删除以下行 $httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = '*'; 解决了这个问题。现在它工作正常并被调用服务并成功收到响应。

以上是关于无法加载“端点”:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 If-Modified-Since的主要内容,如果未能解决你的问题,请参考以下文章

angular2 和 Yii2 应用程序中的预检错误

Angular 2无法加载预检响应无效(重定向)[重复]

AngularJs - 服务器抛出异常''XMLHttpRequest 无法加载预检的“URL”响应无效(重定向)'

XMLHttpRequest 无法加载。预检响应具有无效的 HTTP 状态代码 405

XMLHttpRequest 无法加载 [url] 预检响应具有无效的 HTTP 状态代码 405

XMLHttpRequest 无法加载并且预检响应具有无效的 HTTP 状态代码 405