I think something like the ACL Filters functionality is the right way to do 
what you want -- there is already "@in_ip" to select mappings based on the IP 
address on which the request was received.  Based on that, I would propose 
adding a parameter "@in_proto" that can take values "unix", "http", "http2", 
etc.  You can then create different mapping rules that are selected based on 
incoming protocol without modification to the target schema.

Digging in a bit more to my thought process that led to this, I think there are 
two separate matters to consider here.

The first is HTTP over sockets.  This isn't really HTTP(/[12]) if it's not over 
TCP, nor HTTP/3 if it's not over QUIC, is it?  The addressing schema for unix 
sockets is different, because in the general sense of trying to address an 
origin over a socket we're referring to a socket path rather than a hostname or 
IP address.  From ATS' perspective (as a reverse proxy, at least) the only 
things that matter are the Host header and the request target, but it's worth 
considering how a theoretical client would be addressing HTTP-over-socket.  It 
looks like WHATWG had some inconclusive discussion on this back in 2021, and 
it's worth reviewing that issue first: https://github.com/whatwg/url/issues/577

More importantly, though, modifying the target schema for translating the map 
target based on how it arrived to ATS feels like an abstraction violation.  
There isn't how we currently remap differently based on received interface, or 
IP address ("@in_ip" ACL Filters), and we don't support this based on protocol 
(HTTP/1 vs 2 vs 3).  (The closest is map_with_recv_port, which is minimally 
documented and I'm not entirely certain what it does.)  This says to me that 
mis-using the schema part of the map target is not the right way to solve your 
problem.

Therefore, I think an "@in_proto" extension for the ACL Filter mechanism is 
most parallel to the existing map language.

Regards,
--Jered

----- On Aug 21, 2025, at 6:06 PM, Masakazu Kitajo mas...@apache.org wrote:

> I am not sure if I understand your question, here's the reasons for
> introducing a new scheme for ATS remap rules:
> 
> I have a use case that needs to distinguish requests received on an IP
> interface and ones received on a Unix Domain Socket. Having different remap
> rules for those two allows me to use different remap plugin settings. Does
> that make sense?
> 
> Unix Domain Socket is different from one for TCP/IP. There isn't a port
> number for it. As far as I know, there is no standardized way to indicate
> the use of Unix Domain Socket, and I think the scheme portion is the only
> field that we can use without violating RFC 3986. Although the new scheme
> "http+uds" is not standardized, external libraries for parsing/generating
> URLs should be able to handle it.
> 
> I hope these answers your questions.
> 
> Thanks,
> Masakazu
> 
> 
> On Wed, Aug 20, 2025 at 2:24 PM Randy DuCharme <radio.ad...@gmail.com>
> wrote:
> 
>> APIs can be anything.  There's hundreds of ports available.  Why
>> standardize the unstandard?
>>
>> Randall DuCharme (Radio *AD5GB*)
>> Powered by Open Source software.
>>
>>
>> On Wed, Aug 20, 2025, 15:22 Randy DuCharme <radio.ad...@gmail.com> wrote:
>>
>> > Why?
>> >
>> > Randall DuCharme (Radio *AD5GB*)
>> > Powered by Open Source software.
>> >
>> >
>> > On Wed, Aug 20, 2025, 15:21 Masakazu Kitajo <mas...@apache.org> wrote:
>> >
>> >> Hi,
>> >>
>> >> I recently proposed a way to support remap rules that only match with
>> >> requests that are made on Unix Domain Socket, and I'd like to request
>> for
>> >> comments.
>> >> https://github.com/apache/trafficserver/pull/12338
>> >>
>> >> My proposal is to introduce a special URL scheme "http+uds" (and
>> >> https+uds)
>> >> and use it with map_with_recv_port keyword (the keyword is uncommon but
>> >> not
>> >> new).
>> >>
>> >> Example:
>> >> map_with_recv_port http+uds://service.example http://origin.example/
>> >>
>> >> I originally thought of using a special port number/string instead of
>> the
>> >> new scheme, but it didn't seem practical to me because it'd require a
>> lot
>> >> of changes in code. In a nutshell, having characters at the port portion
>> >> of
>> >> a URL is not allowed by the standard, and we'd have to change the URL
>> >> parser and also the data structure, which affects cache data. With that
>> >> said, that is a difficulty in the implementation. I'd appreciate and
>> >> respect comments from users as well.
>> >>
>> >> Thanks,
>> >> Masakazu
>> >>
>> >

Reply via email to