问题标签 [preflight]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
56642 浏览

angularjs - 来自 CORS 预检通道的 CORS 标头“Access-Control-Allow-Headers”中缺少令牌“access-control-allow-headers”

我有两个 VS 项目:一个公开 MVC5 控制器,另一个是 Angular 客户端。我希望角度客户端能够查询控制器。我阅读了许多线程并尝试了以下方法:

  • 我在服务器的网络配置中添加了这个:

    /li>
  • 我在控制器的操作上创建并使用了以下过滤器:

    /li>
  • 在 Angular 客户端中,我创建了以下拦截器:

    /li>

根据 Firebug,这会导致以下请求:

以及以下回应:

而且,Firefox 仍然使用以下消息阻止请求:

0 投票
1 回答
2067 浏览

node.js - 带有预检的 Node.JS 中的跨域 POST 请求?

亲爱的,请考虑一下我刚刚开始使用 Node。

我正在尝试从 HTML 表单获取跨域表单数据以在 Node.js 服务器中解析。我已经能够使用简单的 POST 数据来做到这一点,而不是需要预检的 POST 请求。

我在cloud9 应用服务器上运行节点代码。我也在使用Cors模块来处理请求。该模块适用于简单的请求(在此处测试以查看简单的请求工作),但是对于需要预检的请求,我从 Chrome 检查器控制台获得此结果。

这是我的 server.js 代码:

为什么会发生这种情况?如何在飞行前令人满意地回答我的 POST 的 OPTION 请求?

谢谢,任何帮助将不胜感激。

这是 Chrome 开发工具中的发布请求和响应: 在此处输入图像描述

0 投票
1 回答
1431 浏览

angularjs - AugularJS 中的飞行前 OPTIONS 请求未通过授权标头

我在堆栈溢出和谷歌上查看了许多类似的问题,但没有建议的解决方案对我有用。

情况如下:

我正在尝试使用以下请求连接到私有 api:

发布https://api.domain.com/oauth/token

我还需要传递 Authorization & Content-Type 标头。

问题是飞行前的 OPTIONS 请求没有显示这两个标头,这使得 api 返回一个 401 错误。

这已经在 Firefox 和 Chrome 中进行了测试。

如果我尝试使用 HTTP 而不是 HTTPS,它会自动重定向到 HTTPS。

奇怪的是,Postman 工作的路线完全相同。Postman 在 OPTIONS 请求中添加 Authorization 标头,因此问题不在服务器端。

如何确保 Angular $http 像 Postman 一样添加 Authorization 标头?

谢谢

0 投票
1 回答
596 浏览

jquery - Ajax 调用不同域 URL 时出现 401 预检错误

我的请求显示在 Chrome Network XHR 工具上。

我的阿贾克斯电话:

Symfony2 cors 配置:

如果我将 allow_headers: ['X-Custom-Auth'] 更改为 allow_headers: ['*'] 那么我会收到 500 错误。

我也尝试过使用 PAW 建议的 Content-Type:application/octet-stream,这是我检查 API 请求的 OSX 应用程序。事实上,这个请求是来自 PAW 的 200 OK。

同时执行 CURL,我得到 200 OK 的 JSON。

我错过了什么?非常感谢。

0 投票
4 回答
14166 浏览

ajax - HAProxy CORS OPTIONS 标头拦截设置

通过我的 NGinx 设置,我能够拦截来自 ajax 预检的 OPTIONS 请求,并使用正确的 CORS 标头和 200 响应进行响应,以便请求可以继续进行。我正在尝试将我的前端代理整合到 HAProxy 中,并且在让这块拼图正常工作时遇到了一些问题。

我的特殊问题是,虽然我能够在服务器能够正确响应 OPTIONS 请求时添加正确的 CORS 选项,但在发出预检请求时,一些后端无法处理/响应 405 错误。我的 haproxy.cfg 包含以下用于添加标题的行:

中给出的解决方案:

当您从客户端的请求中设置所有正确的标头时,如何使用 HAProxy 发送响应而不将请求传递给 Web 服务器可以工作,但不是动态的,这不是理想的解决方案。

任何帮助,将不胜感激!

0 投票
2 回答
425 浏览

http - 导致 PREFLIGHT 的 HTTP 标头 - 澄清?

简单请求是满足以下条件的请求:

  • HTTP 方法匹配(区分大小写)以下之一:

    • 得到
    • 邮政
  • HTTP 标头匹配(不区分大小写):

    • 接受
    • 接受语言
    • 内容-语言
    • 最后事件 ID
    • Content-Type,但仅当值为以下之一时:
      • 应用程序/x-www-form-urlencoded
      • 多部分/表单数据
      • 文本/纯文本

但是看看这个没有引起预检请求的测试页面:

一般的 :

请求标头

响应标头

学究气,看request部分,有很多标题不在前面的标准部分中:

  • Cache-Control 不在名单上
  • Connection 不在名单上
  • DNTis not不在列表中
  • User-Agent 不在名单上
  • Accept-Encoding 不在名单上

我知道那些更多的是“通用”标题。也一样accept-language

问题

我在这里想念什么?根据标准部分,具有这些标头的请求导致预检请求。

0 投票
1 回答
583 浏览

ajax - 在 Tomcat 中禁用 OPTIONS 请求的身份验证

我有一个受基本身份验证保护的 API。当我想针对 API 发出 AJAX 请求时,浏览器会发送一个不带有 Authorization 标头的 OPTIONS 请求,因此它会被拒绝,因此浏览器不允许我的 AJAX 调用。

我试图将 Tomcat 配置为不对 OPTIONS 请求进行身份验证,但我无法让它工作。

有人帮我让它工作吗?

谢谢 :)

0 投票
1 回答
13102 浏览

javascript - AngularJS - HTTP 请求在控制器中发出预检请求,但不在 app.js 中

我有一个与外部 API 通信的应用程序。我的应用程序的每个页面都有一个控制器。如果我在其中一个控制器中发出 HTTP GET 请求,它会发送一个 OPTIONS 预检请求,并且我收到一个错误:

XMLHttpRequest 无法加载http://dev/api/?email_address=email@email.com&password=111111。预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段授权。

但是,如果我复制粘贴相同的代码并将其粘贴到我的 app.js 文件中,它会完美运行并返回数据。我发现这样它也只发送 GET 请求,而不是 OPTIONS 请求。

我尝试将标题内容类型添加为“文本/纯文本”到我的请求中,但这没有任何改变。如果我尝试使用 jQuery 发出请求,它工作得很好,只发送 GET 请求,不管代码是在控制器中还是在 app.js 文件中。这是完整的控制器代码(Angular 形式):

0 投票
1 回答
729 浏览

angularjs - CORS 预检请求获取无效的 -1 状态代码

我有一个前端 Web 应用程序,它在服务器上使用 nodejs,在客户端使用 angularjs,在端口 5000 上本地运行。客户端代码需要向也在本地运行但在 IIS 6.2 中托管的不同端口上的单独 Web API 服务发出 ajax 请求. 这使它成为一个跨域请求,浏览器正试图为此发出预检请求。但是,预检失败并调用了 ajax 错误处理程序,响应的状态代码为 -1,Chrome 控制台显示预检检查失败,可能是Response to preflight request 的标准错误消息未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。来源 ' https://localhost:5000' 因此不允许访问。响应的 HTTP 状态代码为 500。

据我所知,我在我的 Web API 服务中启用了 CORS。这是我的 Application_Start 方法的开始:

这个确切的设置在我同事的机器上运行良好,所以我的机器特别有问题。我被难住了,对可能发生的事情有什么想法吗?我猜有些东西只是在某个地方配置错误。

0 投票
1 回答
7088 浏览

cors - 如何处理无效的 CORS 预检请求?

假设有一个 CORS 预检请求进入,但它为一个或多个Access-Control-Request-*标头指定了不受支持的值。服务器应该如何将其传回给浏览器?

一些例子:

  • 浏览器使用 发送预检请求Access-Control-Request-Method: PUT,但服务器不允许对指定资源的 PUT 请求。
  • 浏览器使用 发送预检请求Access-Control-Request-Headers: X-PINGOTHER,但服务器不允许/理解该标头。

我能找到的唯一线索位于W3C 文档中,这表明如果预检响应存在问题,服务器应该“终止此请求”,但我不确定实际情况如何(服务器真的应该在不发回响应的情况下终止连接??)。

或者,服务器是否根本不需要验证,因为浏览器只需检查Access-Control-Allow-*响应标头就知道它做错了什么?