我正在尝试删除应用程序中不必要的飞行前请求。为此,我简化了请求的一些部分,删除了自定义头等,但遇到了一个问题-GET请求现在可以在没有预飞行的情况下正常工作,但POST请求仍然存在。
我遵循了以下要求:
GET和POST请求都通过一个httpinvoke调用。
例如,GET请求不是以飞行前开始的:
URL:<代码>http://mydomain/APIEndpoint/GETRequest?Id=346089
请求方法:获取
请求标题:
接受:*/*
接受编码:gzip,deflate
接受-语言:uk-U A, uk; q=0.8, ru; q=0.6, en-US; q=0.4, en; q=0.2
缓存-控制:无-缓存
连接:保持活动
内容类型:文本/纯文本;字符集=utf-8
主机:正确的主机
来源:< code>http://localhost
Pragma:没有缓存
推荐人:正确的推荐人
User-Agent: Mozilla/5.0 (Windows NT 10.0;Win64;x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36
查询字符串参数:
Id=346089
令牌=f5h345
还有一个POST请求,看起来非常相似,但仍以飞行前为开头:
网址: http://mydomain/APIEndpoint/GETRequest?param=TEST
申请方式:邮寄
请求标题:
接受:*/*
接受编码:gzip,deflate
接受-语言:uk-U A, uk; q=0.8, ru; q=0.6, en-US; q=0.4, en; q=0.2
缓存-控制:无-缓存
连接:保持活动
内容长度:11
内容类型:文本/纯文本;字符集=UTF-8
主持人:
来源:< code>http://localhost
Pragma:没有缓存
推荐人:用户代理:Mozilla/5.0(Windows NT 10.0; Win64; x64)AppleWebKit/537.36(KHTML,如Gecko)Chrome /60.0.3112.90Safari /537.36
查询字符串参数:
参数:测试
请求有效载荷
{MyData: {}}
任何建议将不胜感激!谢谢!
==== 更新 ===
根据要求,发布POST请求的飞行前请求:
网址: http://mydomain/APIEndpoint/GETRequest?param=TEST
请求方法:选项
状态代码:200正常
响应标头
访问控制允许来源:*
缓存-控制:无-缓存
内容-长度:0
日期: Wed,09 Aug 2017 08:02:16 GMT
过期:-1
Pragma:没有缓存
服务器:Microsoft-I IS/8.5
x-AspNet-版本:4.0.30319
X-Powered-by:ASP.NET
请求标题
接受:*/*
接受编码:gzip,deflate
接受-语言:uk-U A, uk; q=0.8, ru; q=0.6, en-US; q=0.4, en; q=0.2
访问-控制-请求-方法:POST
缓存-控制:无-缓存
连接:保持活动
主持人:正确的主持人
来源:< code>http://localhost
Pragma:没有缓存
推荐人:正确的推荐人
用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/60.0.3112.90 Safari/537.36
查询字符串参数
参数:测试
它是使用httpinvoke库的遗留代码。实际执行调用的代码片段:
_converters: {
'text json': function (input, reviver) {},
'json text': JSON.stringify
};
headers = {
'Content-Type': 'text/plain; charset=utf-8'
};
data = {params: "test"};
httpinvoke(url, method.toUpperCase(), {
corsExposedHeaders: ['Content-Type'],
headers: headers,
input: data,
converters: _converters,
inputType: 'json',
outputType: 'json',
timeout: self._getMessageTimeout()
}).then(function (res) {}, function (error) {});
正如@Anne提到POST发送预检请求的原因,尽管请求本身符合“简单请求”的规则(因此不需要预检)的原因在XMLHttpRequestUpload事件侦听器中。
XMLHttpRequestUpload本身可能不会在代码中提及,但您始终可以在xhr.upload变量中找到它。http-invoke库就是这种情况。
看起来完全无辜的代码是这样的:
< code > xhr . upload . on progress = onuploadpress;
实际上会导致强制性的飞行前请求。
感谢所有帮助解决这个问题的人。
如果在 XMLHttpRequestUpload 对象上注册了事件侦听器(这会强制进行预检;请参阅 https://xhr.spec.whatwg.org/ 中有关 use-CORS-preflight 标志的说明,以及 https://fetch.spec.whatwg.org/ 中的相关注释以及 MDN CORS 文章中有关 CORS 预检请求的更新文档),则可能会发生这种情况。
httpinvoke是这样做的吗?
在调试我遇到的CORS问题时,我发现了以下行为。Chrome发出以下选项预检请求(由Chrome本身在CURL中重写): 以下情况下服务器对此请求的响应: 是响应“无效CORS请求”的主体。如果我重复该请求,删除标头“Access Control request Method”(仅该标头),则OPTIONS请求将成功,并得到以下响应: 然而,有问题的头是CORS规范标准头,所以它不应该阻止请求成功
我正在构建一个Angular 2应用程序与一个Spring Boot后端。我试图解决CORS预飞行几天的问题。根据本主题,它应该像这样与CORS过滤器一起工作: 角形前端: 我尝试了其他配置,这是我在这个和其他来源的Spring文档中找到的。
问题内容: 我现在奋斗了几个小时。我想向另一个域发出简单的Ajax请求,但始终出现http 401错误: 我在服务器端设置了所有相关的CORS标头。这是网络流量: 我知道有很多关于此主题的文章,但似乎我缺少一些简单的东西。有人可以帮我吗? 问题答案: 更新 看起来我不对。标头从不发送请求。 -你需要确保你的服务器不响应到请求。 我不知道您的服务器用什么语言编写,但是您以错误的方式实现了授权-应该从
我试图在本地构建一个用PHP REST框架作为我的api的Ember应用程序。Ember应用程序在提供,而api只在提供。这导致了一个CORS问题。我已经尝试了我能想到的一切,但我不断得到一个错误返回,说请求被阻止,飞行前通道没有成功。它在Firefox或Chrome上都不成功。 我已经将以下内容添加到API的文件中: 有什么想法或解决办法吗?任何帮助都很感激。谢了!
我使用AJAX请求通过POST将数据发送到另一个域。因为我的内容类型不是标准的(它是JSON格式),所以需要一个飞行前请求。(使用请求方法:选项) 如维基百科跨域XHR调用图表中所述 我想知道这是否很费时,因为浏览器将必须到达服务器两次或不?也许这取决于每个浏览器的行为? 通过使用内容类型“纯文本”来避免飞行前请求,我是否获得了一些时间?
我有一个配置为使用WINDOWS AUTHENTICATION的webapi。 在我的angular应用程序中,我有以下方法: 让方法完美地工作。 POST方法给了我以下错误: 最后介绍了webapi方法 还有我们几个小时来一直在努力的那个该死的错误: 无法加载XMLHttpRequesthttp://a.b.com/api/Contactos.对飞行前请求的响应未通过访问控制检查:请求的资源上不