栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

AngularJS $ resource发出HTTP OPTIONS请求而不是$ save方法的HTTP POST

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

AngularJS $ resource发出HTTP OPTIONS请求而不是$ save方法的HTTP POST

我知道回答自己的问题可能有点不好,但是在发布此问题几天后我就发现了问题。

一切都取决于浏览器如何管理CORS。当使用非“简单”的Javascript发出跨域请求(即GET请求-
解释该

query()
功能为何起作用)时,浏览器将自动向指定的URL / URI发出HTTP OPTIONS请求,称为“ pre-
航班”请求或“承诺”。只要远程源返回200状态的HTTP状态代码以及响应标头中将接受的内容的相关详细信息,浏览器就会继续执行原始的Javascript调用。

这是一个简短的jQuery示例:

function makeRequest() {    // browser makes HTTP OPTIONS request to www.myotherwebsite.com/api/test    // and if it receives a HTTP status pre of 200 and relevant details about    // what it will accept in HTTP headers, then it will make this POST request...    $.post( "www.myotherwebsite.com/api/test", function(data) {        alert(data);    });    // ...if not then it won't - it's that simple.}

我要做的就是在响应头中添加服务器将接受的详细信息:

// apply this rule to all requests accessing any URL/URIapp.all('*', function(req, res, next) {    // add details of what is allowed in HTTP request headers to the response headers    res.header('Access-Control-Allow-Origin', req.headers.origin);    res.header('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS');    res.header('Access-Control-Allow-Credentials', false);    res.header('Access-Control-Max-Age', '86400');    res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');    // the next() function continues execution and will move onto the requested URL/URI    next();});

然后在Express路由之前插入以下几行,以简单地为每个OPTIONS请求返回HTTP 200状态代码:

// fulfils pre-flight/promise requestapp.options('*', function(req, res) {    res.send(200);});

希望这可以帮助在此页面上偶然遇到相同问题的任何人。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/636274.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号