zoukankan      html  css  js  c++  java
  • get与post

         这两者的区别,我想熟悉asp.net的人都应该清楚,但是我想说的是有时即使你能把get与post的区别说的比教科书还牛逼,但一旦到了真正的项目实战中,估计你还是会习惯性的忽略这一点。譬如我在项目中正是由于习惯性的忽略而整整浪费了将近三天的时间。这两者的区别在这里我不多说,就讲一下我在项目中遇到的有关get与post请求的问题吧~~~

        公司项目中有个上传文件的功能,支持多文件上传。文件的编号是由后台随即生成的GUID来作为标识的。在后期测试的过程中,发现一个很奇怪的问题,同时上传文件时,这些一起上传的文件会自动存放在一个由此次上传操作而创建的一个文件夹里面。在数据库可以发现这些文件的一个标识都是一样的(数据库没有将这个标志设置为主键,我在后面实在找不出原因的时候甚至动了修改数据库的念头~~~~不过,还好没有修改,项目到了测试阶段,数据库是万万不能随便修改的)。这样在删除其中一个文件的时候就会把其他的与这个文件同时上传的文件都删除掉(很明显,因为标识都一样的),而且经过追踪发现后台产生随机文档GUID的方法只被执行一次,就是上传第一个文件的时候会执行,其余的都不执行。

       后来实在找不出原因了,就换了一台电脑来测试,坑爹的是,这一次的上传与删除操作都能顺利执行~~~在TFS中我获取的项目是最新的版本的,也就说项目是没有任何问题,可是为什么会发生相同的程序在不同的电脑运行会产生不同的结果呢?

       无奈之下,请教了我们组的组长,组长起初也不敢相信这个事实,但凭着他丰富的经验,很快就找出了问题所在:因为在前端上传文件时用jq+Ajax请求Controller中的Action方法的时候,type为Get方式。而一般比较友好的上传文件功能我们都会设置成无刷新的上传,也就是说前后上传的多个文件时,在前面的文件上传完毕之后,浏览器中的地址栏是不会发生改变的,因此会到导致以get方式发出请求的时候,服务端默认返回给前端的数据实际上是浏览器上传完前一个文件所缓存的数据。因此会导致前后拿到的文件GUID都是一样的缘故。

      这时又会有人问了:既然如此的话,那么不管那一台电脑,执行的结果都应该一样才对。没错~~这个我也一直相信,但是IE浏览器用户是可以手动设置我们服务器发出的请求的时候是否是从缓存中获取:

    我们看到:检查所存网页的较新版本的属性:每次访问网页时可以保证你获取到的数据都是最新的,而自动这个选择,我个人也不是很清楚,毕竟IE浏览器内部是如何根据用户的请求来获取数据的具体实现我也没有研究过,但是如果选择了“每次访问网页时”,这个问题是可以解决。这只是其中一个解决方法,毕竟我们面对的用户并不知道IE的这个设置,而我用来测试的另外一台电脑就是因为选择了第一个选项而没有出现在我电脑上出现的问题~~~

       因此第二个解决方法就是:将上传文件的get请求给为Post请求即可,因为Post请求返回的数据一定是最新的数据而不是缓存数据。

       相信看了这一篇文章,你对get与post的区别的理解又进了一步。

       

  • 相关阅读:
    单链表
    找最长最短字符串
    注解
    Json字符串
    java的反射机制
    java类的加载与加载器
    String StringBuilder StringBuffer
    查看运行某类时当前的进程状态
    迷宫小游戏
    类的初始化过程、super关键字与函数绑定
  • 原文地址:https://www.cnblogs.com/ghhlyy/p/2793184.html
Copyright © 2011-2022 走看看