POST 방식에서의 HTTP Header와 Body
POST /user/create HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Accept: */*
(공백)
userId=tester1&password=test1&name=테스터
- POST로 데이터를 전달할 경우 전달하는 데이터는 HTTP 본문에 담긴다.
- HTTP 본문은 HTTP 헤더 이후 빈 공백을 가지는 한 줄(line) 다음부터 시작한다.
- HTTP 본문에 전달되는 데이터는 GET 방식으로 데이터를 전달할 때의 키=value 형식과 같다.
- 요청 헤더에 본문 데이터에 대한 길이가 Content-Length라는 필드 이름으로 전달된다.
전체 코드
public void run() {
log.debug("New Client Connect! Connected IP : {}, Port : {}", connection.getInetAddress(),
connection.getPort());
try (InputStream in = connection.getInputStream(); OutputStream out = connection.getOutputStream()) {
BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
String line = br.readLine();
log.debug("Request Line : {}", line);
String[] tokens = line.split(" ");
int contentLength = 0;
while( (line = br.readLine()) != null ) {
log.debug("Request Header : {}", line);
if( line.contains("Content-Length")) {
contentLength = Integer.parseInt( line.split(": ")[1] );
}
if( line.equals("")) {
break;
}
}
String requestURI = tokens[1];
if( requestURI.contains("/user/create")) {
String requestBody = IOUtils.readData(br, contentLength);
Map<String, String> parameterMap = HttpRequestUtils.parseQueryString(requestBody);
User user = new User(
parameterMap.get("userId"),
parameterMap.get("password"),
parameterMap.get("name"),
parameterMap.get("email") );
log.debug("User Model : {}", user.toString());
requestURI = "/index.html";
DataOutputStream dos = new DataOutputStream(out);
byte[] body = Files.readAllBytes(Paths.get("./webapp" + requestURI));
response302Header(dos, requestURI);
responseBody(dos, body);
} else {
DataOutputStream dos = new DataOutputStream(out);
byte[] body = Files.readAllBytes(Paths.get("./webapp" + requestURI));
response200Header(dos, body.length);
responseBody(dos, body);
}
} catch (IOException e) {
log.error(e.getMessage());
}
}
'Java' 카테고리의 다른 글
[Java] HTTP 웹 서버 구현 / 로그인 구현 (0) | 2023.03.17 |
---|---|
[Java] HTTP 웹 서버 구현 / 302 status code 적용 (0) | 2023.03.17 |
[Java] HTTP 웹 서버 구현 / GET 방식으로 회원가입 (0) | 2023.03.17 |
[Java] HTTP 웹 서버 구현 / index.html 요청에 대한 응답 (0) | 2023.03.17 |
[Java] 디버깅을 위한 로깅(logging) (0) | 2023.03.10 |
댓글