服务器端代码如下:
@RequestMapping(value = "/test")
@ResponseBody
public Result test(){
result.setSuccess(true);
result.setData(new Random().nextDouble() + System.currentTimeMillis());
return result;
}
chorme的network截图如下,发现两次请求返回的内容是同一个
请求一
请求二
经过多次试验,发现请求是都走到Controller里,但是第一次请求的响应数据没有马上返回给浏览器端,而是和第二次请求的响应一起返回给了前端,并且第一次请求的响应内容居然是第二次响应的内容。
有时候两次请求的响应能不相同,有时候却相同,不知道是什么原因。
我的实际应用场景是,前台上传多个附件,但是本质是多次上传,然后由后台返回此文件在数据库中的文件id。然后我发现有时上传多个文件时,返回的文件id都是同一个。
如下图所示:两个上传的文件长度是不一样的
文件一
文件二
但是服务器返回的文件id却是一样的:
文件一
文件二
文件一
请求消息
响应消息
文件二
请求消息
响应消息
Cuba tambahkan cap masa untuk mengelakkan caching selepas URL diminta oleh penyemak imbas
Selepas membaca komen, mungkin kes itu lihat kod respons Jika ia adalah 304, ia akan sama seperti kali terakhir. Oleh kerana URL yang diminta adalah sama, anda boleh menambah parameter rawak (cap masa) pada permintaan untuk cache data yang digunakan oleh penyemak imbas untuk memastikan URL itu tidak konsisten setiap kali.
Lihat log pengawal mvc musim bunga untuk melihat sama ada masa apabila permintaan sampai ke pelayan adalah milisaat yang sama
Ketua, anda berada di sini lagi, cuba gunakan
System.nanoTime()
untuk melihat nilai pulangan.Disebabkan kekurangan maklumat penting seperti data permintaan (adakah ia permintaan GET atau permintaan POST? Bagaimanakah kedua-dua permintaan ini dimulakan? Bagaimanakah kod klien yang berkaitan ditulis?), perkara berikut hanyalah tekaan peribadi:
Kaedah pengesahan hipotesis1 , kedua-dua permintaan anda dimulakan ke pelayan hampir pada masa yang sama;
3. Anda menggunakan Use double untuk menyimpan nombor rawak ini, dan kemudian Jackson mungkin kehilangan ketepatan apabila mensiri nilai berganda (sila cari sendiri masalah kehilangan ketepatan js), jadi di sisi pelanggan, dua nilai anda Nampaknya betul-betul sama;
new Random().nextDouble() + System.currentTimeMillis()
Konjektur berdasarkan 1,
adalah seperti berikut:
Penyelesaian Lihat hasil keluaran dan gunakan JSON.parse (nilai yang dilog) dalam konsol penyemak imbas untuk melihat sama ada ia adalah sama.: Gunakan rentetan untuk menyimpan nombor rawak ini Berikut ialah kaedah yang saya tulis sendiri untuk menjana beberapa digit nombor rawak (java8):
Bagi masalah selepas garis pemisah anda, tiada kod dan tidak boleh dianalisis.Di bahagian pelayan, cetak parameter laluan URL yang diminta ke konsol Kedua-dua permintaan yang dicetak ke pelayan harus betul-betul sama, jadi pelayan mengendalikannya sebagai satu permintaan. Anda boleh mencuba kaedah System.nanoTime();