问题标签 [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.
angularjs - 来自 CORS 预检通道的 CORS 标头“Access-Control-Allow-Headers”中缺少令牌“access-control-allow-headers”
我有两个 VS 项目:一个公开 MVC5 控制器,另一个是 Angular 客户端。我希望角度客户端能够查询控制器。我阅读了许多线程并尝试了以下方法:
我在服务器的网络配置中添加了这个:
/li>我在控制器的操作上创建并使用了以下过滤器:
/li>在 Angular 客户端中,我创建了以下拦截器:
/li>
根据 Firebug,这会导致以下请求:
以及以下回应:
而且,Firefox 仍然使用以下消息阻止请求:
node.js - 带有预检的 Node.JS 中的跨域 POST 请求?
亲爱的,请考虑一下我刚刚开始使用 Node。
我正在尝试从 HTML 表单获取跨域表单数据以在 Node.js 服务器中解析。我已经能够使用简单的 POST 数据来做到这一点,而不是需要预检的 POST 请求。
我在cloud9 应用服务器上运行节点代码。我也在使用Cors模块来处理请求。该模块适用于简单的请求(在此处测试以查看简单的请求工作),但是对于需要预检的请求,我从 Chrome 检查器控制台获得此结果。
这是我的 server.js 代码:
为什么会发生这种情况?如何在飞行前令人满意地回答我的 POST 的 OPTION 请求?
谢谢,任何帮助将不胜感激。
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 标头?
谢谢
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。
我错过了什么?非常感谢。
ajax - HAProxy CORS OPTIONS 标头拦截设置
通过我的 NGinx 设置,我能够拦截来自 ajax 预检的 OPTIONS 请求,并使用正确的 CORS 标头和 200 响应进行响应,以便请求可以继续进行。我正在尝试将我的前端代理整合到 HAProxy 中,并且在让这块拼图正常工作时遇到了一些问题。
我的特殊问题是,虽然我能够在服务器能够正确响应 OPTIONS 请求时添加正确的 CORS 选项,但在发出预检请求时,一些后端无法处理/响应 405 错误。我的 haproxy.cfg 包含以下用于添加标题的行:
中给出的解决方案:
当您从客户端的请求中设置所有正确的标头时,如何使用 HAProxy 发送响应而不将请求传递给 Web 服务器可以工作,但不是动态的,这不是理想的解决方案。
任何帮助,将不胜感激!
http - 导致 PREFLIGHT 的 HTTP 标头 - 澄清?
简单请求是满足以下条件的请求:
HTTP 方法匹配(区分大小写)以下之一:
- 头
- 得到
- 邮政
HTTP 标头匹配(不区分大小写):
- 接受
- 接受语言
- 内容-语言
- 最后事件 ID
- Content-Type,但仅当值为以下之一时:
- 应用程序/x-www-form-urlencoded
- 多部分/表单数据
- 文本/纯文本
但是看看这个没有引起预检请求的测试页面:
一般的 :
请求标头
响应标头
学究气,看request
部分,有很多标题不在前面的标准部分中:
Cache-Control
不在名单上Connection
不在名单上DNT
is not不在列表中User-Agent
不在名单上Accept-Encoding
不在名单上
我知道那些更多的是“通用”标题。但也一样accept-language
问题
我在这里想念什么?根据标准部分,具有这些标头的请求应导致预检请求。
ajax - 在 Tomcat 中禁用 OPTIONS 请求的身份验证
我有一个受基本身份验证保护的 API。当我想针对 API 发出 AJAX 请求时,浏览器会发送一个不带有 Authorization 标头的 OPTIONS 请求,因此它会被拒绝,因此浏览器不允许我的 AJAX 调用。
我试图将 Tomcat 配置为不对 OPTIONS 请求进行身份验证,但我无法让它工作。
有人帮我让它工作吗?
谢谢 :)
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 形式):
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 方法的开始:
这个确切的设置在我同事的机器上运行良好,所以我的机器特别有问题。我被难住了,对可能发生的事情有什么想法吗?我猜有些东西只是在某个地方配置错误。
cors - 如何处理无效的 CORS 预检请求?
假设有一个 CORS 预检请求进入,但它为一个或多个Access-Control-Request-*
标头指定了不受支持的值。服务器应该如何将其传回给浏览器?
一些例子:
- 浏览器使用 发送预检请求
Access-Control-Request-Method: PUT
,但服务器不允许对指定资源的 PUT 请求。 - 浏览器使用 发送预检请求
Access-Control-Request-Headers: X-PINGOTHER
,但服务器不允许/理解该标头。
我能找到的唯一线索位于W3C 文档中,这表明如果预检响应存在问题,服务器应该“终止此请求”,但我不确定实际情况如何(服务器真的应该在不发回响应的情况下终止连接??)。
或者,服务器是否根本不需要验证,因为浏览器只需检查Access-Control-Allow-*
响应标头就知道它做错了什么?