要检查的两件事(不知道您的服务器端语言/技术是什么):
您是否将OPTIONS
其作为有效方法包含在您的Access-Control-Allow-Methods
? 例子:
Access-Control-Allow-Methods: GET, OPTIONS
您的请求发送的自定义标头是否被允许返回到浏览器?例子:
Access-Control-Allow-Headers: X-PINGOTHER
远程服务器必须在任何安全的、符合标准的浏览器(即不是旧版本的 IE)之前返回这两个(并且肯定是第二个),才能允许非来源响应通过。
因此,如果您想在 HTTP 服务器级别实现此功能并保持 Web 服务的可移植性,您可以尝试以下方法:
我们假设您的 Web 服务 URL 是http://example.org/service
,并且服务的路径是/srv/www/service
如果您运行的是 Apache 2.0,附加标头的语法是add
,在 2.2 上,使用set
.
所以,你会修改/srv/www/service/.htaccess
:
Header set Access-Control-Allow-Methods "GET, OPTIONS"
Header set Access-Control-Allow-Headers "X-MY_CUSTOM_HEADER1,X-MY_CUSTOM_HEADER2"
Header set Access-Control-Allow-Origin "*"
当然,mod_headers
需要开启 Apache 模块才能使上述功能正常工作。此外,将 allow-origin 设置为通配符是有风险的,如果您发送Access-Control-Allow-Credentials: true
标头,它实际上会导致请求失败(在这种情况下不能使用通配符)。此外,使用SetEnvIf
Apache 的 mod,您可以微调 htaccess 文件以仅在适当的时候返回标头,而不是针对该目录的所有请求。