前些日子在开发公司项目接口的时候,由于需要与第三方平台对接,由于接口之前的层层封装,不断的需要转发,把人差点搞糊涂了。本来以为之前对Redirect的认识足够清楚,可是到实际开发之前我还是没有把这个问题想清楚,从而造成了需要花费更多的时间解决问题。总结下,并分享。

1.请求转发(forward):

          当客户端(浏览器)向远程服务器发送一个URL(http://www.cnblogs.com/zivxiaowei/)GET请求后,服务器接收到请求后,会在服务器内部直接通过另外的一个URL获取资源,并将此资源再响应给浏览器,也就是说请求转发整个过程是一次性的。列如:
 
->在浏览器中看到这URL(http://www.cnblogs.com/zivxiaowei/),
->通过页面上的点击操作后,
->服务器响应了其他页面内容到浏览器,但是浏览器的URL地址仍然是原来的URL.
 
2.重定向(Redirect):
          当客户端(浏览器)向服务器发送一个URL请求后,但是资源并不在当前请求的服务器上,此时服务器会告诉浏览器,资源在另外一个URL地址上,此时浏览器会重新发送请求到新的资源地址。例如:
 
->在浏览器中看到这URL(http://www.cnblogs.com/zivxiaowei/),
->服务器A响应浏览器重定向
->浏览器重新定位新的URL地址到服务器B
->服务器B响应内容到浏览器,此时浏览器上面的URL已经换位了新的资源请求地址
 
3.场景:
     现在又服务器:A,B,C,D, ABC都是本公司服务器,A服务器为Web服务器,而D为合作伙伴提供的接口服务器。
     公司Web项目A需要调用服务器D的远程鉴权接口,而我司又通过B,C两个服务器对D服务器的鉴权接口进行了封装,
然后web服务器A会通过调用服务器B,B调用服务器C,C调用D的方式调用鉴权接口(有点烦人,但是他们要求这么做)。
     服务器D本来可以直接通过响应JSON/XML数据来提供接口的,但是他们做了业务逻辑封装,
  1. 当发现请求鉴权不通过的时候,D服务器会重定向到他们的Web页面,当用户在界面上操作完成后,D服务器会发送重定向请求到调用者制定的接口,然后调用者通过解析重定向请求的数据完成接下来的操作。
  2. 当调用者发送的请求通过了服务器D鉴权的时候,服务器D会直接重定向响应到调用者制定的接口,然后调用者通过解析重定向请求的数据完成接下来的操作。
 
  简而言之,对接服务器D,需要其他服务端不断的发送重定向请求。愚蠢的是,由于当时没想明白整个重定向流程,对接的时候,我把服务器D重定向的结果地址写在了服务器B上接收,然后把数据封装成了JSON。最后造成的结果就是,当用户在浏览器上访问服务器A时,服务器响应的都是数据,Web服务器A根本就没有进行过业务逻辑处理。最后又不得重新修订了下接口,重定向结果请求还是得放在Web端。
 
4.总结
     接口的制定是一深度技术活,设计不好就是个大坑。了解清楚重定向,以后碰到了少走点弯路,少入点坑。(描述的肯能不是很清楚,见谅)

细说Redirect重定向请求(情节分享)的更多相关文章

  1. jsp - redirect重定向 / forward转发

    redirect:请求重定向: 客户端行为,本质上为2次请求,地址栏改变,前一次请求对象不保存, 所以请求携带的数据会丢失. 举例:你去银行办事(forward.jsp),结果告诉你少带了东西,你得先 ...

  2. Spring 梳理-跨重定向请求传递数据-Flash

    Spring MVC Flash Attribute 的讲解与使用示例 1. Spring MVC 3.1版本加了一个很有用的特性,Flash属性,它能解决一个长久以来缺少解决的问题,一个POST/R ...

  3. Java Servlet(九):转发请求与重定向请求区别

    转发: <% pageContext.setAttribute("pageContextAttr", "pageContextAttribute"); r ...

  4. ajax异步请求Response.Redirect重定向

    一个ajax异步请求报错->捕获异常->重定向错误提示页面.  一个简单的流程 结果一直搞不定.重定向无效.各种百度之. 后来突然想起 ajax的请求是不能在后台重定向的. 如果硬要重定向 ...

  5. Forword(请求转发)与Redirect(重定向) 区别

    1.从数据共享上 Forword是一个请求的延续,可以共享request的数据 Redirect开启一个新的请求,不可以共享request的数据 2.从地址栏 Forword转发地址栏不发生变化 Re ...

  6. Loader拉取图片,由于redirect重定向,导致策略文件无效 设置checkPolicyFile后还是无效:需要一个策略文件,但在加载此媒体时未设置 checkPolicyFile 标志

    大家好,在这里分享一下flash里边处理redirect的方法. 一般而言,大家不会遇到这个问题,毕竟图片地址一般杠杠的,不会redirect.但昨天在拉取空间的照片就会出现redirect.神啊!! ...

  7. Tornado源码分析 --- Redirect重定向

    “重定向”简单介绍: “重定向”指的是HTTP重定向,是HTTP协议的一种机制.当client向server发送一个请求,要求获取一个资源时,在server接收到这个请求后发现请求的这个资源实际存放在 ...

  8. ringMVC——redirect重定向跳转传值

    spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示.     首先先来介绍一下不带参数的重定向:    ...

  9. springmvc重定向请求。

    SpringMVC重定向传参数的实现(来自网友) 验证了我说的,从model层中拿来的数据,不管什么类型,都是通过隐含模型,中转,放入request中的.除非你特意把这些数据放到session域中. ...

随机推荐

  1. 陕西师范大学第七届程序设计竞赛网络同步赛 C iko和她的糖【贪心/ STL-优先队列/ 从1-N每个点有能量补充,每段有消耗,选三个点剩下最多能量】

    链接:https://www.nowcoder.com/acm/contest/121/C来源:牛客网 题目描述 iko超级超级喜欢吃糖,有一天iko想出去玩,她计划从1点走到N点(按1,2,3,.. ...

  2. spark-reduceByKey算子

  3. springmvc使用StringHttpMessageConverter需要配置编码

    Spring controller 如下 @Controller public class SimpleController { @ResponseBody @RequestMapping(value ...

  4. gedit插件配置

    Ubuntu用户 sudo apt-get install gedit-plugins Fedora用户 yum install gedit-plugins 使用gEdit搭配terminal来写程序 ...

  5. 提高MSSQL数据库性能(1)对比count(*) 和 替代count(*)

    原文:提高MSSQL数据库性能(1)对比count(*) 和 替代count(*) 文章准备的数据库: Atricles 表   数据量60690000条数据 ArticleID 主键自增列+自动建立 ...

  6. linux命令详解:basename命令

    转:http://www.cnblogs.com/lwgdream/archive/2013/11/05/3407768.html 前言 bashname命令用于获取路径中的文件名或路径名(获取的时候 ...

  7. 如何在AutoCAD中将卫星底图变为有坐标参考信息的

    这篇博文首先没有图,主要是博主太懒了,不想再截图,我把过程说清楚也可以的.特此说明. (1)将下载好的瓦片拼接好大的地图 (2)将其导入到ArcGIS中,定义其地理坐标,如WGS84:然后将其其投影为 ...

  8. JAVA常见算法题(二十二)

    package com.xiaowu.demo; //利用递归方法求5!. public class Demo22 { public static void main(String[] args) { ...

  9. Kubernetes 针对资源紧缺处理方式的配置

    如何在资源紧缺的情况下,保证 Node 的稳定性,是 Kubelet 需要面对的一个重要的问题.尤其对于内存和磁盘这种不可压缩的资源,紧缺就相当于不稳定. 在kubelet启动作为参数或者在配置文件中 ...

  10. Java:网络编程之应用实例

    1.聊天 编写一个聊天程序,有收数据的部分和发数据的部分. 这两部分需要同时执行,那么就需要多线程技术. 一个线程控制发送. 一个线程控制接收. 因为收和发动作是不一致的,所以要定义两个run方法,而 ...