选项获得 401,但当我使用 Fiddler 时没有?

Posted

技术标签:

【中文标题】选项获得 401,但当我使用 Fiddler 时没有?【英文标题】:OPTIONS getting 401, but not when I use Fiddler? 【发布时间】:2016-07-07 09:10:30 【问题描述】:

我目前正在摸不着头脑,因为当我尝试发布数据时,我的浏览器 (chrome) 会自动发送一个 OPTIONS 请求,但这个请求会被 IIS express(Visual Studio 中的本地开发人员)处理为 401。问题是间歇性的,但现在它似乎总是发生,我有 0 线索是什么导致它。

当我试图为自己解决问题时,虽然我得到了奇怪的结果......我打开了提琴手,突然之间 OPTIONS 请求毫无问题地通过了。请求中的唯一区别如下:

(没有 Fiddler 的选项标题)

OPTIONS /api/users/skill HTTP/1.1
Host: localhost:65121
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Access-Control-Request-Method: PUT
Origin: http://localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/49.0.2623.87 Safari/537.36
Access-Control-Request-Headers: accept, content-type
Accept: */*
Referer: http://localhost:3000/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8

我使用标签 用于标头中的信息不同时,即

<this is different>the header info here has changed</this is different>

(带有 Fiddler 的选项标题)

OPTIONS <this is different>http://localhost:65121</this is different>/api/users/skill HTTP/1.1
Host: localhost:65121
<this is different>Proxy-</this is different>Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Access-Control-Request-Method: PUT
Origin: http://localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36
Access-Control-Request-Headers: accept, content-type
Accept: */*
Referer: http://localhost:3000/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8

这两个请求的唯一区别是无论出于何种原因,通过代理的 API 调用都有一个用于连接的不同标头,并且它将完全限定的地址作为选项请求的一部分发送。尽管如此,两者都转到了 API 的端口。

有没有人经历过这种情况或知道为什么将代理放在中间会破坏它?

web.config -> http://pastebin.com/CgWVzAvm

【问题讨论】:

你想用 API 做什么? OPTIONS 用于询问服务器允许使用哪些方法(据我所知,它很少使用)。您如何在浏览器中创建此请求?您是否特别想使用OPTIONS? (或者你实际上是在尝试做GET/POST/etc?) 我正在从 Angular 的 HTTP 模块进行 AJAX 调用。由于它是对与提供 HTML 的源不匹配的源的 POST 请求,因此浏览器会自动发送一个 OPTIONS 请求。我的 API 服务器出于某种原因(根据我的研究)正在拒绝 OPTIONS 调用,因为它不包含 Auth 标头,但我无法添加 auth 标头,因为规范 + chrome 实现不允许这样做。 【参考方案1】:

请检查您的 IIS 服务器上是否启用了 PUT 谓词。默认情况下,在 IIS 服务器中,put、delete 等动词将被禁用。For enabling the verbs

尝试将后置动词用于相同的方法,看看是否通过。

【讨论】:

是的。不过干杯【参考方案2】:

将请求代理到 bitbucket 服务器时遇到同样的问题。

对我来说,解决方案是删除 Origin 标头

【讨论】:

以上是关于选项获得 401,但当我使用 Fiddler 时没有?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在 Asp.Net CORE 中使用 JWT 获得 401 未经授权?

Spring-Security:使用 CORS Preflights 获得 401(尽管 http.cors())

Blazor WA 托管 - Azure 应用服务上未授权 401

在预检OPTION调用后获得401 Unauthorized

android 创建选项菜单没有反应。单击menu键时没出现菜单,帮忙看看吧

Django-rest-auth和AWS - 错误401