如何解決跨域重定向攜帶參數的問題?不使用將參數拼接在重定向url末尾的方式
需求,項目A在伺服器A上,需要重定向到伺服器B上項目B,需要攜帶參數,參數對使用者不可見,所以不可以將參數拼接在重定向url後面,各位還有其他方案嗎?
專案使用 spring
RedirectAttributes.addFlashAttribute 是不可以的,他只能夠在同一個專案之內的controll之間重定向。
這個問題沒有解決,各位回覆個給個回。
#補充問題:
(1)樓下回答
可以把資料放在請求的header裡 不過需要對方伺服器需要設定允許請求頭自訂欄位
這個該如何理解?如何實現?
瀏覽器請求伺服器A(不是ajax請求),伺服器A 返回302回應以及重定向url 對客戶端進行重定向,此時伺服器A可以將需要傳遞的參數放置到回應頭中,然後瀏覽器對目標url進行重定向,但是此時不會攜帶先前重定向回應頭訊息啊
如何才能夠讓他攜帶過去呢?
(2)問題二, 伺服器回傳302重定向回應,這個回應中能夠包含回應體封包嗎? ? ?
因為我測試的是使用response寫入數據,但是瀏覽器端看不到重定向回應數據,這一點在實作上是如何控制的?是不是所有的重定向回應都不包含響應體?
可以把資料放在請求的header裡 不過需要對方伺服器需要設定允許請求頭自訂欄位
伺服器端A向B發送參數,等B應答
B得到參數保存起來,給A應答一個token。 A攜帶這個token重定向到B
B接收到A的重定向,根據token取得第1步驟保存好的參數
製造一個
<form method="POST">
,把参数填以<input type="hidden" ...>
的形式填到<form>
里,再用JavaScript触发submit()
,這些參數就在網址列裡不可見地帶到目標站點了。謝謝邀請,如果兩個服務都是你自己控制的,加密參數內容就可以了,可以參考 http session 是如何加密解密的,有相關安全標準的。
題主要不試試從前端的角度去解決這個問題?就是透過前端發送一個ajax請求,然後使用jsonp去解決跨域傳輸參數的問題
或是做一個中間層服務,這樣使用者請求中間層服務是看不到特定的參數,也控制了跨域問題
把資料和伺服器B的位址寫給瀏覽器的ajax,ajax拿到位址後帶著資料post到B伺服器.
1.如果這兩個伺服器都是你可控的可以透過cookie跨域的方式帶過去,注意只有透過cookie跨域302重定向才能帶著cookie請求頭去存取B伺服器,別的自訂請求頭瀏覽器是不會帶過去的。
2.http協定並沒有規定302回應時不能帶響應體,可能是瀏覽器自動忽略了?
3.你可以用307來做,這樣你的post請求就會post到新的uri上去。具體看看rfc2616-307