Skip to content

write EPIPE error while proxying Websocket requests #43563

Description

@boomdizz

Version

v16.15.1

Platform

Linux xxxxx-HP-EliteBook-840-G3 5.13.0-44-generic #49~20.04.1-Ubuntu SMP Wed May 18 18:44:28 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

Subsystem

No response

What steps will reproduce the bug?

Running node as a development server with a proxy.conf.js file that looks like:

const PROXY_CONFIG = {
    "/graphql" : {
        target: "https://localhost:443/graphql",
        router:  function(req) {
            return "https://localhost:443/graphql"
        },
        changeOrigin: true,
        secure: false,
        logLevel: "debug",
        ws: true
    }
};

module.exports = PROXY_CONFIG;

Proxying graphql calls (queries, mutations and subscriptions through websockets) from an Angular application using an Apollo client.

The Proxy was working well with an earlier version of node, but post upgrade to 16.15.1 (LTS), I get this error on starting ng serve:

✔ Compiled successfully.
[HPM] Router new target: https://localhost:443/graphql -> "https://localhost:443/graphql"
[HPM] GET /graphql/ -> https://localhost:443/graphql
[HPM] Upgrading to WebSocket
[HPM] Router new target: https://localhost:443/graphql -> "https://localhost:443/graphql"
[HPM] GET /graphql/ -> https://localhost:443/graphql
[HPM] Upgrading to WebSocket
[HPM] Router new target: https://localhost:443/graphql -> "https://localhost:443/graphql"
[HPM] GET /graphql/ -> https://localhost:443/graphql
[HPM] Upgrading to WebSocket
[HPM] Router new target: https://localhost:443/graphql -> "https://localhost:443/graphql"
[HPM] GET /graphql/ -> https://localhost:443/graphql
[HPM] Upgrading to WebSocket
node:events:505
      throw er; // Unhandled 'error' event
      ^

Error: write EPIPE
    at afterWriteDispatched (node:internal/stream_base_commons:160:15)
    at writeGeneric (node:internal/stream_base_commons:151:3)
    at Socket._writeGeneric (node:net:817:11)
    at Socket._write (node:net:829:8)
    at writeOrBuffer (node:internal/streams/writable:389:12)
    at _write (node:internal/streams/writable:330:10)
    at Socket.Writable.write (node:internal/streams/writable:334:10)
    at IncomingMessage.ondata (node:internal/streams/readable:754:22)
    at IncomingMessage.emit (node:events:527:28)
    at IncomingMessage.Readable.read (node:internal/streams/readable:527:10)
Emitted 'error' event on Socket instance at:
    at Socket.onerror (node:internal/streams/readable:773:14)
    at Socket.emit (node:events:527:28)
    at emitErrorNT (node:internal/streams/destroy:157:8)
    at emitErrorCloseNT (node:internal/streams/destroy:122:3)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  errno: -32,
  code: 'EPIPE',
  syscall: 'write'
}

This happens as soon as I bring the application up in the browser. Looks like upgrading to Websocket is failing with this error.
Proxying to a Django server with Graphql support.

How often does it reproduce? Is there a required condition?

Everytime. If I set 'ws:false', the error does not happen

What is the expected behavior?

No EPIPE write error and node stays up and services the graphql calls by proxying them to the Django server.

What do you see instead?

EPIPE write error as shown in the output above.

Additional information

No response

Activity

  1. F3n67u commented on Jun 25, 2022

    @F3n67u
    Contributor

    Hi, @boomdizz. Could you help me understand how proxy.conf.js is used in your development server to achieve proxy? I don't know what development server you use. Seems some details is missing.

  2. boomdizz commented on Jun 25, 2022

    @boomdizz
    Author

    Since we are using Angular for the UI, we use ng in this manner:
    ng serve --proxy-config proxy.conf.js --host 0.0.0.0
    The proxy.conf.js file is the file I indicated in the initial bug filing.
    So, when launched as a development server the UI makes graphql calls to the development server (node), which uses the proxy file to route the request/response back and forth with the Django backend.

  3. F3n67u commented on Jun 25, 2022

    @F3n67u
    Contributor

    Ng serve use webpack development server, webpack proxy make use of https://github.com/chimurai/http-proxy-middleware.
    So I search for similar issue on http-proxy-middleware repo and found chimurai/http-proxy-middleware#675 and #41062. #41062 is similar but not the same problem.

    I think it will better if we could make a reproduction with only node, no ng serve and http-proxy-middleware stuff.

  4. added
    httpIssues and PRs related to the http subsystem.
    on Jun 25, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    httpIssues and PRs related to the http subsystem.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions