前些日子在开发公司项目接口的时候,由于需要与第三方平台对接,由于接口之前的层层封装,不断的需要转发,把人差点搞糊涂了。本来以为之前对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.总结
     接口的制定是一深度技术活,设计不好就是个大坑。了解清楚重定向,以后碰到了少走点弯路,少入点坑。(描述的肯能不是很清楚,见谅)

转载于:https://www.cnblogs.com/zivxiaowei/p/3644911.html

细说Redirect重定向请求(情节分享)相关推荐

  1. 细说Redirect重定向请求

    由于需要与第三方平台对接,由于接口之前的层层封装,不断的需要转发,把人差点搞糊涂了.本来以为之前对Redirect的认识足够清楚,可是到实际开发之前我还是没有把这个问题想清楚,从而造成了需要花费更多的 ...

  2. struts result type redirect 重定向和转发的区别

    我们在使用struts2进行配置struts.xml的时候,<result>中有个tyep属性用来配置跳转类型 默认不写时tyep="dispatcher",我们可以根 ...

  3. Transfer Execute Redirect重定向方法介绍

    一.Transfer Execute Redirect重定向方法介绍 1.Server.Transfer方法: Server.Transfer("m2.aspx");//页面转向( ...

  4. Redirect 重定向

    Redirect 重定向 1.基本使用: const http = require('http'); //用于创建 服务的 http模块 const fs = require('fs'); //用于读 ...

  5. redirect(重定向)和forward(转发)的区别

    redirect(重定向)地址栏会发生变化,forward(转发)地址栏路径不变; redirect(重定向)可以访问其他站点(服务器)的资源,forward(转发)只能访问当前服务器下的资源; re ...

  6. Spring MVC中redirect重定向3种方式(带参数)

    Spring MVC中做form表单功能提交时,防止用户客户端后退或者刷新时重复提交问题,需要在服务端进行重定向跳转,其中redirect是直接跳转到其他页面,有以下3种方法进行重定向. redire ...

  7. java重定向设置header_在Java中重定向请求时如何传递HTTP头中的数据

    可以在HTTP头中传递一些数据,同时将请求从一个服务器重定向到另一个服务器. 这是我的场景, 我有一个通用过滤器,每个请求都通过它. 现在,根据一些条件,我使用API​​ objHttpServlet ...

  8. redirect重定向后https变成了http如何解决

    spring mvc中,可以直接配置,将redirectHttp10Compatible属性设为false.如下: redirectHttp10Compatible:解决https环境下使用redir ...

  9. 关于解决SpringBoot中使用redirect重定向后,页面跳转后ulr地址后面出现jsessionid=xxxxxxx的问题

    关于解决SpringBoot中使用redirect重定向后,页面跳转后ulr地址后面出现jsessionid=xxxx的问题 参考链接:https://blog.csdn.net/zshake/art ...

  10. [jquery]AJAX 重定向的困境,如何重定向 URL 或如何设置重定向请求的属性

    我将通过 jQuery xhr 请求发送到远程站点 (这是扩展,铬和设置的所有跨站点设置 - -): $.ajax({type: "POST",contentType : &quo ...

最新文章

  1. Linux系统下按了Ctrl+s锁定屏幕后怎么办?
  2. 为什么说项目管理是每个人必备的底层能力?
  3. P1313-计算系数【组合数,二项式定理】
  4. 【C++ Priemr | 15】虚函数表剖析(三)
  5. python 数据分析 实际案例_python实战案例:超市营业额数据分析
  6. java 建模_Java设计模式菜鸟系列(两)建模与观察者模式的实现
  7. selenium自动化测试——常见的八种元素定位方法
  8. Leetcode每日一题:690.employee-importance(员工的重要性)
  9. 十八年开发经验分享(一)学习篇
  10. python list倒序_python数据分析(1):内建序列函数
  11. 雷林鹏分享:C# 事件(Event)
  12. SpringBoot与SpringCloud版本对应信息
  13. 数学建模教程:GSpan-频繁子图挖掘算法
  14. 各种字符集和编码详解(转)
  15. SAP 标准成本、计划成本、目标成本、实际成本计算公式
  16. [附源码]Python计算机毕业设计大学生校园社团管理系统Django(程序+LW)
  17. 少儿编程Scratch学习教程2--官方初学指南
  18. 大一c语言课程设计答辩ppt,c语言课程设计讲解内容图文.ppt
  19. 【深度学习】隐马尔科夫
  20. python3基础教程雪峰_[雪峰磁针石博客]python3快速入门教程9重要的标准库

热门文章

  1. js或jsp 获取项目路径常用方法
  2. JavaScriptSerializer 类
  3. 关于正则表达式中^和$
  4. WebService学习之三:spring+cxf整合
  5. CodeForces 489B (贪心 或 最大匹配) BerSU Ball
  6. arcgis for flex 学习笔记(一)
  7. Xcode 添加 background modes、Associated Domains 等设置项
  8. POJ 3415 Common Substrings(后缀数组 + 单调栈)题解
  9. HDU 3247 Resource Archiver(AC自动机 + 状压DP + bfs预处理)题解
  10. Navicat使用教程:获取MySQL中的行数(第1部分)