java - 如何解決跨域重定向攜帶參數的問題?不使用將參數拼接在重定向url末尾的方式
問題描述
如何解決跨域重定向攜帶參數的問題?不使用將參數拼接在重定向url末尾的方式
需求,項目A在服務器A上,需要重定向到服務器B上項目B,并且需要攜帶參數,參數對用戶不可見,所以不可以將參數拼接在重定向url后面,各位 還有其他方案嗎?
項目使用 spring
RedirectAttributes.addFlashAttribute 是不可以的,他只能夠在同一個項目之內的controll之間重定向。
這個問題沒有解決,各位給個回復頂起啊。
補充問題:(1)樓下回答可以把數據放在請求的header里 不過需要對方服務器需要設置允許請求頭自定義字段
這個該如何理解?如何實現?
瀏覽器請求服務器A(不是ajax請求),服務器A 返回302響應以及重定向url 對客戶端進行重定向,此時服務器A可以將需要傳遞的參數放置到響應頭中,然后瀏覽器對目標url進行重定向,但是此時不會攜帶之前重定向響應頭信息啊
如何才能夠讓他攜帶過去呢?
(2)問題二, 服務器返回302重定向響應,這個響應中能夠包含響應體報文嗎???
因為我測試的是使用response寫入數據,但是瀏覽器端看不到重定向響應數據,這一點在實現上是如何控制的?是不是所有的重定向響應都不包含響應體?
問題解答
回答1:可以把數據放在請求的header里 不過需要對方服務器需要設置允許請求頭自定義字段
回答2:服務器端A向B發送參數,等B應答
B得到參數保存起來,給A應答一個token。A攜帶這個token重定向到B
B接收到A的重定向,根據token獲取第1步保存好的參數
回答3:制造一個<form method='POST'>,把參數填以<input type='hidden' ...>的形式填到<form>里,再用JavaScript觸發submit(),這些參數就在地址欄里不可見地帶到目標站點了。
回答4:謝謝邀請,如果兩個服務都是你自己控制的,加密參數內容就可以了,可以參考 http session 是如何加密解密的,有相關安全標準的。
回答5:題主要不試試從前端的角度去解決這個問題?就是通過前端發送一個ajax請求,然后使用jsonp去解決跨域傳參數的問題
回答6:或者是做一個中間層服務,這樣用戶請求中間層服務是看不到具體的參數,也控制了跨域問題
回答7:把數據和服務器B的地址寫給瀏覽器的ajax,ajax拿到地址后帶著數據post到B服務器.
回答8:1.如果這兩個服務器都是你可控的可以通過cookie跨域的方式帶過去,注意只有通過cookie跨域302重定向才能帶著cookie請求頭去訪問B服務器,別的自定義請求頭瀏覽器是不會帶過去的。2.http協議并沒有規定302響應時不能帶響應體,可能是瀏覽器自動忽略了?3.你可以用307來做,這樣你的post請求就會post到新的uri上去。具體看看rfc2616-307
相關文章:
1. mysql - 這條聯合sql語句哪里錯了2. webpack - vuejs+java前后臺分離實現及部署問題3. docker容器呢SSH為什么連不通呢?4. docker鏡像push報錯5. docker start -a dockername 老是卡住,什么情況?6. docker網絡端口映射,沒有方便點的操作方法么?7. mysqldb - MAC OS安裝MySQL-python總是失敗,請幫忙看看什么原因?8. javascript - ios 軟鍵盤彈出header被頂上去 定位失效 求大神解決9. javascript語法錯誤10. javascript - JS繼承,如何避免父類原型的object類型屬性會受子類影響的情況;
