是否可以使用环境变量或类似的东西以某种方式动态地包含/排除块?
<LocationMatch ...>
SetEnvIf X-Requested-With XmlHttpRequest xhr
<If xhr>
SSLVerifyClient none
</If>
<If !xhr>
SSLVerifyClient optional
</If>
</LocationMatch>
答案1
为了回答您尝试解决的问题(给出 Apache 代码片段而不是实际问题):
您无法在 SSL 握手完成后强制执行客户端证书,当然也不能在检查 HTTP 标头后强制执行,因此您的想法是不可能的。
此外,SSLVerifyClient optional
任何主流浏览器都不支持它,并会导致奇怪的 SSL 连接错误。
在服务器端执行此操作的唯一方法是创建一个专用于 XHR 请求的单独 vhost。
但是,在客户端,您是否尝试过xhr.withCredentials = true
。从内存中,这会通过 XHR 请求发送客户端证书和任何其他身份验证数据。
答案2
你的意思是像这样?