OData itself does not limit the length of the URL, but as you have noticed, most clients and servers do this. Therefore, it is usually useful not to create the URL for too long.
The problem you are talking about (implementation of the Contains operator or something similar) has two possible workarounds:
1) Use a service operation to process such a request. You can pass multiple input values encoded as a string or something like that, or maybe the service operation still knows about it.
2) Use the long $ filter, but send the request in a $ batch request. The advantage is that the limit on Url is much larger, and you are unlikely to hit it. The disadvantage is that even if you try to execute a GET request, because of $ batch it moves as a POST request over the Internet and therefore it will not be cached.
Vitek Karas MSFT
source share