티스토리 뷰


GET방식과 POST방식?

 


GET방식이란 URL에 key&value 쌍의 형태로 서버에 정보를 전송한다. 그렇기 때문에 HTTP request 헤더에 Content-type이라는 헤더 필드는 필요하지 않다. 바디부분이 비어있다. 


POST방식이란 사용자의 입력을 HTTP request 바디 부분에 넣어서 전송한다. 그렇기 때문에 HTTP 요청 헤더에 Content-type 필드를 명시해야 한다. 


Content-type 필드는 다음과 같이 3가지의 MIME타입으로 구성되어 있다. MIME타입이란 초기 이메일 시스템에서 첨부파일의 타입을 명시할때 사용하던 타입이다. 바이너리 데이터를 아스키 코드로 변환할때 어떤 바이너리 데이터를 변환 했는지를 명시해야 수신측에서 다시 아스키코드->바이너리 데이터로 정확히 복호화 할 수 있다. 이 방법이 그대로 HTTP에서도 사용 된다. 자세한것은 이 포스트를 읽고 오길 바란다. 

  • application/x-www-form-urlencoded
  • text/plain
  • multipart/form-data

  • 첫번째 컨텐츠 타입의 HTTP 바디 부분에는 GET방식과 마찬가지로 key&value 형태로 사용자의 입력이 들어가있다.

    두번째 컨텐츠 타입의 HTTP 바디 부분에는 단순히 텍스트가 적혀있다.

    세번째 컨텐츠 타입의 HTTP 바디 부분에는 동영상이나 사진의 바이너리 데이터가 들어가 있다.



    GET방식의 장단점

     


    GET방식은 사용자가 입력한 값이 url에 그대로 노출되므로 보안에 좋지않다.

    하지만, 그 url을 다른 사람들과 공유할수 있으므로, 그 url을 그대로 입력해서 내가 보는 페이지는 남들도 똑같이 볼 수 있다.


    또한 바이너리 데이터를 전송할수 없다.

    GET방식은 요청에 대한 정보를 구분할때 속성=속성값&속성=속성값 이런식으로 KEY VALUE 쌍을 &연산자로 구분을 하게 되는데 바이너리 데이터는 &를 데이터로 취급할수 있기 때문에, GET방식으로는 바이너리 데이터를 전송할수 없게 된다.

    -> 서로 다른 데이터간 구분이 불가능함.


    따라서 바이너리 데이터는 무조건 POST방식으로 전송해야 한다.


    GET방식을 사용하는 이유중 가장 큰 이유가 바로 다른 사람과의 URL공유 역할이다.


    POST방식의 장단점



    POST방식은 사용자가 입력한 입력값이 HTTL요청 BODY부분에 들어가기 때문에 사용자가 무엇을 입력했는지 다른사람들이 몰래 볼수가 없기 떄문에 보안에 좋다.


    또한, 바이너리 데이터를 전송할수 있는데, 그 이유는 브라우저가 서로 다른 데이터간 구분을 알아서 해주기 때문이다.

    GET방식의 경우 무조건 &를 통해서 서로 다른 데이터를 구분하는데, 바이너리 데이터는 &를 데이터로 취급하기 때문에 

    &가 아닌 형태로 데이터를 구분해야 한다.


    브라우저는 사용자가 POST방식의 Multipart type 컨텐츠(사진,동영상)를 요청을 했을때, HTTP 바디 부분에는 데이터간 구분자를 임의로 만들게 되는데 예를 들면 다음과 같다.

     

    name은 key, filename은 첨부 파일 이름(value)이다. post방식은 보내는 데이터의 양 제한이 없다.
    멀티 파트에서 각 파트는 서로 다른 마임 타입을 갖는다. 즉, 서로 다른 타입으로 인코딩 된다는것이다.

    GET vs POST?

     

    GET 방식

    1. 속도가 빠르다.

    2. URL 공유가 가능하다.

    3. 입력값이 그대로 노출된다.

    4. 데이터 전송 크기에 제한이 있다.

    5. 바이너리 데이터 전송이 불가능하다.

    POST 방식

    1. 속도가 느리다. -> 바디 부분에 데이터를 담아야 하므로

    2. 입력값이 노출되지 않는다.

    3. 바이너리 데이터 전송이 가능하다.


    GET방식과 POST방식은 장/단점을 모두 갖고 있기 떄문에 상호 보완적이다. 그렇기 때문에 지금 한가지만 사용되지 않고 두가지 방식이 모두 사용되고 있는 것이다. 상황에 따라 적절한 방식을 사용해야 한다.


    예를들어, 게시판을 이동할때는 속도가 중요하며 입력값이 노출되어도 상관없다. 그렇기 때문에 GET방식을 사용하고, 

    회원가입할때 사용자의 입력값들은 노출되면 안되기 때문에 POST방식을 사용해야 한다.


    POST방식은 안전하다?

     


    그렇지 않다. GET방식이든 POST방식이든 전달되는 데이터를 볼 수 있다. 다만, GET방식은 별 노력 없이도 URL에 인풋이 그대로 노출 되기 때문에 더 잘 노출된다는 차이일뿐이다.





    '컴퓨터 공학과 졸업 > 기본 개념' 카테고리의 다른 글

    DBCP  (0) 2018.02.14
    JNDI  (0) 2018.02.14
    POJO,DTO,DAO,VO  (2) 2018.01.23
    자바 빈즈란?  (0) 2018.01.21
    서블릿,서블릿컨테이너,톰캣,인터셉터,필터  (0) 2017.08.11
    댓글
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/04   »
    1 2 3 4 5 6
    7 8 9 10 11 12 13
    14 15 16 17 18 19 20
    21 22 23 24 25 26 27
    28 29 30
    글 보관함