How does HTTP file upload work?

后端 未结 5 1498
不思量自难忘°
不思量自难忘° 2020-11-22 00:49

When I submit a simple form like this with a file attached:

5条回答
  •  不知归路
    2020-11-22 01:17

    I have this sample Java Code:

    import java.io.*;
    import java.net.*;
    import java.nio.charset.StandardCharsets;
    
    public class TestClass {
        public static void main(String[] args) throws IOException {
            ServerSocket socket = new ServerSocket(8081);
            Socket accept = socket.accept();
            InputStream inputStream = accept.getInputStream();
    
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
            char readChar;
            while ((readChar = (char) inputStreamReader.read()) != -1) {
                System.out.print(readChar);
            }
    
            inputStream.close();
            accept.close();
            System.exit(1);
        }
    }
    

    and I have this test.html file:

    
    
    
        
        File Upload!
    
    
    
        
        
    
    
    
    

    and finally the file I will be using for testing purposes, named a.dat has the following content:

    0x39 0x69 0x65
    

    if you interpret the bytes above as ASCII or UTF-8 characters, they will actually will be representing:

    9ie
    

    So let 's run our Java Code, open up test.html in our favorite browser, upload a.dat and submit the form and see what our server receives:

    POST / HTTP/1.1
    Host: localhost:8081
    Connection: keep-alive
    Content-Length: 196
    Cache-Control: max-age=0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Origin: null
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundary06f6g54NVbSieT6y
    DNT: 1
    Accept-Encoding: gzip, deflate
    Accept-Language: en,en-US;q=0.8,tr;q=0.6
    Cookie: JSESSIONID=27D0A0637A0449CF65B3CB20F40048AF
    
    ------WebKitFormBoundary06f6g54NVbSieT6y
    Content-Disposition: form-data; name="file"; filename="a.dat"
    Content-Type: application/octet-stream
    
    9ie
    ------WebKitFormBoundary06f6g54NVbSieT6y--
    

    Well I am not surprised to see the characters 9ie because we told Java to print them treating them as UTF-8 characters. You may as well choose to read them as raw bytes..

    Cookie: JSESSIONID=27D0A0637A0449CF65B3CB20F40048AF 
    

    is actually the last HTTP Header here. After that comes the HTTP Body, where meta and contents of the file we uploaded actually can be seen.

提交回复
热议问题