问题标签 [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 投票
1 回答
2242 浏览

apache - 当 HTTP 方法是 Apache .htaccess 上的 OPTIONS 时,如何避免请求基本身份验证?

我在一个站点中使用 HTTP 基本身份验证(用户名和密码),包括托管在 Apache 中的 API 端点,我在 .htaccess 上做这样的事情:

由于我在另一个域上托管的页面中从浏览器端使用 API(CORS 部分已经解决),因此我需要允许某些未经身份验证的请求。这些请求是方法为“OPTIONS”的请求,(预检解释如下:http: //www.w3.org/TR/cors/#resource-preflight-requests),请,我不需要任何关于 ajax 或浏览器上的任何其他内容,我需要知道如何在 apache 上执行此操作

提前致谢

0 投票
1 回答
8080 浏览

angularjs - angular.js $resources 设置授权头

js

我正在尝试做的是向服务器发出 REST API 请求。

请求应该是“GET”方法并包含“Authorization”标头。

我与 REST 服务器通信的工厂代码就像这样“使用严格”;

最合适的问题就在这里

如果我添加标题,则方法更改为“OPTIONS”而不是“GET”。我发现它与 CORS 预检有关,但我不知道如何禁用它..

所以我尝试在 app.js 中更改我的配置

第二个问题在这里

它使下面的错误。

是否有任何解决方案可以发送带有“授权”标头的“GET”请求?谢谢

0 投票
2 回答
2510 浏览

javascript - 为什么即使 Access-Control-Allow-Origin 设置为 *,也会发送多个 OPTIONS 请求?

我已经构建了一个 API (api.example.com) 并希望它可以从 www.example.com 访问
我还希望它可以从其他域访问。

为此,我添加了 Access-Control-Allow-Origin: *

但是当我打开 www.example.com 时,会在所有 api 请求之前发送一个预检请求(OPTIONS 请求)
如何停止多个预检请求?我认为应该只有一个预检请求,我做错了什么!!!? 或者浏览器必须在每次调用之前发送预检请求是否很自然?
注意:我不想使用 JSONP,因为我正在公开访问 Access-Control-Allow-Origin:*

选项 呼叫头

选项 呼叫响应

GET 请求请求头

GET 请求响应头

虽然我不想提供 URL,因为它会随着开发的进行而中断。但如果它可能有帮助:http ://www.touchtalent.biz/home

更新 1:
一旦我删除了Authorization:Bearer VtQJqaTGd7YFb8Mee6GfiLwiRrUdt2iCp9ITuiUE标头,它就会停止发出多个预检请求。
但是删除此标头会破坏 oauth 实现。我仍然必须在不删除自定义标头的情况下防止多个预检请求。我该怎么做 ?
更新 2:
添加 Access-Control-Max-Age 有帮助,现在它不会为相同的请求发送预检。但是对于不同的请求(不同的 url)它发送多个 OPTIONS 请求。

0 投票
2 回答
3663 浏览

c# - 预检请求返回 404 Not Found for Controllers in a Area

我有一个 WebAPI 项目,并且按照以下步骤启用了 CORS:

  1. 获取 nuget 包:Install-Package Microsoft.AspNet.WebApi.Cors.
  2. 添加config.EnableCors();到 WebApiConfig.cs。
  3. 添加[EnableCors(origins: "*", headers: "*", methods: "*")]到我的控制器。

我有控制器,它们位于根控制器文件夹中,并且在区域内。

两个控制器都具有该[EnableCors(...)]属性。

我的问题是这只ValuesController有效。

使用 Fiddler 检查请求,OtherStuffController我可以看到客户端发送了一个预检 OPTIONS 请求,但服务器响应为 404 not found 而不是 200 OK,但ValuesController工作正常。

我究竟做错了什么?为什么 TestArea 区域的控制器不能处理 CORS 请求,而 Values 控制器可以?

这两个控制器除了名称之外没有什么不同,而且它在一个区域中。

附加信息

路线:

我用来访问操作方法的 URL:

值请求(工作):

其次是:

OtherStuff 请求(预照明失败):

值控制器.cs

OtherStuffController.cs

0 投票
1 回答
66 浏览

rest - 缺少对 HTTP-OPTION 的回答的详细信息

我试图找出我的客户端和 REST API 之间的通信问题。我可以确定问题,但我不确定 OPTION 请求的答案中究竟缺少什么。我的应用程序正在创建一个 HTTP POST,它由浏览器使用 HTTP-OPTION 预检。该选项要求批准自定义内容类型。服务器回答 OPTION 后,不会发送 POST。

答案如下所示:

我是否正确,答案中应该有一行批准请求的内容类型?像这样:

0 投票
1 回答
4086 浏览

google-chrome - 如何防止 Chrome 将 AJAX 请求重定向到 HTTPS?

我的 AngularJS 应用程序正在对我们的服务(由 Jetty 提供支持)执行许多 AJAX 请求。出于某种原因,仅某些用户会出现以下错误,并在被要求清除浏览器缓存时消失。这只发生在 Google Chrome 上

我在 www.domain.com 上试图请求 api.domain.com。

XMLHttpRequest 无法加载http://api.domain.com/my-service。该请求被重定向到“ https://api.domain.com/my-service ”,这对于需要预检的跨域请求是不允许的。/我的当前页面

请注意,Chrome 正在尝试将服务从 HTTP 重定向到 HTTPS。我的网站可以通过 HTTP 或 HTTPS 访问

这是 chrome://net-internals/#events 输出:

知道为什么 Chrome 会强制进行这样的重定向吗?我在网络选项卡中看不到任何错误,该请求没有返回任何内容。

更多信息:

这是正常工作的 Chrome 浏览器上的响应标头。

0 投票
3 回答
10175 浏览

jetty - 如何配置嵌入式 Jetty 以处理 OPTIONS 预检请求?

我正在开发一个使用嵌入式 Jetty 的项目(不幸的是,我只是“继承”了项目的服务器端,并且对 Jetty 的使用及其配置不是很熟悉)。

突然出现了一个奇怪的案例-我会尽力描述:

基于 Web 的 UI(使用 AngularJS,来自不同的域,因此使用了 CORS)发送 POST 请求以更改服务器上某些内容的状态。这在过去的某个时候有效(它最后一次使用可能是在一个月左右之前)。

昨天这停止了工作。检查 REST 调用,我看到首先发出了一个 OPTIONS 请求。POST 的内容类型是 application/json,所以根据我的阅读,这是正确的。我不确定为什么之前没有发送它 - 公司最近更新了 Chrome 版本,而旧版本没有发送预检请求,但这只是猜测。无论如何,我认为这是我的应用程序中用于为 CORS 配置 Jetty 的相关代码:

POST 请求一切正常。我可以通过使用 --disable-web-security 标志启动 Chrome 来验证这一点。没有发送任何 OPTIONS 请求,并且 POST 正常工作。

我的想法是,因为它适用于 POST,所以它不是授权或安全问题 - 只是 Jetty 没有正确配置来处理预检请求(它只返回 401)。

我找不到太多关于嵌入式 Jetty 的文档,以及哪些 CrossOriginFilter 常量在调用 setInitParameter 时用作属性键(此外,由于该方法调用的第二个参数是一个字符串,我真的不知道如何格式化值)。

我应该在 CrossOriginFilter 上设置哪些参数来处理 OPTIONS 请求?如果我在上面说了什么错误或做出了任何错误的假设,请纠正我!我在这方面的经验非常有限。

0 投票
1 回答
918 浏览

rest - 处理对安全受限的 RestEasy 支持的 rest api 2.x 的 PreFlight 请求

我在 JBOSS 容器中有一个基于 RestEasy 的 REST API,通过 auth-constraint 进行了身份验证。进行任何调用时,授权标头会随请求一起传递。约束的 url 映射是 /*

现在这个 Rest API 的一个客户端需要一个 CORS 请求。我开发了一个网络过滤器,它会为飞行前(即选项)请求和正常请求添加必要的标题。

这工作得很好,正在添加标题。但是由于 RestEasy 使用 url-pattern /* 进行保护,因此它也期望飞行前请求也可以通过身份验证。

现在根据https://dvcs.w3.org/hg/cors/raw-file/tip/Overview.html#preflight-request,飞行前请求将未经身份验证。

此外,我浏览了https://gist.github.com/tganzarolli/8520728并创建了一个类似的未经身份验证的服务来处理带有 @Path("/{var:.*}") 和 @PermitAll 注释的 OPTIONS 请求,因为我想在一个地方处理所有 OPTIONS 请求。

这仍然不起作用,因为与 RestEasy url-pattern /* 关联的 auth-constraint 启动并且我的未经身份验证的服务不起作用,仍然返回 401。

有没有更好的方法来做到这一点?是否可以为上述未经身份验证的服务配置安全约束以在给定场景中解决此问题?

0 投票
0 回答
306 浏览

cors - ASP.NET Web API:在预检请求中获取客户端 ID

我在我的 ASP.NET Web API 项目中启用了 CORS,我需要一种方法来识别发出预检请求的用户。这是因为每个客户端都有自己允许的来源。

这是我的CorsPolicyProvider样子:

我的预检请求不包含有关用户的任何信息,所以我不确定这是否可行。但在我看来,这是一种常见的情况,不是吗?如果我可以访问我的声明,那将是理想的,但显然我们此时对用户一无所知。我接近这个错误吗?

0 投票
1 回答
154 浏览

javascript - 向具有不同域和基本身份验证的服务器发出 ajax POST 请求是不可能的吗?

我正在尝试向具有不同域的服务器发出 POST 请求,这需要基本身份验证。

我已经尝试过 beforeSend 和 withCredentials 的所有组合,但是基本的 auth 标头从未在 OPTIONS 预检请求中发送。

我似乎可以使此请求成功的唯一方法是将 dataType 设置为“jsonp”,或将请求“type”设置为 GET。

从另一个域服务器中删除 OPTIONS 请求的基本身份验证要求是解决此问题的唯一方法吗?

谢谢。