我有一个拥有两台https服务器的站点。一个(前端)提供由静态页面组成的用户界面。另一个(后端)提供微服务。他们恰好使用相同的(测试)X509证书来识别他们自己。单独地,我可以通过https连接到它们,要求客户端证书“tester”。CORS与客户端https证书
我们通过一个nginx设置来隐藏CORS问题,使得前端和后端显示它们是相同的Origin。我已经为所有请求实现了头部'访问控制 - 允许 - 来源','访问控制 - 允许 - 证书';使用方法,用于预检检查请求(OPTIONS)的标题。
在Chrome中,像这样的跨网站工作得很好。我可以看到前端网址和后端网址是不同的网站。我看到OPTIONS请求在进行后端请求之前进行。
即使Chrome似乎并不需要它,但我确实找到了将用于执行请求的xmlhttprequest对象,并在其上执行了
xhr.withCredentials = true
,因为这似乎是fetch.js在罩下执行的操作当它得到"credentials":"include"
。我注意到有一个xhr.setRequestHeader
函数可用,我可能需要使用它来使Firefox更快乐。- Firefox对于UI调用的行为相同。但是对于所有的后端调用,我得到一个405.当它这样做时,没有到服务器的网络连接。浏览器只是决定这是一个405而不执行任何https请求。尽管这是与Chrome不同的行为,但这样做有道理。前端UI和后端服务都需要选择客户端证书。当我连接到用户界面时,我选择了“测试仪”证书。当它发出后端请求时,它可以假设应该使用相同的客户端证书来访问后端。但也许它假设它可能会有所不同,并且还有一些我需要告诉Firefox。
里面有人在这样的双向SSL证书组合使用CORS,并且有这个Firefox的问题,并固定在某个地方。我怀疑这不是服务器端修复,而是客户需要做的事情。
你在Safari中测试过吗?边缘?知道它们与Firefox匹配会很有趣。这可能是你看到的行为只发生在Chrome中。 Firefox的行为似乎符合当前的规范。 – sideshowbarker