바이너리 파일
텍스트 파일
텍스트 기반 프로토콜에 바이너리 데이터를 전송하기 위해 고안.
HTTP의 Content-Type헤더에 사용.
데이터의 타입을 명시.
text : text/html ...
image : image/bmp ...
audio : audio/mpeg ...
video : video/webm ...
application : application/xml ...
(Postman으로 확인)
POST /ch2/getYoil HTTP/1.1
Host: localhost
Cache-Control: no-cache
//----경계(boundary)로 텍스트와 바이너리 데이터를 구분
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="year"
2021
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="imgFile"; filename="dice1.jpg"
Content-Type: image/jpeg
----WebKitFormBoundaryE19zNvXGzXaLvS5C
RequestHeader의 내용 전체를 보여주는 코드
package com.fastcampus.ch2;
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class RequestHeader {
	@RequestMapping("/requestHeader")
	public void main(HttpServletRequest request) {
		
		//헤더의 name을 Enumeration e로 참조
		Enumeration<String> e = request.getHeaderNames();
		//반복문으로 헤더의 name을 하나씩 꺼내서 String name에 저장
		//"헤더 이름 : 헤더 내용"을 출력
		while (e.hasMoreElements()) {
			String name = e.nextElement();
			System.out.println(name + ":" + request.getHeader(name));
		}
	}
}
GET/POST 요청 메세지 전체를 출력
package com.fastcampus.ch2;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class RequestMessage {
	@RequestMapping("/requestMessage")
	public void main(HttpServletRequest request) throws Exception {
		
		// 1. request line
		String requestLine = request.getMethod();       // GET 또는 POST
		requestLine += " " + request.getRequestURI();   // /ch2/requestMessage
		
		String queryString = request.getQueryString();  // year=2021&month=10&day=1
		requestLine += queryString == null ? "" : "?"+queryString;  
		requestLine += " " + request.getProtocol();     // HTTP/1.1
		System.out.println(requestLine);		
		
		// 2. request headers
		Enumeration<String> e = request.getHeaderNames();
		while (e.hasMoreElements()) {
			String name = e.nextElement();
			System.out.println(name + ":" + request.getHeader(name));
		}
		
		// 3. request body - POST일 때만 해당, GET은 body가 없음(CONTENT_LENGTH=0)
		final int CONTENT_LENGTH = request.getContentLength();
//		System.out.println("content length="+CONTENT_LENGTH);
		
		if(CONTENT_LENGTH > 0) {
			byte[] content = new byte[CONTENT_LENGTH];
			InputStream in = request.getInputStream();
			in.read(content, 0, CONTENT_LENGTH);
			
			System.out.println(); // empty line
			System.out.println(new String(content, "utf-8")); // year=2021&month=10&day=1
		}  // if
	} // main
}
2진법 base2 : 0, 1
10진법 base10 : 0 ~ 9
16진법 base16 : 0 ~ 9, ABCDEF
64진법 base64 : A ~ Z, a ~ z, 0 ~ 9, +, /