2016-08-11 62 views
1

使用最後一次Android-Webview更新(52.0.2743.98),我非常難以使用Cordova將cookies發送到我的websocket服務器。在Android上使用Cordova Websockets發送cookie

我使用的身份驗證cookie和驗證碼用於更新之前很好地工作: this.websocket = new WebSocket(url);

我甚至嘗試另一種方式握手過程中強制餅乾頭,但它不工作:

this.websocket = new WebSocket(
    url, 
    [], 
    { headers: { Cookie: 'key=value' } } 
); 

這裏是服務器響應:

WebSocket connection to 'wss://api.my.url/dev/ws' failed: 
Error during WebSocket handshake: Unexpected response code: 403 

而根據網絡選項卡中鉻:

Request: 
Accept-Encoding:gzip, deflate 
Accept-Language:en-GB,en-US;q=0.8 
Cache-Control:no-cache 
Connection:Upgrade 
Host:api.host.com 
Origin:file:// 
Pragma:no-cache 
Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits 
Sec-WebSocket-Key:<random value>== 
Sec-WebSocket-Version:13 
Upgrade:websocket 
User-Agent:Mozilla/5.0 (Linux; Android 6.0.1; Nexus 6P Build/MTC19X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.98 Mobile Safari/537.36 
X-Requested-With:com.domain 

Response: 
Access-Control-Allow-Credentials:true 
Access-Control-Allow-Headers:DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type 
Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS 
Access-Control-Allow-Origin:file:// 
Connection:keep-alive 
Content-Encoding:gzip 
Content-Type:application/json; charset=utf-8 
Date:Thu, 11 Aug 2016 13:47:09 GMT 
Server:nginx/1.8.1 
Set-Cookie:key=<random id>; Path=/ 
Transfer-Encoding:chunked 
Vary:Accept-Encoding 

注意,它仍然適用於Chrome和iOS(和Android的web視圖的以前的版本)

任何建議?

+0

不認爲我們可以通過協議明確地傳遞websocket上的頭文件。然而默認cookie應該已經通過每個請求正常http或ws。我也在android的更新版本上面臨同樣的問題。 – Ashish

+0

您是否找到了解決方案? –

回答

0

也許更好的選擇來解決你的問題是改變瀏覽器。現在您使用Chrome瀏覽器來顯示混合應用程序,您可以更改此默認瀏覽器。

我和WebSockets有同樣的問題,我使用了CrossWalk瀏覽器,並且我沒有任何WebSocket問題。您可以在此頁面查看人行橫道項目:https://crosswalk-project.org/documentation/android.html

我使用的離子來實現我的應用,並且只有我不得不運行這個命令來安裝人行橫道瀏覽器:

離子瀏覽器添加人行橫道

+0

Crosswalk現在不再維護了,對於KitKat和上層他們建議使用Android系統WebView,現在它是一個單一的可更新的「應用程序」 –