浏览器发送了两次请求给服务器,服务器只返回后一次请求的内容

浏览器调用同一个接口,发送了两次请求给服务器端,服务器端代码返回一个随机数给浏览器

框架是SpringMvc+Spring+MyBatis

服务器端代码如下:

@RequestMapping(value = "/test")@ResponseBodypublic Result test(){
    result.setSuccess(true);
    result.setData(new Random().nextDouble() + System.currentTimeMillis());    return result;
}

chorme的network截图如下,发现两次请求返回的内容是同一个

  • 请求一
    https://img4.mukewang.com/5cbebc4f0001e03d08000135.jpg

  • 请求二
    https://img2.mukewang.com/5cbebc51000178ce00320032.jpg

有以下几个疑问:

  • 经过多次试验,发现请求是都走到Controller里,但是第一次请求的响应数据没有马上返回给浏览器端,而是和第二次请求的响应一起返回给了前端,并且第一次请求的响应内容居然是第二次响应的内容。

  • 有时候两次请求的响应能不相同,有时候却相同,不知道是什么原因。


分割线1

不少朋友说是因为我发的get请求,导致浏览器认为是缓存原因。

我的实际应用场景是,前台上传多个附件,但是本质是多次上传,然后由后台返回此文件在数据库中的文件id。然后我发现有时上传多个文件时,返回的文件id都是同一个。

如下图所示:两个上传的文件长度是不一样的

  • 文件一
    https://img1.mukewang.com/5cbebc540001984c08000348.jpg

  • 文件二
    https://img4.mukewang.com/5cbebc56000115dc08000309.jpg

但是服务器返回的文件id却是一样的:

  • 文件一
    https://img4.mukewang.com/5cbebc590001239c08000137.jpg

  • 文件二
    https://img1.mukewang.com/5cbebc5a0001b00a08000119.jpg



智慧大石
浏览 1015回答 7
7回答

冉冉说

浏览器请求的url后面加上防止缓存的时间戳试试

尚方宝剑之说

看了下评论,有可能就是那种情况,你看下响应码是多少,304的话就和上次相同。因为请求的url一样,所以浏览器使用的缓存数据,你可以在请求中加个随机参数(时间戳),保证每次的url不一致。

猛跑小猪

看下spring mvc controller的日志 看请求到达服务器的时间是否是同一毫秒

繁星淼淼

服务端,把请求的URL路径参数打印到控制台看看,应该两次请求打印到服务端是一模一样的,所以服务端当一个请求处理掉了。上面的System.nanoTime();方法可以都试试看。

慕少森

遇到相同的问题,求解答.......,时间间隔很近的两次请求,第一次没返回,第二次一次性返回了所有结果。(路径相同,但参数值不同)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java