对预检请求的响应未通过访问控制检查:在 Header 中使用身份验证时没有 HTTP ok 状态
Response to preflight request doesn't pass access control check: It does not have HTTP ok status when using Authentication in Header
我已经在 ISS 服务器中部署了一个 .Net Core 应用程序。在客户端站点,我有一个使用 axios 与服务器通信的 React 应用程序。
在服务器上,这是我修改网络配置的方式
<httpProtocol>
<customHeaders>
<remove name="Access-Control-Allow-Origin" />
<add name="Access-Control-Allow-Credentials" value="true" />
<add name="Access-Control-Allow-Origin" value="http://localhost:3000" />
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Access-Control-Allow-Headers, Content-Type, Authorization" />
<add name="Access-Control-Max-Age" value="86400" />
</customHeaders>
</httpProtocol>
在客户端上
const getRequestConfig = async (): Promise<AxiosRequestConfig> => {
let accessToken = await OAuth2Service.getInstance().GetAccessToken();
return {
headers: {
Authorization: `Bearer ${accessToken}`
},
withCredentials: true
};
};
let config = await getRequestConfig();
const response = await axios.get(
`https://myserver/AppService/api/metadata/office`,
config
);
我收到预检 CORS 错误
Access to XMLHttpRequest at
'https://myserver/AppService/api/metadata/office' from origin
'http://localhost:3000' has been blocked by CORS policy: Response to
preflight request doesn't pass access control check: It does not have
HTTP ok status.
如果我从请求中删除身份验证 header 它将通过 CORS,因为它是一个简单的请求。
- 我是否遗漏了服务器站点或客户端站点上的某些配置?
- 会不会只有localhost存在这个问题,站点部署的时候会通过CORS?在那种情况下,我可以在我的浏览器中禁用 CORS。
尝试解决配置文件中的问题后。我意识到问题出在 .NET Core 应用程序上。首先,应用程序需要工作。如果应用程序在部署后在服务器中崩溃,您会在客户端中遇到 CORS 问题而无需任何解释。并且您需要在服务器应用程序的启动文件中设置 CORS。重新发布应用程序并删除所有自定义 headers 以及客户端中的 withCredentials
后,我能够传递 Bearer 令牌而不会出现任何预检 CORS 错误。
我已经在 ISS 服务器中部署了一个 .Net Core 应用程序。在客户端站点,我有一个使用 axios 与服务器通信的 React 应用程序。
在服务器上,这是我修改网络配置的方式
<httpProtocol>
<customHeaders>
<remove name="Access-Control-Allow-Origin" />
<add name="Access-Control-Allow-Credentials" value="true" />
<add name="Access-Control-Allow-Origin" value="http://localhost:3000" />
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Access-Control-Allow-Headers, Content-Type, Authorization" />
<add name="Access-Control-Max-Age" value="86400" />
</customHeaders>
</httpProtocol>
在客户端上
const getRequestConfig = async (): Promise<AxiosRequestConfig> => {
let accessToken = await OAuth2Service.getInstance().GetAccessToken();
return {
headers: {
Authorization: `Bearer ${accessToken}`
},
withCredentials: true
};
};
let config = await getRequestConfig();
const response = await axios.get(
`https://myserver/AppService/api/metadata/office`,
config
);
我收到预检 CORS 错误
Access to XMLHttpRequest at 'https://myserver/AppService/api/metadata/office' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
如果我从请求中删除身份验证 header 它将通过 CORS,因为它是一个简单的请求。
- 我是否遗漏了服务器站点或客户端站点上的某些配置?
- 会不会只有localhost存在这个问题,站点部署的时候会通过CORS?在那种情况下,我可以在我的浏览器中禁用 CORS。
尝试解决配置文件中的问题后。我意识到问题出在 .NET Core 应用程序上。首先,应用程序需要工作。如果应用程序在部署后在服务器中崩溃,您会在客户端中遇到 CORS 问题而无需任何解释。并且您需要在服务器应用程序的启动文件中设置 CORS。重新发布应用程序并删除所有自定义 headers 以及客户端中的 withCredentials
后,我能够传递 Bearer 令牌而不会出现任何预检 CORS 错误。