我做了一个交叉来源请求。浏览器在控制台上显示正确的消息,但也显示网络选项卡中的响应(不应显示)。
控制台上的消息:在此输入图像描述
网络标签响应下显示的消息:
基本上,我有一个名为getToken的方法,它为客户端应用程序提供令牌。在提供令牌CORS之前,设置过滤器并验证用户。
如果成功验证了用户,则添加Access-Control-Allow-Origin标头。
User user = userDao.findByUsername(username);
if (!ObjectUtils.isEmpty(user)) {
System.out.println("user.getDomainName()=="+user.getDomainName());
if (origin.equalsIgnoreCase(user.getDomainName())) {
logger.info("Access granted");
responseToUse.addHeader("Access-Control-Allow-Origin", origin);
responseToUse.addHeader("Access-Control-Allow-Methods", "GET");
responseToUse.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
chain.doFilter(requestToUse, responseToUse);
}
}
现在,我尝试向URL发送请求,认为浏览器不会为该网址提供响应,但浏览器正在发送有效响应,如上图所示。
为什么浏览器没有为跨源请求发送有效响应?在这种情况下,响应应该是空的或无效的json
答案 0 :(得分:2)
现在,我尝试向URL发送请求,认为浏览器不会为该网址提供响应,但浏览器正在发送有效响应,如上图所示。 强>
浏览器不发送任何内容,服务器是。同源策略不会阻止服务器发送响应,它控制脚本是否可以读取它。如果您的跨源脚本试图读取该响应,那么它将无法完成。
CORS不能替代标准身份验证控件。它旨在保护用户免受恶意网站的攻击,而不是保护您的服务器免受用户的侵害(如您所见,可以自由阅读响应)。