java - 如何解決跨域重定向攜帶參數(shù)的問題?不使用將參數(shù)拼接在重定向url末尾的方式
問題描述
如何解決跨域重定向攜帶參數(shù)的問題?不使用將參數(shù)拼接在重定向url末尾的方式
需求,項目A在服務(wù)器A上,需要重定向到服務(wù)器B上項目B,并且需要攜帶參數(shù),參數(shù)對用戶不可見,所以不可以將參數(shù)拼接在重定向url后面,各位 還有其他方案嗎?
項目使用 spring
RedirectAttributes.addFlashAttribute 是不可以的,他只能夠在同一個項目之內(nèi)的controll之間重定向。
這個問題沒有解決,各位給個回復(fù)頂起啊。
補充問題:(1)樓下回答可以把數(shù)據(jù)放在請求的header里 不過需要對方服務(wù)器需要設(shè)置允許請求頭自定義字段
這個該如何理解?如何實現(xiàn)?
瀏覽器請求服務(wù)器A(不是ajax請求),服務(wù)器A 返回302響應(yīng)以及重定向url 對客戶端進行重定向,此時服務(wù)器A可以將需要傳遞的參數(shù)放置到響應(yīng)頭中,然后瀏覽器對目標url進行重定向,但是此時不會攜帶之前重定向響應(yīng)頭信息啊
如何才能夠讓他攜帶過去呢?
(2)問題二, 服務(wù)器返回302重定向響應(yīng),這個響應(yīng)中能夠包含響應(yīng)體報文嗎???
因為我測試的是使用response寫入數(shù)據(jù),但是瀏覽器端看不到重定向響應(yīng)數(shù)據(jù),這一點在實現(xiàn)上是如何控制的?是不是所有的重定向響應(yīng)都不包含響應(yīng)體?
問題解答
回答1:可以把數(shù)據(jù)放在請求的header里 不過需要對方服務(wù)器需要設(shè)置允許請求頭自定義字段
回答2:服務(wù)器端A向B發(fā)送參數(shù),等B應(yīng)答
B得到參數(shù)保存起來,給A應(yīng)答一個token。A攜帶這個token重定向到B
B接收到A的重定向,根據(jù)token獲取第1步保存好的參數(shù)
回答3:制造一個<form method='POST'>,把參數(shù)填以<input type='hidden' ...>的形式填到<form>里,再用JavaScript觸發(fā)submit(),這些參數(shù)就在地址欄里不可見地帶到目標站點了。
回答4:謝謝邀請,如果兩個服務(wù)都是你自己控制的,加密參數(shù)內(nèi)容就可以了,可以參考 http session 是如何加密解密的,有相關(guān)安全標準的。
回答5:題主要不試試從前端的角度去解決這個問題?就是通過前端發(fā)送一個ajax請求,然后使用jsonp去解決跨域傳參數(shù)的問題
回答6:或者是做一個中間層服務(wù),這樣用戶請求中間層服務(wù)是看不到具體的參數(shù),也控制了跨域問題
回答7:把數(shù)據(jù)和服務(wù)器B的地址寫給瀏覽器的ajax,ajax拿到地址后帶著數(shù)據(jù)post到B服務(wù)器.
回答8:1.如果這兩個服務(wù)器都是你可控的可以通過cookie跨域的方式帶過去,注意只有通過cookie跨域302重定向才能帶著cookie請求頭去訪問B服務(wù)器,別的自定義請求頭瀏覽器是不會帶過去的。2.http協(xié)議并沒有規(guī)定302響應(yīng)時不能帶響應(yīng)體,可能是瀏覽器自動忽略了?3.你可以用307來做,這樣你的post請求就會post到新的uri上去。具體看看rfc2616-307
相關(guān)文章:
1. (python)關(guān)于如何做到按win+R再輸入文件文件名就可以運行?2. python - oslo_config3. 請教一個mysql去重取最新記錄4. python - 請問這兩個地方是為什么呢?5. Python處理Dict生成json6. 急急急!!!求大神解答網(wǎng)站評論問題,有大神幫幫小弟嗎7. javascript - 按鈕鏈接到另一個網(wǎng)址 怎么通過百度統(tǒng)計計算按鈕的點擊數(shù)量8. python2.7 - python 正則前瞻 后瞻 無法匹配到正確的內(nèi)容9. 大家都用什么工具管理mysql數(shù)據(jù)庫?10. mysql - Sql union 操作
