HTTP란?

권기현·2020년 4월 9일
0

http란 무엇인가?

서로 통신을 하자고 규정해놓은 "통신규약"

  • 규약이 왜 필요한가?
    프론트앤드 서버와 클라이언트간의 통신에 사용된다.
    또한 백앤드와 프론트앤드 서버간에의 통신에도 사용된다.

  • 규약에 어떤 요소(정보)로 구성되어야 할까?

  • 요청과 응답 으로 이루어진 stateless이다.
    그래서 지금의 통신 전에는 어떤 통신이 있었는지 알지 못한다.

  • 그럼 stateless이기 때문에 생기는 문제점은?

로그인해야할때, 사용자가 로그인 했다는 사실을 알지 못한다.

=> 그래서 만일 여러 요청과응답 의 진행과정이나 데이터가 필요할때는 쿠키나 세션 등등을 사용하게 된다.

이를 다음 요청(로그인)할 때 응답에 필요한 정보요청에 첨부해서 보내야한다.


HTTP Request 구조

HTTP request 메세지는 크게 3부분으로 구성된다:
-start line
-headers
-body

Start Line

말 그대로 HTTP request의 첫 라인(이름이 너무 식상하지만, 뭐 이미 이렇게 지어졌다).
HTTP request의 start line또한 3부분으로 구성되어 있음.

  • HTTP Method
    : 해당 request가 의도한 action을 정의하는 부분.
    HTTP Methods에는 GET, POST, PUT, DELETE, OPTIONS 등등이 있다.
    주로 GET 과 POST과 쓰임.

  • Request target
    해당 request가 전송되는 목표 uri.
    예를 들어 /login.

  • HTTP Version
    말 그대로 사용되는 HTTP 버젼. 버젼에는 1.0, 1.1, 2.0 등이 있다.
    => GET /search HTTP/1.1


Headers

해당 request에 대한 추가 정보(addtional information)를 담고 있는 부분.
해당 요청에 대한 meta정보.

예를 들어, request 메세지 body의 총 길이 (Content-Length) 등.
Key:Value 값 으로 되어있다 (: 이 사용됨).

key:value
EX)
HOST: google.com => Key = HOST, Value = google.com

위의 두개를 조합하면 요청하는 주소가 나온다.

(Headers도 크게 3부분으로 나뉘지만(general headers, request headers, entity headers) 너무 자세한 부분임으로, 3부분 으로 구성되어 있다는것만 알고 있어도 괜찮다.)

자주 사용되는 header 정보에는 다음이 있다:

  • Host
    요청이 전송되는 target의 host url: 예를 들어, google.com
  • User-Agent
    요청을 보내는 클라이언트의 대한 정보: 예를 들어, 웹브라우저에 대한 정보. => 요청을 보내는 주체에 대한 정보
  • Accept
    해당 요청이 받을 수 있는 응답(response) 타입.
  • Connection
    해당 요청이 끝난후에 클라이언트와 서버가 계속해서 네트워크 컨넥션을 유지 할것인지 아니면 끊을것인지에 대해 지시하는 부분.
  • Content-Type
    해당 요청이 보내는 메세지 body의 타입. 예를 들어, JSON을 보내면 application/json.
  • Content-Length:
    메세지 body의 길이.

EX)
Accept: /
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/json
Content-Length: 257
Host: google.com
User-Agent: HTTPie/0.9.3


Body

  • 해당 reqeust의 실제 메세지/내용.
  • Body가 없는 request도 많다.
    예를 들어, GET request들은 대부분 body가 없는 경우가 많음.

POST /payment-sync HTTP/1.1

Accept: application/json
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 83
Content-Type: application/json
Host: intropython.com
User-Agent: HTTPie/0.9.3

{
"imp_uid": "imp_1234567890",
"merchant_uid": "order_id_8237352",
"status": "paid"
}

텍스트가 날라가는데 요청하는 정보를 담고있다.


HTTP Response 구조

Response도 request와 마찬가지로 크게 3부분으로 구성되어 있다.

  • Status line
  • Headers
  • Body

Status Line

Response의 상태를 간략하게 나타내주는 부분.
3부분으로 구성되어 있다.

  • HTTP 버젼
  • Status code: 응답 상태를 나타내는 코드. 숫자로 되어 있는 코드.
    예를 들어, 200
  • Status text: 응답 상태를 간략하게 설명해주는 부분.
    예를 들어, "Not Found"
    HTTP/1.1 404 Not Found

=>Status code,Status text 는 결론적으로는 같은 의미이다.

Headers

Response의 headers와 동일하다.(요청 혹은 응답에 대한 부가정보)
다만 response에서만 사용되는 header 값들이 있다.
예를 들어, User-Agent 대신에 Server 헤더가 사용된다.

Body

Response의 body와 일반적으로 동일하다.(실제 데이터)
Request와 마찬가지로 모든 response가 body가 있지는 않다. 데이터를 전송할 필요가 없을경우 body가 비어있게 된다.


자주 쓰이는 HTTP Methods

GET

  • 이름 그대로 어떠한 데이타를 서버로 부터 받아(GET)올때 주로 사용하는 Method.
  • 데이터 생성/수정/삭제 없이 받아오기만 할때 사용된다.
  • 가장 간단하고 많이 사용되는 HTTP Method
  • 언급한대로 주로 데이터를 받아올때 사용되기 때문에 request에 body를 안 보내는 경우가 많다.

POST

  • 데이터를 생성/수정/삭제 할때 주로 사용되는 Method.
  • 데이터를 생성 및 수정 할때 많이 사용하기 때문에 대부분의 경우 requst body가 포함되서 보내진다.

알고 있으면 좋은 HTTP Methods

OPTIONS

  • 주로 요청 URI에서 사용할 수 있는 Method를 받아올때 사용된다.
  • 예를 들어, /update uri에서 어떤 method를 요청 가능한가(GET? POST?)를 알고 싶으면 먼저 OPTIONS 요청을 사용해서 확인하게 된다.

PUT

  • POST와 비슷하다. 데이터를 생성 할때 사용되는 Method.
  • POST와 겹치기 때문에 PUT을 사용하는 곳도 있고 POST로 통일해서 사용하는 곳도 있는데, 최근 몇년 사이에 POST에 밀려서 잘 사용안되는 추세.

DELETE

  • 특정 데이터를 서버에서 삭제 요청을 보낼때 쓰이는 Method
  • PUT과 마찬가지로 POST에 밀려서 잘 사용안되는 추세.

자주 쓰이는 HTTP Status Code

200 OK

가장 자주 보게되는 status code.
문제없이 다 잘 실행 되었을때 보내는 코드.

301 Moved Permanently

해당 URI가 다른 주소로 바뀌었을때 보내는 코드.
HTTP/1.1 301 Moved Permanently
Location: http://www.example.org/index.asp

400 Bad Request

해당 요청이 잘못된 요청일대 보내는 코드.
주로 요청에 포함된 input 값들이 잘못된 값들이 보내졌을때 사용되는 코드.
예를 들어, 전화번호를 보내야 되는데 text가 보내졌을때 등등.

401 Unauthorized

유저가 해당 요청을 진행 할려면 먼저 로그인을 하거나 회원 가입을 하거나 등등이 필요하다는것을 나타내려 할때 쓰이는 코드.

403 Forbidden

유저가 해당 요청에 대한 권한이 없다는 뜻.
예를 들어, 오직 과금을 한 유저만 볼 수 있는 데이터를 요청 했을때 등.

404 Not Found

요청된 uri가 존재 하지 않는다는 뜻.

http -v google.com/no-such-uri

GET /no-such-uri HTTP/1.1
Accept: /
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: google.com
User-Agent: HTTPie/0.9.3

HTTP/1.1 404 Not Found
Content-Length: 1572
Content-Type: text/html; charset=UTF-8
Date: Mon, 20 Aug 2018 08:46:48 GMT
Referrer-Policy: no-referrer

500 Internal Server Error

서버에서 에러가 났을때 사용되는 코드.
API 개발을 하는 백앤드 개발자들이 싫어하는 코드.

profile
함께 일하고 싶은 개발자를 목표로 매일을 노력하고, 옷을 좋아하는 권기현 입니다.

0개의 댓글