请参阅https://bugzilla.mozilla.org/show_bug.cgi?id=1019603和我在CORS中使用客户端https证书的答案中的评论(我忘记了以前见过同样的问题……)。
要点是,您发现与众不同的原因是Chrome中的错误。我已经在https://bugs.chromium.org/p/chromium/issues/detail?id=775438上提交了一个错误。
问题在于Chrome浏览器未遵循此规范要求,该规范要求浏览器不要在预检请求中发送TLS客户端证书;因此Chrome 会
在飞行前发送您的TLS客户端证书。
Firefox / Edge / Safari遵循规范要求,并且 不要 在飞行前发送TLS客户端证书。
更新
:在对问题的修改中添加的Chrome屏幕截图显示了对OPTIONS
请求的GET
请求以及随后的请求,而GET
不是POST
代码中的请求。因此,问题可能出在服务器禁止POST
请求。
https://i.stack.imgur.com/GD8iG.png中显示的请求是CORS的预检
OPTIONS请求,浏览器会在尝试
POST在您的代码中尝试该请求之前自动自动发送该请求。
Content-Type: application/json您的代码添加的请求标头是触发浏览器发出该预检
OPTIONS请求的原因。
了解浏览器就不会包括任何这一点很重要凭据在预检
OPTIONS所以服务器的请求被发送到必须被配置为不需要任何凭证/认证-
请求
OPTIONS请求
/api/transactions/own-transactions/。
但是,从https://i.stack.imgur.com/GD8iG.png看来,服务器正在禁止对此
OPTIONS请求
/api/transactions/own-transactions/。可能是因为请求缺少服务器期望的凭据,或者是因为服务器配置为禁止所有
OPTIONS请求,无论如何。
因此,结果是,浏览器认为预检不成功,因此它就在那里停止了,并且从不尝试
POST从您的代码中尝试请求。
鉴于https://i.stack.imgur.com/GD8iG.png中显示的内容,很难理解它在Chrome中的实际效果如何-
尤其是考虑到没有浏览器在预检请求中曾经发送过任何形式的凭证,因此就预检而言,任何可能的浏览器在处理凭据方面的差异都不会造成任何影响。



