How to access another worker without binding

Service bindings explain how to

allow one worker to call into another, without going through a publicly-accessible URL

But how to call another worker (in the same account) without bindings? I’ve tried to do it naively by just fetching another worker via it’s *.workers.dev URL, but it always gives 404. Calls from other places are fine, only calls from a worker are 404.

Why don’t you want to use service binding? It saves time and does not count toward the open connection limit?

I have a proxy which passes request to original API endpoint or mock endpoint (= another worker) based on a header. The header is the endpoint URL. Ideally I want the worker to pass request transparently without caring whether it’s original or mock.

I solved it by checking the header URL which is not perfect because now my worker depends on env variable for mock worker URL.

But anyway, the docs imply that Service binding is just a way to connect workers, not the only way to connect workers.