Ajax 飞行前选项请求通过HTTPS失败

Ajax 飞行前选项请求通过HTTPS失败,ajax,apache,tomcat,cross-domain,Ajax,Apache,Tomcat,Cross Domain,我的客户机服务器(在Apache@port 443上运行)向我的REST服务器(在Tomcat@port 8443上运行)发出的CORS POST请求(AJAX)在通过HTTPS尝试时无法触发 请注意,在没有SSL的情况下,所有请求都能正常工作 我已经在请求字段中设置了with credentials:true选项。我的Tomcat服务器还负责相应的头文件: response.addHeader("Access-Control-Allow-Origin", "htt

我的客户机服务器(在Apache@port 443上运行)向我的REST服务器(在Tomcat@port 8443上运行)发出的CORS POST请求(AJAX)在通过HTTPS尝试时无法触发

请注意,在没有SSL的情况下,所有请求都能正常工作

我已经在请求字段中设置了
with credentials:true
选项。我的Tomcat服务器还负责相应的头文件:

response.addHeader("Access-Control-Allow-Origin", "https://localhost");
response.addHeader("Access-Control-Allow-Credentials", "true");
response.addHeader("Access-Control-Allow-Headers", "Content-Type");
response.addHeader("Access-Control-Allow-Methods", "OPTIONS, POST");
我也尝试过使用Curl,但问题仍然存在于SSL上。但是,当直接通过浏览器尝试时,Tomcat服务器会响应我的所有请求


有人能告诉我我错过了什么吗?

我想这是飞行前请求的问题。CORS请求有两种类型:简单和不那么简单

简单的类型是GET或POST,没有内容类型为“text/plain”的自定义标题

不那么简单的一种是使用自定义标题的任何请求,使用POST或GET以外的请求方法,以及使用不同的内容体类型。这些请求将被“预引导”;也就是说,浏览器将代表客户端发出飞行前请求,以确定服务器是否允许此请求。飞行前请求使用OPTIONS方法。我敢打赌,如果您使用Firebug之类的工具查看发生了什么,您将在Net选项卡中看到类似的内容:“选项活动”,状态为“已中止”

不幸的是,飞行前请求没有将客户端证书传递给服务器,这就是您的请求无法触发的原因。您需要禁用双向SSL才能使其正常工作。在Apache中,您可以尝试将SSlveryClient更改为:

SSLVerifyClient optional
我以前使用过它,以便通过HTTPS实现跨域AJAX调用


祝你好运。

我想这是飞行前请求的问题。CORS请求有两种类型:简单和不那么简单

简单的类型是GET或POST,没有内容类型为“text/plain”的自定义标题

不那么简单的一种是使用自定义标题的任何请求,使用POST或GET以外的请求方法,以及使用不同的内容体类型。这些请求将被“预引导”;也就是说,浏览器将代表客户端发出飞行前请求,以确定服务器是否允许此请求。飞行前请求使用OPTIONS方法。我敢打赌,如果您使用Firebug之类的工具查看发生了什么,您将在Net选项卡中看到类似的内容:“选项活动”,状态为“已中止”

不幸的是,飞行前请求没有将客户端证书传递给服务器,这就是您的请求无法触发的原因。您需要禁用双向SSL才能使其正常工作。在Apache中,您可以尝试将SSlveryClient更改为:

SSLVerifyClient optional
我以前使用过它,以便通过HTTPS实现跨域AJAX调用

祝你好运