我目前正在摸不着头脑,因为当我尝试发布数据时,我的浏览器(chrome)会自动发送OPTIONS请求,但此请求由IIS express(Visual Studio中的本地开发人员)获取401。这个问题是间歇性的,但现在看来它总是发生,而且我知道造成它的原因。
当我试图为自己解决问题时,虽然我得到了奇怪的结果......我打开小提琴,突然OPTIONS请求没有问题。请求中唯一的不同之处如下:
(OPTIONS HEADER WITHID 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调用具有用于Connection的不同标头,并且它将完全限定的地址作为选项请求的一部分发送。虽然如此,两者都会转到API的端口。
有没有人经历过这个或者有任何想法为什么把代理人放在middles打破它?
web.config - &gt; http://pastebin.com/CgWVzAvm
答案 0 :(得分:0)
请检查IIS服务器上是否启用了PUT谓词。默认情况下,在IIS服务器中,将禁用诸如put,delete之类的动词 For enabling the verbs
尝试对相同的方法使用post动词,看看它是否通过。
答案 1 :(得分:0)
将请求代理到Bitbucket服务器时出现相同的问题。
对我来说,解决方案是删除 Origin 标头。