代码之家  ›  专栏  ›  技术社区  ›  lambad

浏览器未显示跨源请求的有效响应

  •  1
  • lambad  · 技术社区  · 8 年前

    我提出了一个跨来源的请求。浏览器在控制台上显示正确的消息,但也在网络选项卡中显示响应(不应显示)。

    控制台上的消息:在此处输入图像描述

    enter image description here

    “网络响应”选项卡下显示的消息:

    enter image description here 在此处输入图像描述

    基本上,我有一个名为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发送请求,认为浏览器不会为该URL提供响应,但浏览器正在发送有效响应,如上图所示。

    为什么浏览器没有发送跨源请求的有效响应?在这种情况下,响应应该是空的或无效的json

    1 回复  |  直到 8 年前
        1
  •  2
  •   Kevin Christopher Henry    8 年前

    现在,我尝试向URL发送请求,认为浏览器不会为该URL提供响应,但浏览器正在发送有效响应,如上图所示。

    这个 浏览器 没有发送任何内容,服务器正在发送。同源策略不会阻止服务器发送响应,它控制脚本是否可以读取响应。如果您的跨源脚本尝试读取该响应,它将无法读取。

    CORS不能替代标准的身份验证控制。这是为了保护用户免受恶意网站的攻击,而不是保护您的服务器免受用户的攻击(正如您所看到的,用户可以自由读取响应)。