当前位置: 首页 > 面试题库 >

如何跳过OPTIONS飞行前请求?

尹承泽
2023-03-14
问题内容

我开发了一个PhoneGap应用程序,现在将其转换为移动网站。除了一处小故障,一切都可以顺利进行。我通过POST请求使用了某个第三方API,该API在该应用中可以正常运行,但在移动网站版本中却无法运行。

仔细查看后,似乎AngularJS(我想实际上是浏览器)正在首先发送OPTIONS请求。今天,我对CORS有了很多了解,但似乎无法弄清楚如何完全禁用它。我没有访问该API的权限(因此无法在那一侧进行更改),但是他们已将我正在处理的域添加到其Access-
Control-Allow-Origin标头中。

这是我正在谈论的代码:

        var request = {
                language: 'fr',
                barcodes: [
                    {
                        barcode: 'somebarcode',
                        description: 'Description goes here'
                    }
                ]
            };
        }
        var config = {
            headers: { 
                'Cache-Control': 'no-cache',
                'Content-Type': 'application/json'
            }
        };
        $http.post('http://somedomain.be/trackinginfo', request, config).success(function(data, status) {
            callback(undefined, data);
        }).error(function(data, status) {
            var err = new Error('Error message');
            err.status = status;
            callback(err);
        });

如何防止浏览器(或AngularJS)发送该OPTIONS请求,而直接跳到实际的POST请求?我正在使用AngularJS 1.2.0。

提前致谢。


问题答案:

预检是由您的Content-Type触发的application/json。防止这种情况的最简单方法是将Content-
Type设置为适合text/plain您的情况。application/x-www-form-urlencodedmultipart/form- dataContent-Types也可以接受,但是您当然需要适当地格式化请求有效负载。

如果进行此更改后仍然看到预检,则Angular可能也在请求中添加了X-header。

或者您可能具有将触发它的标头(授权,缓存控制…),请参见:

  • https://developer.mozilla.org/zh-CN/docs/HTTP/Access_control_CORS#Preflighted_requests


 类似资料:
  • 我试图从javascript本身调用另一个域中的服务。我可以请求跨域服务。但我无法从服务中检索信息。一些我如何被同源政策阻止。请帮我找出代码中的错误。 OPTIONS/SolartisGeoCodelookupService/Service/DrawRegions HTTP/1.1 主机:Cross_Domain_IP_Address 用户代理:Mozilla/5.0(x11;Linux x86_

  • 问题内容: 我想从文件中推断出字段名称。文档说: “如果省略fieldnames参数,则csvfile第一行中的值将用作字段名。” ,但在我的情况下,第一行包含标题,第二行包含名称。 我无法按照Python 3.2的要求在csv.DictReader中跳过一行, 因为在初始化读取器时发生了字段名分配(否则我做错了)。 csvfile(从Excel 2010导出,原始源): 我的代码: 当前结果:

  • 问题内容: AJAX请求工作正常,但是当我通过beforeSend或标头添加标头时,会发出OPTIONS预检请求,而GET请求将中止。 指定了类似的没有 头的AJAX请求(在我添加/修改头的那一刻,进行了OPTIONS调用) 相似的服务器响应头(用于GET请求) 我做错了什么? 问题答案: 解决了。感谢@JasonP的指针。改变服务器 响应头 从 访问控制允许标题:* 到特定的 访问控制允许标题:

  • 从浏览器到我的自助主机OWIN WebAPI的所有预飞行请求都不会被中间件处理。如果我从邮递员提出选项请求,它们将被处理。为什么是这样的行为? 请求URL:http://localhost:9000/api/v1/conversations/create?connectionId=13509f44-eacb-4950-8cc8-71bd37098975 请求方法:选项 状态代码:401未经授权的远

  • 我使用AJAX请求通过POST将数据发送到另一个域。因为我的内容类型不是标准的(它是JSON格式),所以需要一个飞行前请求。(使用请求方法:选项) 如维基百科跨域XHR调用图表中所述 我想知道这是否很费时,因为浏览器将必须到达服务器两次或不?也许这取决于每个浏览器的行为? 通过使用内容类型“纯文本”来避免飞行前请求,我是否获得了一些时间?

  • 请问 git merge 如何跳过 vim 确认提示? 使用过 git merge 的大神应该都知道,合并一个分支的时候经常会弹出一个 vim 确认框,大部分的情况下需要手动输入 :wq 退出这个提示然后合并完成。 我希望再命令行直接跳过这个步骤,该怎么办呢?跪谢大神指点。