Usual website can be get through four hops: guard, relay, exit and the site. For a regular Hidden Service (HS) used 6 hops: client has 3 hops to RP and then 2 (or three?) to HS. For Single Onion Service (SOS) with HiddenServiceSingleHopMode as far I understood it may be enough only 3 hops for a client: guard, relay and finally the SOS node. But in this case we may see that the last node is not an exit node and find that the client visits a SOS. Is it right? Or it's not possible to distinguish of the node is exit or just relay? Does exit nodes are used as just relay? I mean, if you don't know if the last node is a service itself or a relay then just 3 hops should be safe to keep a clients anonymity.
So for the SOS in fact there is 4 hops: guard, relay, RP (or exit?) and only then a SOS node. Again if we can distinguish that the RP is not an exit node then we can determine that a client visits SOS, right?
From the documentation:
Onion service descriptors are still posted using 3-hop paths, to avoid onion service directories blocking the service
But in this case the SOS makes a little sense in terms of latency because count of hops is 4 and the same as usual visiting a site via an exit node. Yes, in case of a plain HTTP the last hop will be unencrypted but if the site has an HTTPS then probably the only one thing that leaks is SNI record with a domain name. The another one reason to has SOS is when your site doesn't have a static IP so this is just a NAT punching. Also the onion domains doesn't leak anywhere if I clicked on a link and it opened in Chrome instead of TorBrowser. I saw that the Circuit Number may be used to distinguish users that all have an IP of the same Exit node which may be useful to block bots.
I'm trying to figure out what are advantages of using SOS. If I have a website that I would like to make faster to my clients who are using Tor then it looks like SOS won't make them faster and just HTTPS will be fine.