Ik ben een klein webservertje aan't schrijven en heb te maken met vervelende verdwaalde NULL-bytes.
Zodra ik een POST-request stuur met een lengte rond de 1000 bytes, verschijnen er zomaar NULL-bytes na ongeveer 950 bytes.
De code die ik gebruik is deze testcode:
Als ik met firefox de volgende POST-request verstuur:
Bron: firebug NET-tab
Dan krijg ik de volgende output te zien van mijn java-app:
Nou is mijn vraag: Wat is hier aan de hand? Waarom wordt de request zomaar afgesneden? Waarom verschijnen er NULL-bytes zonder een EOFException?
btw, de documentatie van com.sun.net.httpserver.* is hier te vinden:
http://java.sun.com/javas...rver/package-summary.html
Zodra ik een POST-request stuur met een lengte rond de 1000 bytes, verschijnen er zomaar NULL-bytes na ongeveer 950 bytes.
De code die ik gebruik is deze testcode:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| import java.io.IOException; import com.sun.net.httpserver.*; import java.net.*; public class Main { public static void main(String[] args) { try { HttpServer server = HttpServer.create(new InetSocketAddress(8080), 120); server.createContext("/", new HttpHandler() { public void handle(HttpExchange he) throws IOException { String contentType = he.getRequestHeaders().getFirst("Content-Type"); if(contentType.startsWith("application/x-www-form-urlencoded")) { String lengthString = he.getRequestHeaders().getFirst("Content-Length"); if(lengthString != null) { int contentLength = Integer.parseInt(lengthString); if(contentLength>0) { byte[] bytes = new byte[contentLength]; he.getRequestBody().read(bytes); //Hier worden de bytes gelezen StringBuilder hexdump = new StringBuilder(); for(int rp=0;rp<bytes.length;rp++) { if(rp%32==0) { hexdump.append('\n'); } else if(rp%4==0) { hexdump.append(' '); } String hex = Integer.toHexString(bytes[rp]); if(hex.length()==1) { hexdump.append('0'); } hexdump.append(hex); } System.out.println(hexdump); String string = new String(bytes, "UTF-8"); System.out.println(string.length()+", "+bytes.length+", "+contentLength); System.out.println(string); he.close(); } } } } }); server.start(); } catch(Exception e){ e.printStackTrace(); } } } |
Als ik met firefox de volgende POST-request verstuur:
code:
1
| Content-Type: application/x-www-form-urlencoded Content-Length: 1102 msg=123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789+END |
Bron: firebug NET-tab
Dan krijg ik de volgende output te zien van mijn java-app:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| 6d73673d 31323334 35363738 392b3132 33343536 3738392b 31323334 35363738 392b3132 33343536 3738392b 31323334 35363738 39253044 25304131 32333435 36373839 2b313233 34353637 38392b31 32333435 36373839 2b313233 34353637 38392b31 32333435 36373839 25304425 30413132 33343536 3738392b 31323334 35363738 392b3132 33343536 3738392b 31323334 35363738 392b3132 33343536 37383925 30442530 41313233 34353637 38392b31 32333435 36373839 2b313233 34353637 38392b31 32333435 36373839 2b313233 34353637 38392530 44253041 31323334 35363738 392b3132 33343536 3738392b 31323334 35363738 392b3132 33343536 3738392b 31323334 35363738 39253044 25304131 32333435 36373839 2b313233 34353637 38392b31 32333435 36373839 2b313233 34353637 38392b31 32333435 36373839 25304425 30413132 33343536 3738392b 31323334 35363738 392b3132 33343536 3738392b 31323334 35363738 392b3132 33343536 37383925 30442530 41313233 34353637 38392b31 32333435 36373839 2b313233 34353637 38392b31 32333435 36373839 2b313233 34353637 38392530 44253041 31323334 35363738 392b3132 33343536 3738392b 31323334 35363738 392b3132 33343536 3738392b 31323334 35363738 39253044 25304131 32333435 36373839 2b313233 34353637 38392b31 32333435 36373839 2b313233 34353637 38392b31 32333435 36373839 25304425 30413132 33343536 3738392b 31323334 35363738 392b3132 33343536 3738392b 31323334 35363738 392b3132 33343536 37383925 30442530 41313233 34353637 38392b31 32333435 36373839 2b313233 34353637 38392b31 32333435 36373839 2b313233 34353637 38392530 44253041 31323334 35363738 392b3132 33343536 3738392b 31323334 35363738 392b3132 33343536 3738392b 31323334 35363738 39253044 25304131 32333435 36373839 2b313233 34353637 38392b31 32333435 36373839 2b313233 34353637 38392b31 32333435 36373839 25304425 30413132 33343536 3738392b 31323334 35363738 392b3132 33343536 3738392b 31323334 35363738 392b3132 33343536 37383925 30442530 41313233 34353637 38392b31 32333435 36373839 2b313233 34353637 38392b31 32333435 36373839 2b313233 34353637 38392530 44253041 31323334 35363738 392b3132 33343536 3738392b 31323334 35363738 392b3132 33343536 3738392b 31323334 35363738 39253044 25304131 32333435 36373839 2b313233 34000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 0000 1102, 1102, 1102 msg=123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+123456789+123456789+123456789+123456789%0D%0A123456789+1234 |
Nou is mijn vraag: Wat is hier aan de hand? Waarom wordt de request zomaar afgesneden? Waarom verschijnen er NULL-bytes zonder een EOFException?
btw, de documentatie van com.sun.net.httpserver.* is hier te vinden:
http://java.sun.com/javas...rver/package-summary.html
Let op: Mijn post bevat meningen, aannames of onwaarheden