无法加载“端点”:预检响应中的 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的主要内容,如果未能解决你的问题,请参考以下文章
AngularJs - 服务器抛出异常''XMLHttpRequest 无法加载预检的“URL”响应无效(重定向)'
XMLHttpRequest 无法加载。预检响应具有无效的 HTTP 状态代码 405