TIL - http 통신

Heechul Yoon·2020년 2월 14일
0

LOG

목록 보기
6/62

http란?

HTTP(Http Hypertext Transfer Protocol)란 hyper text를 전송하기 위한 규칙이다.
즉, 하이퍼텍스트를 서버와 서버끼리 데이터를 정해진 규격으로 전송하고 전송받기 위한 규칙이다.

http안에서 무엇을 전송하는가?

기본적으로는 데이터를 서버와 서버간에 비트(텍스트, 문자열)형태로 주고받는다.

즉, 문자열을 어떤규칙으로 보내느냐에 따라 상대 서버가 읽을 수 있는지 여부가 갈린다.
http는 그 규칙중 하나이고 http이외에 tcp, ftp등의 protocol도 존재한다. 전송의 근간은 비트형태이지만 전송되는 규칙(http, tcp, ftp ....)에 따라 읽는 방법이 다르다.

데이터 전송을 위해 필요한것들.

  • 상대방의 주소
  • 본문(body)
  • 데이터의 종류
  • 프로토콜의 버전정보
  • meta data
  • ...

가 있을 것이다.

http의 특징

  • 상대서버에 요청을 보내면 받는서버는 응답을 보낸다. 이는 http통신의 완성이며, 응답이없으면 애러로 간주한다.

  • stateless : 많은 통신들이 서로의 통신들에 관여하지 않는다.. 각 통신은 독립적이다. 즉, 기존의 요청응답통신정보 저장하지 않음.
    stateless이기 때문에 발생하는 문제는 로그인했는데 그다음페이지 넘어가면 다시로그인해야함.
    해당요청 처리위한 정보를 해당요청에 첨부해서 보내야함.
    _ ex. 만약 유저가 로그인을 했다면, 다음 요청때 이 유저는 로그인한 유저라는 정보를 요청에 첨부해서 보내야한다.

http request

startline 시작줄

  • http request method : get post put delete options
  • target : url경로의 끝값 앤드포인트 ex. /login
  • http version

PUT /account/profile/90cb9e8c-9e44-4ab6-bc2c-0414836bc9e5 HTTP/1.1

headers(주로 meta data)

Accept-Encoding: gzip, deflate
Authorization: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoyMX0.x-THeVtLQ1Nzn25nptvqmx2jI60LWAfjQoHA1Gd7bh8 #토큰정보를 헤더에 넣어 보내면 인증된 요청으로 간주하고 인증되어야만 접근가능한 영역에 요청을 보낼 수 있다.
Connection: keep-alive #통신이 끝나고 connection을 유지할지 말지 명시한다.
Content-Length: 38
Content-Type: application/json
Host: 10.58.0.227:8000 #host서버의 url로 www.google.com과 같은 메인호스트 페이지 url이다. startline에의 target(endpoint)와 결합되어 경로를 나타낸다.
User-Agent: HTTPie/0.9.8 #맥이나 윈도우에 따라 정보가 다르기 때문에 이정보와 ip정보를 빅데이터를 통해 정보파아기 가능해 여러기업들이 광고노출로 사용하기도 한다.
    

body

  • 본문, 실제데이터
  • 일반적으로 get요청은 데이터를 가져오는 요청이기 때문에 body가 없다.


http response

status line

  • http version
  • status 코드. 응답상태를 숫자로 표현한다. ex. 200 300 400 500
  • status text : 상태를 간략하게 표현해주는 텍스트 ex. not found
HTTP/1.1 404 Not Found

먄약 startline에서 '404 not found' 가 발생했다면?

  • host페이지로 들어왔지만 target으로 가는 경로상에서 target을 찾지못한 경우. 이러한 이유 때문에 url을 host와 target으로 구분한다.

 

headers

  • 메타데이터를 가지고 있음
  • request가 user-agent를 표시하는 대신 server명을 표시한다. django의 경우 django 버전이 들어간다.
HTTP/1.1 404 Not Found
Content-Length: 71
Content-Type: application/json
Date: Fri, 14 Feb 2020 10:12:19 GMT
Server: WSGIServer/0.2 CPython/3.8.1
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
 
 

body

  • 실제 대이터가 들어간다.
{
    "message": "코드를 확인해 주세요"
}

 
 http method와 status 는 개발자가 결정하는 것으로 이부분을 잘 이해해야 협업이 가능하다
 

 

http method

이요청이 의도한바.

  • get : 서버에 정보달라고 요청하는것. ex. 검색어를 했을 때 나오는 정보는 get요청으로 request가 간다.
  • post : 정보를 보내는것이다. 실재로 데이터베이스 영향을 준다. put도 사용했지만 요즘은 대부분을 post로 처리한다.
  • delete : 데이터를 지우는 요청이다
  • options : 해당 주소가 어떤 http 매서드를 취급하는지 알려줌.
    ex.get이랑 post 요청만 처리하는 엔드포인트가 put요청들어오면 처리못한다. 내가 만든 end-point면 상관없겠지만, 남이 짠 앤드포인트에 option method를 보내서 해당주소가혀용하는 http매서드 리턴해준다..
Allow: GET, POST, PUT, DELETE, HEAD, OPTIONS
옵션스요청에 대한응답 allow안에 온다. 
  • put 데이터베이스에 원래있던 데이터를 업데이트하는 요청이다. 요즘은 post로 대체해서 쓴다.

    어떨 때 어떤 method를 request에 담을것인지는 javascript fetch에서 정해준다.

status code

  • 200 : 아무문제 없이 잘 처리했다.

  • 301 : 받은 요청이 예전에는 처리되었지만 지금은 바뀌었다.

  • 400 bad request : 받은 request가 잘못되어서 처리할 수 없다.
    그렇다면 어떤요청이 잘못된 요청인가? 숫자로보내야하는데 문자로 보낸경우등이 있다..

  • 401 unauthorized : 주로 로그인시에 비번잘못입력 한 경우 401 보내줘야한다. 400으로 보내면 다른 뜻으로 해석될 위험이 있다

  • 403 forbidden 로그인은 됬는데 권한이 없는경우이다. 로그인했는데 admin페이지 접근하거나, 로근했지만 결제한 서비스 들어가는 경우를 들 수 있다.

  • 404 not found 타겟주소 앤드포인트주소 잘못되었을 때 나타난다.

    개발자는 잘못보낸 request에 대한 애러 처리를 잘 해줄 필요가 있다. 이 처리를 해주지 못할 경우 500 server error가 발생하고 디버깅하기가 힘든 상황이 된다

https와 http

https는 http통신이 보안적으로 암호화 된 것을 말한다. 그리고 각각의 서버에서 복호화가 가능한 키를 가지고있다.
http로만 된 사이트는 아무런 보안장치 없는 텍스트파일의 통신이기 때문에 통신과정에서 해킹당할 염려가 있다. 이 정보가 로그인 또는 결제정보라면 심각한 결과를 가져온다.

https의 경우 http메세지 구조를 가지지만 그 정보가 모두 암호화되어있어 해킹을해서 그 데이터를 가져가도 정보를 읽을 수가 없다.

그렇다고 모든 페이지에서 https를 사용하는 것은 아니다. 복호화가 가능한 키를 관리하기 위해서는 server charge를 부담해야 하기 때문이다.

네이버의 경우 기본적으로 https이지만 http로도 들어갈 수 있다. 노출되어도 상관없는 페이지는 http로 해놓는경우도 많다.

검색의 경우 https로 되어있는데 이는 네트워크망을 제공하는 통신사 입장에서 웹페이지가 http로 되어있으면 검색데이터를 얻어 이를 이용할 수 있기 때문이다.

profile
Quit talking, Begin doing

0개의 댓글