바이너리 파일
텍스트 파일
텍스트 기반 프로토콜에 바이너리 데이터를 전송하기 위해 고안.
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, +, /