Отсутствует заголовок «Соединение» WebSocket

Я пытаюсь подключиться к Intersystems Cache CSP Websocket со следующей строкой от клиента:

var ws = new WebSocket("ws://" + window.location.host + "/path/ClassName.cls");

И я получаю эту ошибку в консоли Chrome:

WebSocket connection to 'ws://<server address>' failed: Error during WebSocket handshake: 'Connection' header is missing

Заголовки запроса:

Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,he;q=0.6
Cache-Control:no-cache
Connection:Upgrade
Cookie:CSPWSERVERID=Cache for Windows (x86-64) 2013.1.1 (Build 501_1_13062) Sun Aug 11 2013 23:20:33 EDT
Host:<host-ip>
Origin:http://<host-ip>
Pragma:no-cache
Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits
Sec-WebSocket-Key:<the key>
Sec-WebSocket-Version:13
Upgrade:websocket
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36

И заголовки ответа:

Date:Tue, 04 Aug 2015 11:45:54 GMT
Sec-WebSocket-Accept:<some key>
Sec-WebSocket-Protocol:chat
Server:Microsoft-IIS/7.5
Transfer-Encoding:chunked
Upgrade:websocket
X-Powered-By:ASP.NET

Сервер использует IIS 7.5, который технически не поддерживает WebSocket, но кажется, что все заголовки websocket действительно на месте, кроме одного: «Connection»: «Upgrade».

Есть ли способ ввести заголовок «соединение» в ответ на рукопожатие? Есть ли какая-то конфигурация клиента, которая может игнорировать отсутствующий заголовок?

Спасибо.


person syonip    schedule 04.08.2015    source источник
comment
Даже если вы можете внедрить заголовок, как вы думаете, сервер IIS будет держать сокеты открытыми? Мне кажется, что сервер может закрыть соединение даже после успешного рукопожатия... Я бы рекомендовал переключить сервер, а не искать обходной путь.   -  person Myst    schedule 04.08.2015
comment
Возможно, вы правы. К сожалению, обновление до IIS8 требует обновления серверов с 2008 по 2012 год, что является довольно длительным политическим процессом в крупной организации.   -  person syonip    schedule 06.08.2015
comment
Возможно, установка apache или nginx на серверы 2008 года будет проще... в любом случае, удачи!   -  person Myst    schedule 06.08.2015


Ответы (1)


К сожалению, для поддержки WebSockets вам потребуется IIS 8 + Windows 8 и Windows Server 2012.

http://docs.intersystems.com/cache20152/csp/docbook/DocBook.UI.Page.cls?KEY=GCGI_oper_config#GCGI_websockets

person Anton    schedule 11.11.2015