java - 如何解決跨域重定向攜帶參數的問題?不使用將參數拼接在重定向url末尾的方式
伊谢尔伦
伊谢尔伦 2017-05-27 17:41:37
0
8
1903

如何解決跨域重定向攜帶參數的問題?不使用將參數拼接在重定向url末尾的方式

需求,項目A在伺服器A上,需要重定向到伺服器B上項目B,需要攜帶參數,參數對使用者不可見,所以不可以將參數拼接在重定向url後面,各位還有其他方案嗎?

專案使用 spring

RedirectAttributes.addFlashAttribute 是不可以的,他只能夠在同一個專案之內的controll之間重定向。

這個問題沒有解決,各位回覆個給個回。

#補充問題:
(1)樓下回答
可以把資料放在請求的header裡 不過需要對方伺服器需要設定允許請求頭自訂欄位

這個該如何理解?如何實現?

瀏覽器請求伺服器A(不是ajax請求),伺服器A 返回302回應以及重定向url 對客戶端進行重定向,此時伺服器A可以將需要傳遞的參數放置到回應頭中,然後瀏覽器對目標url進行重定向,但是此時不會攜帶先前重定向回應頭訊息啊

如何才能夠讓他攜帶過去呢?

(2)問題二, 伺服器回傳302重定向回應,這個回應中能夠包含回應體封包嗎? ? ?

因為我測試的是使用response寫入數據,但是瀏覽器端看不到重定向回應數據,這一點在實作上是如何控制的?是不是所有的重定向回應都不包含響應體?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回覆(8)
Ty80

可以把資料放在請求的header裡 不過需要對方伺服器需要設定允許請求頭自訂欄位

巴扎黑
  1. 伺服器端A向B發送參數,等B應答

  2. B得到參數保存起來,給A應答一個token。 A攜帶這個token重定向到B

  3. B接收到A的重定向,根據token取得第1步驟保存好的參數

Ty80

製造一個<form method="POST">,把参数填以<input type="hidden" ...>的形式填到<form>里,再用JavaScript触发submit(),這些參數就在網址列裡不可見地帶到目標站點了。

仅有的幸福

謝謝邀請,如果兩個服務都是你自己控制的,加密參數內容就可以了,可以參考 http session 是如何加密解密的,有相關安全標準的。

曾经蜡笔没有小新

題主要不試試從前端的角度去解決這個問題?就是透過前端發送一個ajax請求,然後使用jsonp去解決跨域傳輸參數的問題

漂亮男人

或是做一個中間層服務,這樣使用者請求中間層服務是看不到特定的參數,也控制了跨域問題

仅有的幸福

把資料和伺服器B的位址寫給瀏覽器的ajax,ajax拿到位址後帶著資料post到B伺服器.

phpcn_u1582

1.如果這兩個伺服器都是你可控的可以透過cookie跨域的方式帶過去,注意只有透過cookie跨域302重定向才能帶著cookie請求頭去存取B伺服器,別的自訂請求頭瀏覽器是不會帶過去的。
2.http協定並沒有規定302回應時不能帶響應體,可能是瀏覽器自動忽略了?
3.你可以用307來做,這樣你的post請求就會post到新的uri上去。具體看看rfc2616-307

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板