最後のAndroid-Webviewアップデート(52.0.2743.98)では、Cordovaを使用してwebsocketサーバーにCookieを送信するのが非常に困難です。AndroidでCordova Websocketを使用して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
とChromeでネットワークタブの下で:
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のWebView-の以前のバージョン)
任意の勧告?
いけないを追加すると思います私たちは明示的にwebsocket上のヘッダをプロトコルで渡すことができます。しかし、デフォルトのクッキーは、各リクエストnormall httpまたはwsで渡されている必要があります。私もアンドロイドのアップデート版で同じ問題に直面している。 – Ashish
解決策を見つけましたか? –