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 - 新浪微博中的關注功能是如何設計表結構的?2. angular.js - 關于$apply()3. MySQL數據庫中文亂碼的原因4. dockerfile - [docker build image失敗- npm install]5. angular.js使用$resource服務把數據存入mongodb的問題。6. 如何解決Centos下Docker服務啟動無響應,且輸入docker命令無響應?7. nignx - docker內nginx 80端口被占用8. angular.js - Ionic 集成crosswalk后生成的apk在android4.4.2上安裝失敗???9. android-studio - Android Studio 運行項目的時候一堆警告,跑步起來!?10. 我在centos容器里安裝docker,也就是在容器里安裝容器,報錯了?
