I’m running an webserver where a customer hosts Contao under www.domain.tld and Matomo unter matomo.domain.tld. He wants to connect both products an presents me with the developer console of chromium webbrowsers which says:
GET https://matomo.domain.tld/matomo.php?... 414 (Request-Uri too long)
I copied the URI-Part to an editor for counting chars - its about 400.000 chars long. So I set up apache2s LimitRequestLine and LimitRequestFieldSize higer than this value and now I get an 500.
Maybe the Request-URI is really too long? Whats the reason for - an filter?
In the case of the 414 Request-URI Too Large error, the problem is clear: the URLs being passed to the server are too big.
There are several things that you can do to avoid URLs that are too long: If using dynamic URLs with URL parameters, use server-side URL rewrites to convert them into static, human-readable URLs. Try to minimize the number of parameters in the URL whenever possible.
Or, you’ll need to change your Apache or Nginx server settings. You’ll need to adjust some configuration settings to allow for longer URLs.
where does this request come from? (by which way is it generated?) Because indeed, 400K is really too much!
Can you provide the list of used parameters (or at least the number of parameters that are passed in the URI)? Is there any value that is longer than it should be (eg. more than 100 chars)?
Under Apache, the limit is a configurable value, LimitRequestLine. Change this value to something larger than its default of 8190 if you want to support a longer request URI. Extremely long URLs are usually a mistake. If you keep URLs under 2000 characters , they’ll work in virtually any combination of client and server software. URI actually have a character limit depending on several things. Chrome limits url length of 2MB for practical reasons and to avoid causing denial-of-service problems in inter-process communication. On most platforms, Chrome’s omnibox limits URL display to 32kB ( kMaxURLDisplayChars ) although a 1kB limit is used on VR platforms. IE - 2083 characters, Firefox - 2047 characters, Safari 80000 characters and Opera 190,000 characters.
To resolve the problem :
By POST request: Convert query string to json object and sent to API request with POST
By GET request: Max length of request is depend on sever side as well as client side. Most webserver have limit 8k which is configurable. On the client side the different browser has different limit. The browser IE and Safari limit to 2k, Opera 4k and Firefox 8k. means the max length for the GET request is 8k and min request length is 2k.
If exceed the request max length then the request truncated outside the limit by web server or browser without any warning. Some server truncated request data but the some server reject it because of data lose and they will return with response code 414.