[#2234] Use QueryStringDecoder.decodeComponent to decode url-encoded data instead of Java's URLDecoder. Backport of 98bc7b7859
Motivation: Previously, we used URLDecoder.decode(...) to decode url-encoded data. This generates a lot of garbage and takes a considerable amount of time. Modifications: Replace URLDecoder.decode(...) with QueryStringDecoder.decodeComponent(...) Result: Less garbage to GC and faster decode processing.
This commit is contained in:
parent
7c4aea4bc3
commit
6f0e740e19
@ -23,14 +23,13 @@ import io.netty.handler.codec.http.HttpHeaders;
|
|||||||
import io.netty.handler.codec.http.HttpMethod;
|
import io.netty.handler.codec.http.HttpMethod;
|
||||||
import io.netty.handler.codec.http.HttpRequest;
|
import io.netty.handler.codec.http.HttpRequest;
|
||||||
import io.netty.handler.codec.http.LastHttpContent;
|
import io.netty.handler.codec.http.LastHttpContent;
|
||||||
|
import io.netty.handler.codec.http.QueryStringDecoder;
|
||||||
import io.netty.handler.codec.http.multipart.HttpPostBodyUtil.SeekAheadNoBackArrayException;
|
import io.netty.handler.codec.http.multipart.HttpPostBodyUtil.SeekAheadNoBackArrayException;
|
||||||
import io.netty.handler.codec.http.multipart.HttpPostBodyUtil.SeekAheadOptimize;
|
import io.netty.handler.codec.http.multipart.HttpPostBodyUtil.SeekAheadOptimize;
|
||||||
import io.netty.handler.codec.http.multipart.HttpPostBodyUtil.TransferEncodingMechanism;
|
import io.netty.handler.codec.http.multipart.HttpPostBodyUtil.TransferEncodingMechanism;
|
||||||
import io.netty.util.internal.StringUtil;
|
import io.netty.util.internal.StringUtil;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.net.URLDecoder;
|
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -753,13 +752,8 @@ public class HttpPostRequestDecoder {
|
|||||||
* @return the decoded component
|
* @return the decoded component
|
||||||
*/
|
*/
|
||||||
private static String decodeAttribute(String s, Charset charset) throws ErrorDataDecoderException {
|
private static String decodeAttribute(String s, Charset charset) throws ErrorDataDecoderException {
|
||||||
if (s == null) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
return URLDecoder.decode(s, charset.name());
|
return QueryStringDecoder.decodeComponent(s, charset);
|
||||||
} catch (UnsupportedEncodingException e) {
|
|
||||||
throw new ErrorDataDecoderException(charset.toString(), e);
|
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
throw new ErrorDataDecoderException("Bad string: '" + s + '\'', e);
|
throw new ErrorDataDecoderException("Bad string: '" + s + '\'', e);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user