While developing and debugging the Alipay interface, I suddenly discovered that the URL of the Alipay interface is very long, much larger than the 255 characters that I had previously imagined. I quickly searched and verified it, and my understanding is as follows:
It is true that the URL cannot be larger than 255 bytes, and it is mentioned in RFC2616:
Note: Servers ought to be cautious about depending on URI lengths above 255 bytes, because some older client or proxy implementations might not properly support these lengths.
As can be seen from the previous point, the statement of 255bytes is also for compatibility reasons. In fact, the limitations of modern browsers are as follows:
Firefox (Browser)
After 65,536 characters, the location bar no longer displays the URL in Windows Firefox 1.5.x. However, longer URLs will work. I stopped testing after 100,000 characters.
Safari (Browser)
At least 80,000 characters will work. I stopped testing after 80,000 characters.
Opera (Browser)
At least 190,000 characters will work. I stopped testing after 190,000 characters. Opera 9 for Windows continued to display a fully editable, copyable and pasteable URL in the location bar even at 190,000 characters.
Apache (Server)
My early attempts to measure the maximum URL length in web browsers bumped into a server URL length limit of approximately 4,000 characters, after which Apache produces a “413 Entity Too Large” error. I used the current up to date Apache build found in Red Hat Enterprise Linux 4. The official Apache documentation only mentions an 8,192-byte limit on an individual field in a request.
Microsoft Internet Information Server
The default limit is 16,384 characters (yes, Microsoft's web server accepts longer URLs than Microsoft's web browser). This is configurable.
Perl HTTP::Daemon (Server)
Up to 8,000 bytes will work. Those constructing web application servers with Perl's HTTP::Daemon module will encounter a 16,384 byte limit on the combined size of all HTTP request headers. This does not include POST-method form data, file uploads, etc. , but it does include the URL. In practice this resulted in a 413 error when a URL was significantly longer than 8,000 characters. This limitation can be easily removed. Look for all occurrences of 16×1024 in Daemon.pm and replace them with a larger value. Of course, this does increase your exposure to denial of service attacks.
It is also worth noting that some articles mentioned that when used as the href attribute of , the URL cannot exceed 1024 bytes, but this has not been verified in detail
In summary, the URL is still not suitable for being too long. It is not a last resort. Try not to submit a large number of parameters through GET. You can consider using POST (about 2M, it should be related to the server and settings). In addition, such a long URL is also quite unfriendly when accessing and saving (some articles mentioned that some browsers also have problems when saving super long addresses). Of course, the database field settings were still treated as 255 bytes before, but now you may want to consider expanding it.