搜索

首页  >  问答  >  正文

java - 如何解决跨域重定向携带参数的问题?不使用将参数拼接在重定向url末尾的方式

如何解决跨域重定向携带参数的问题?不使用将参数拼接在重定向url末尾的方式

需求,项目A在服务器A上,需要重定向到服务器B上项目B,并且需要携带参数,参数对用户不可见,所以不可以将参数拼接在重定向url后面,各位 还有其他方案吗?

项目使用 spring

RedirectAttributes.addFlashAttribute 是不可以的,他只能够在同一个项目之内的controll之间重定向。

这个问题没有解决,各位给个回复顶起啊。

补充问题:
(1)楼下回答
可以把数据放在请求的header里 不过需要对方服务器需要设置允许请求头自定义字段

这个该如何理解?如何实现?

浏览器请求服务器A(不是ajax请求),服务器A 返回302响应以及重定向url 对客户端进行重定向,此时服务器A可以将需要传递的参数放置到响应头中,然后浏览器对目标url进行重定向,但是此时不会携带之前重定向响应头信息啊

如何才能够让他携带过去呢?

(2)问题二, 服务器返回302重定向响应,这个响应中能够包含响应体报文吗???

因为我测试的是使用response写入数据,但是浏览器端看不到重定向响应数据,这一点在实现上是如何控制的?是不是所有的重定向响应都不包含响应体?

伊谢尔伦伊谢尔伦2769 天前1939

全部回复(8)我来回复

  • PHP中文网

    PHP中文网2017-05-27 17:43:37

    可以把数据放在请求的header里 不过需要对方服务器需要设置允许请求头自定义字段

    回复
    0
  • 巴扎黑

    巴扎黑2017-05-27 17:43:37

    1. 服务器端A向B发送参数,等B应答

    2. B得到参数保存起来,给A应答一个token。A携带这个token重定向到B

    3. B接收到A的重定向,根据token获取第1步保存好的参数

    回复
    0
  • PHP中文网

    PHP中文网2017-05-27 17:43:37

    制造一个<form method="POST">,把参数填以<input type="hidden" ...>的形式填到<form>里,再用JavaScript触发submit(),这些参数就在地址栏里不可见地带到目标站点了。

    回复
    0
  • 仅有的幸福

    仅有的幸福2017-05-27 17:43:37

    谢谢邀请,如果两个服务都是你自己控制的,加密参数内容就可以了,可以参考 http session 是如何加密解密的,有相关安全标准的。

    回复
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-27 17:43:37

    题主要不试试从前端的角度去解决这个问题?就是通过前端发送一个ajax请求,然后使用jsonp去解决跨域传参数的问题

    回复
    0
  • 漂亮男人

    漂亮男人2017-05-27 17:43:37

    或者是做一个中间层服务,这样用户请求中间层服务是看不到具体的参数,也控制了跨域问题

    回复
    0
  • 仅有的幸福

    仅有的幸福2017-05-27 17:43:37

    把数据和服务器B的地址写给浏览器的ajax,ajax拿到地址后带着数据post到B服务器.

    回复
    0
  • phpcn_u1582

    phpcn_u15822017-05-27 17:43:37

    1.如果这两个服务器都是你可控的可以通过cookie跨域的方式带过去,注意只有通过cookie跨域302重定向才能带着cookie请求头去访问B服务器,别的自定义请求头浏览器是不会带过去的。
    2.http协议并没有规定302响应时不能带响应体,可能是浏览器自动忽略了?
    3.你可以用307来做,这样你的post请求就会post到新的uri上去。具体看看rfc2616-307

    回复
    0
  • 取消回复