Chrome 87 中的 Windows 身份验证失败导致的 CORS 问题
最近,一些用户报告称在使用 Chrome 87 浏览器访问 Windows IIS 10 服务器时遇到了 CORS(跨源资源共享)问题。具体而言,这个问题涉及到了 Windows 身份验证失败,导致了跨域请求被拒绝的情况。本文将详细介绍该问题,并提供一个案例代码来演示这个问题。问题描述:当用户使用 Chrome 87 浏览器访问运行 Windows IIS 10 服务器的网站时,如果该网站启用了 Windows 身份验证,并且在服务器端配置了跨域请求(CORS),那么用户将会遇到一个错误。具体错误信息是:'Access-Control-Allow-Origin' header is present on the requested resource,即请求的资源上出现了 'Access-Control-Allow-Origin' 头部。这个错误表明了跨域请求被服务器拒绝了。问题分析:这个问题的根本原因在于 Chrome 87 中的一个安全更新。为了提高安全性,Chrome 87 做了一些改变,其中之一是强制要求服务器在返回 'Access-Control-Allow-Origin' 头部时必须包含请求域的完整地址,而不能使用通配符 '*'。然而,由于 Windows 身份验证的机制,服务器在返回响应时无法获取到完整的请求域,导致了这个问题的出现。案例代码:以下是一个简单的案例代码,用于演示这个问题:html解决方案:为了解决这个问题,我们可以采取以下几个步骤:1. 在服务器端配置 'Access-Control-Allow-Origin' 头部,将请求域的完整地址添加到该头部中。例如,如果请求域为 https://example.com,那么可以将头部设置为:'Access-Control-Allow-Origin: https://example.com'。2. 在服务器端配置 'Access-Control-Allow-Credentials' 头部,将其设置为 true,以允许跨域请求携带身份验证凭据。3. 在服务器端配置 'Access-Control-Allow-Methods' 头部,将其设置为允许的请求方法,例如 GET、POST 等。4. 在服务器端配置 'Access-Control-Allow-Headers' 头部,将其设置为允许的请求头部,例如 Content-Type、Authorization 等。5. 在服务器端配置 'Access-Control-Expose-Headers' 头部,将其设置为需要暴露给客户端的头部,例如自定义头部等。中间段落:解决 CORS 问题的关键步骤解决这个问题的关键步骤如下所示:1. 配置 'Access-Control-Allow-Origin' 头部:CORS 示例
Access-Control-Allow-Origin: https://example.com2. 配置 'Access-Control-Allow-Credentials' 头部:
Access-Control-Allow-Credentials: true3. 配置 'Access-Control-Allow-Methods' 头部:
Access-Control-Allow-Methods: GET, POST4. 配置 'Access-Control-Allow-Headers' 头部:
Access-Control-Allow-Headers: Content-Type, Authorization5. 配置 'Access-Control-Expose-Headers' 头部:
Access-Control-Expose-Headers: X-Custom-Header这些步骤可以确保服务器正确处理跨域请求,解决 Windows 身份验证失败导致的 CORS 问题。:在使用 Chrome 87 浏览器访问 Windows IIS 10 服务器时,由于 Windows 身份验证失败,可能会遇到 CORS 问题。本文介绍了该问题的原因和解决方案,并提供了一个案例代码来演示这个问题。通过正确配置服务器的跨域请求头部,可以解决这个问题。希望本文能对遇到类似问题的开发者有所帮助。