Hi! RFC 6455 4.2.1 states: 4. A |Connection| header field that *includes* the token "Upgrade", treated as an ASCII case-insensitive value.
In my test case Firefox sends: Connection: keep-alive, Upgrade Relayd currently expects Connection to equal Upgrade, not include Upgrade. I haven't figured out how to configure Thunderbird to send proper diffs, so I'm sending bas64 encoded version too. Index: usr.sbin/relayd/relay_http.c =================================================================== RCS file: /cvs/src/usr.sbin/relayd/relay_http.c,v retrieving revision 1.72 diff -u -p -r1.72 relay_http.c --- usr.sbin/relayd/relay_http.c 4 Mar 2019 21:25:03 -0000 1.72 +++ usr.sbin/relayd/relay_http.c 5 Mar 2019 16:03:56 -0000 @@ -400,7 +400,7 @@ relay_read_http(struct bufferevent *bev, if (cre->line != 1) { if (cre->dir == RELAY_DIR_REQUEST) { if (strcasecmp("Connection", key) == 0 && - strcasecmp("Upgrade", value) == 0) + strcasecmp("Upgrade", value) >= 0) priv->http_upgrade_req |= HTTP_CONNECTION_UPGRADE; if (strcasecmp("Upgrade", key) == 0 && begin-base64 644 websocket.diff SW5kZXg6IHVzci5zYmluL3JlbGF5ZC9yZWxheV9odHRwLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L2N2cy9zcmMvdXNyLnNiaW4vcmVsYXlkL3JlbGF5X2h0dHAuYyx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS43MgpkaWZmIC11IC1wIC1yMS43MiByZWxheV9odHRwLmMKLS0tIHVzci5zYmluL3JlbGF5 ZC9yZWxheV9odHRwLmMJNCBNYXIgMjAxOSAyMToyNTowMyAtMDAwMAkxLjcyCisrKyB1c3Iuc2Jp bi9yZWxheWQvcmVsYXlfaHR0cC5jCTUgTWFyIDIwMTkgMTY6MDM6NTYgLTAwMDAKQEAgLTQwMCw3 ICs0MDAsNyBAQCByZWxheV9yZWFkX2h0dHAoc3RydWN0IGJ1ZmZlcmV2ZW50ICpiZXYsCiAJCWlm IChjcmUtPmxpbmUgIT0gMSkgewogCQkJaWYgKGNyZS0+ZGlyID09IFJFTEFZX0RJUl9SRVFVRVNU KSB7CiAJCQkJaWYgKHN0cmNhc2VjbXAoIkNvbm5lY3Rpb24iLCBrZXkpID09IDAgJiYKLQkJCQkg ICAgc3RyY2FzZWNtcCgiVXBncmFkZSIsIHZhbHVlKSA9PSAwKQorCQkJCSAgICBzdHJjYXNlY21w KCJVcGdyYWRlIiwgdmFsdWUpID49IDApCiAJCQkJCXByaXYtPmh0dHBfdXBncmFkZV9yZXEgfD0K IAkJCQkJICAgIEhUVFBfQ09OTkVDVElPTl9VUEdSQURFOwogCQkJCWlmIChzdHJjYXNlY21wKCJV cGdyYWRlIiwga2V5KSA9PSAwICYmCg== ====