Я дошел до того, что у меня нет другого места, где можно было бы искать и находилось в этом в течение 2 дней.Websockets Sec-WebSocket-Accept недействителен в Vala
Я пытаюсь реализовать серверную часть для веб-узлов в Вала. Я слежу за RFC here, а также пытался конвертировать примеры из других языков.
string res = "HTTP/1.1 101 Switching Protocols" + "\r\n"
+ "Connection: Upgrade" + "\r\n"
+ "Upgrade: websocket" + "\r\n"
+ "Sec-WebSocket-Accept: " + Base64.encode(Checksum.compute_for_string(ChecksumType.SHA1,
Regex.split_simple("Sec-WebSocket-Key: (.*)", request)[1].strip() + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
).data;)
+ "\r\n\r\n";
Выход из моего кода Vala отличается от выходов C# и PHP. Ключ отправлен в мой браузер:
y/WXsXKM98if/+AUaqF6iQ==
PHP и C# дать мне следующий результат:
ZGZhMTEyNjkxNDBkNGQ4YzlmOGFmNjZmYzEzN2UxOThlOGM0ZDRlYg==
Вала дает мне следующий результат:
ZmRjODM1ODQwNDNmOTM5ODAzY2Q5MzJhMjE4NzQyYmQ2YmRkOWQ1
Я не думаю, это как-то связано с кодированием строк, поскольку C# и Vala используют одну и ту же стандартную кодировку. Я предположил, что это связано с нулевым байтом в конце массива данных, но я проверил и не существует.
Любой совет будет здорово
Редактировать
Наконец получил выход в Vala, совпадающее PHP и C#. Я забыл добавить к GUID, но это не объясняет, почему я получаю это в Chrome
failed: Error during WebSocket handshake: Incorrect 'Sec-WebSocket-Accept' header value
Есть ли причина, по которой вы пытаетесь написать все это самостоятельно, а не просто использовать поддержку websocket, встроенную в libsoup? https://developer.gnome.org/libsoup/stable/libsoup-2.4-WebSockets.html – nemequ
Я даже не знал, что у Libsoup была поддержка websocket. Все это началось с того, что я хотел настроить сервер для поддержки веб-узлов. Сервер уже работал с другими клиентами. Я посмотрю, могу ли я легко сбросить libsoup там. –
Вы также должны опубликовать свое редактирование в качестве ответа и принять его, чтобы сохранить чистоту. – nemequ