diff --git a/lib/index.ts b/lib/index.ts index b8bb70998b..3b330481b8 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -437,10 +437,11 @@ export class Server extends EventEmitter { // Per the standard, ETags must be quoted: // https://tools.ietf.org/html/rfc7232#section-2.3 const expectedEtag = '"' + clientVersion + '"'; + const weakEtag = "W/" + expectedEtag; const etag = req.headers["if-none-match"]; if (etag) { - if (expectedEtag == etag) { + if (expectedEtag === etag || weakEtag === etag) { debug("serve client %s 304", type); res.writeHead(304); res.end(); diff --git a/test/socket.io.ts b/test/socket.io.ts index 84081c4987..15cb4f3b0c 100644 --- a/test/socket.io.ts +++ b/test/socket.io.ts @@ -128,6 +128,19 @@ describe("socket.io", () => { }); }); + it("should handle 304", (done) => { + const srv = createServer(); + new Server(srv); + request(srv) + .get("/socket.io/socket.io.js") + .set("If-None-Match", 'W/"' + clientVersion + '"') + .end((err, res) => { + if (err) return done(err); + expect(res.statusCode).to.be(304); + done(); + }); + }); + it("should not serve static files", (done) => { const srv = createServer(); new Server(srv, { serveClient: false });