본문 바로가기

TIL

[2022-1-20]HttpServletResponse 과 HTTP공부

HttpServletResponse 과 HTTP

get방식은 보통 URL에 쿼리 파라미터형식으로 데이터를 전송하기 때문에 메세지 바디가 없다. 그러므로 content-type, content-length 또한 없다. 메세지 바디를 사용해서 데이터를 전달할 수도 있지만, 권장하지 않는다.

 

post방식은 get방식의 쿼리 파라미터 형식 그대로 http 메세지 body에 담아 보낸다. 이 body에 보내는 데이터의 형식에 따라 content-type을 꼭 지정해야한다. 예를 들어 폼으로 데이터를 보내는 경우 "application/x-www-form-urlencoded", json의 경우 "application/json"와 같다.

 

HttpServletResponse 객체는 궁극적으로 HTTP response 메세지를 만드는 역할을 한다.

 

쿠키는 설정된 url의 HTTP 요청마다 자동으로 requestHeader에 담아 보내진다.

 

http request 메세지에서 body 가있을 때는 꼭 content-type을 지정해줘야만 한다.

 

InputStream

https://lannstark.tistory.com/34

 

Java InputStream이란?

InputStream OutputStream을 실무에서 사용할 때면, 뭔가 알긴 알고 실제로 둘을 활용해 기능을 구현하는데는 전혀 문제가 없지만, 사용할때마다 찾아보게되고 뭔가 정확히 아는 것 같지는 않다라는 느

lannstark.tistory.com

 

 

HTTP/1.1 , 2, 3

유튜브 http/3 프로토콜 사용

HTTP/1.1을 기준으로 공부하지만 현업에서 h2, h3또한 많이 사용된다고 한다.(google, instagram, youtube등은 모두 http/3 사용, 네이버는 http/2 사용)

 

HTTP 의 무상태(stateless)의 이점 -> 응답서버가 바뀌어도 필요한 데이터 또는 동작을 요구할 때 필요한 모든 요구사항을 전송하기 때문에 동일하게 동작시킬 수 있다 때문에 서버를 무한히 증설할 수 있다.

 

로그인같은 정보는 계속 유지해주어야 하기 때문에 쿠키와 서버 세션등을이용해 상태유지해야 함, but 상태유지는 최소한으로 하는게 좋다.

 

초기의 HTTP에서는 안정성이 가장 중요했기 때문에 하나의 파일을 서버에서 가져올 때마다 3 Way-Handshake를 반복해야했다.  점점 웹의 규모가 방대해 졌기 때문에 이방식에선 너무 긴 지연이 발생했고, 이를 해결하기 위해서 아래의 두가지 개념이 등장했다.

 

PersistentConnection과 Pipelining

https://jins-dev.tistory.com/entry/HTTP11-%EC%9D%98-HTTP-Pipelining-%EA%B3%BC-Persistent-Connection-%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC

 

HTTP/1.1 의 HTTP Pipelining 과 Persistent Connection 에 대하여

HTTP/1.0 은 가장 기초적인 형태의 웹 프로토콜을 제시하였고, 이는 일전 포스팅에도 정리되어 있듯이 TCP 프로토콜 위에 HTTP Spec 을 이용한 HTTP 프로토콜을 충실히 따른다. 이 방식은 웹이라는 새로

jins-dev.tistory.com

http는 start-line , header, 공백 라인, message body로 이루어진다

 

http 메세지에서 start-line을 요청 메세지에서는 request-line, 응답 메세지에서는 status-line 이라고 부른다.

 

 

프로그래머스 코딩테스트 연습문제 - 서울에서 김서방 찾기

class Solution {
    public String solution(String[] seoul) {
        int i = 0;
        for (String name : seoul) {
            if (name.equals("Kim")) break;
            i++;
        }
        return String.format("김서방은 %d에 있다",i);
    }
}

String.format() 메소드를 처음 써봤다. C언어처럼 하는 방식이 익숙하기도 하고, 불필요한 문자열 덧셈을 피할 수 있는 방법이라 앞으로도 많이 쓸 것 같다.