TIL 21 day HTTP

Winney·2020년 9월 21일
0
post-thumbnail

목적
1. HTTP 정의
2. HTTP 특징
3. Request, Response 구조
4. HTTP Request Methods 종류(자주 쓰는 3가지)
5. Response Status Codes

HTTP

HyperText Transfer Protocol. W3(World Wide Web) 상에서 HTML과 같은 정보(resource)를 주고 받을 수 있는 통신규약(protocol)이다. 이는 모든 데이터 교환의 기초이며 client-server protocol이기도 하다.
주로 HTML문서를 주고 받는데 쓴다. 주로 TCP(Transmission Control protocol, 전송조종규약)를 사용하고 HTTP/3부터는 UDP(User Datagram Protocol)을 사용하며, 80번 포트를 사용한다.

※ 용어

  • TCP : 인터넷 프로토콜 스위트(IP)의 핵심 프로토콜 중 하나로, IP와 함께 TCP/IP라는 명칭으로 널리 쓰인다. TCP는 근거리 통신망이나 인트라넷, 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다. TCP는 전송계층에 위치한다.
  • 인터넷 프로토콜 스위트(IP) : Internet Protocol Suite. 인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 통신규약(protocol)의 모음이다. 이 중 TCP와 IP가 가장 많이 쓰이기 때문에 TCP/IP protocol suite라고도 불린다.
  • 옥텟 : 컴퓨팅에서 8개의 비트가 한데 모인 것을 의미한다. 과거 초기 컴퓨터는 1byte가 꼭 8비트를 의미하는 것이 아니여서 옥텟이라는 용어가 필요했다. 하지만 요즘은 byte와 같은 의미가 되었다.
  • UDP : User Datagram Protocol. 사용자 데이터그램 프로토콜. 인터넷 프로토콜 스위트의 주요 프로토콜 가운데 하나이다.
  • TCP와 UDP 차이
    : TCP는 데이터를 주고 받을 양쪽 간에 연결을 설정하고 연결을 통해 양방향으로 데이터를 전송하지만 UDP는 연결을 설정하지 않고 수신자가 데이터를 받을 준비를 확인하는 단계를 거치지 않고 단방향으로 정보를 전송한다.
    • 신뢰성 : TCP는 메시지 수신을 확인. UDP는 수신자가 메시지를 수신했는지 알 수 없음
    • 순서 정렬 : TCP에서는 메시지가 보내진 순서를 보장하기 위해 재조립하지만 UDP는 메시지 도착 순서를 예측할 수 없다.
    • 부하 : TCP보다 속도가 일반적으로 빠르고 오버헤드가 적다.

1.HTTP 특징

1) request/response 요청/응답

클라이언트와 서버 사이의 소통은 요청과 응답을 특징으로 한다.
예를 들어 '웃는 리트리버 사진1'이 보고 싶다고 서버에 요청을 보내면 서버는 해당 이미지를 찾아 응답을 보낸다.
request는 'startline/ headers/ body'로 구성되어 있다.
response는 'stateline/ headers/ body'로 구성되어 있다.

2) stateless

state(상태)+less(없다)는 의미이다. 각각의 HTTP 통신은 독립적이기 때문에 이전의 HTTP 통신을 알지 못 한다. 즉, 좋아요를 누를려면 로그인을 해야지만 좋아요를 누를 수 있는데 이전에 로그인을 한 사실을 HTTP 통신에서는 알지 못한다. 때문에 이전에 로그인을 했다는 정보를 함께 담아서 요청을 보내야한다. 이를 위해 로그인 토큰 또는 브라우저의 쿠키, 세션 및 로컬 저장소같은 기술이 필요하다.

2. Request/Response

1) Request message 구조

  1. Start line : 요청의 첫줄 (HTTP method, Request target, HTTP Version)
  • HTTP method : 보통 클라이언트가 수행하고자 하는 동작을 정의하는 부분이다. GET, POST, DELETE가 주로 사용 되며 그 외에 OPTIONSHEAD 등도 있다.
  • Request target : 해당 request가 전송되는 목표 url을 의미한다. 예를 들어 프로토콜(http://), 도메인(www.mozilla.org), TCP 포트(80)인 요소를 제거한 리소스의 URL
  • HTTP Version : HTTP 버전을 의미. 주로 1.1 버전이 널리 쓰인다.

    예시 : GET /login HTTP/1.1
    HTTP method : GET
    Request target : /Login
    HTTP Version : HTTP/1.1

  1. Headers : 해당 정보의 추가 정보(meta data)를 담고 있는 부분이다.
    key: value 값으로 되어 있다.
    Headers : {
    HOST: 요청을 보내는 목표(target)의 주소. 즉, 요청을 보내는 웹사이트의 기본 주소가 된다. (www.apple.co.kr)
    User-Agent: 요청을 보내는 클라이언트에 대한 정보 (ex. chrome, firefox, ...)
    Content-Type: 해당 요청이 보내는 메세지 body 타입(ex. application/json)
    Content-Length: body 내용의 길이
    Authorization: 회원의 인증/인가를 처리하기 위해 로그인 토큰을 Authroization에 담는다. 
    }
  1. Body : 해당 요청의 실제 내용. 주로 Body를 사용하는 method는 POST이다. body가 없는 요청도 있다.
    Body: {
        "user_email": "didi@gmail.com"
        "user_password": "wecode"
    }

2) Response message 구조

  1. Status line : 응답의 첫번째 줄. 세 부분으로 구성되어 있다.
  • HTTP Version : request의 HTTP 버전과 동일
  • Status Code : 응답 메세지의 상태 코드 (ex. 404)
  • Status Text : 응답 메세지의 상태를 간략하게 설명해주는 텍스트 (ex. Not Found)
    HTTP/1.1 404 Not Found
     : HTTP 1.1 버전으로 응답. request에 대해서 정보를 찾을 수 없어 404 메세지를 보냄

    HTTP/1.1 200 SUCCESS
     : HTTP 1.1 버전으로 응답. request에 response 성공해 200 메세지와 성공 메세지 보냄
  1. Headers
    : 요청의 헤더와 동일. meta data 담겨있음. 응답에서만 사용되는 헤더의 정보들이 있다.
    Headers: {
        Server: 응답을 보내는 서버 정보
    }
  1. Body
    : 요청의 Body와 일반적으로 동일. 응답 형태에 따라 없을 수도 있다. 가장 많이 사용되는 Body의 데이터타입은 JSON이다.
    Body: {
        "message": "SUCCESS"
        "token": "dkfeighsd@ghe" (암호화된 유저 정보)
    }

3. HTTP Request Methods

1) GET

  • 특정 데이터를 서버에서 받아(GET)오기만 할 때 쓰는 method
  • 가장 많이 사용되는 method. 웹페이지를 띄울 때 필요한 정보들을 모두 GET method로 요청을 보내서 받아온 응답을 화면에 띄운다.
    예시 : 장바구니의 아이템을 볼 때
    (축약된 요청 메세지)
    GET /shop/bag HTTP/1.1
    Header: {
        "HOST": "https://www.apple.com/kr"
	    "Authroization": "kldiduajsadm@9df0asmzm" (로그인 인증 토큰)
    }

    (축약된 응답 메세지)
    HTTP/1.1 200 SUCCESS
    Body: {
	"message": "SUCCESS"
	"carts": [
		{
			"productId": 10
			"name": "Pro Display XDR - Nano-texture 글래스"
			"price": "₩7,899,000"
			"quantity": 1
		},
		{
			"productId": 20
			"name": "Mac Pro"
			"price": "₩73,376,000"
			"quantity": 2
		}	
	]
    }// body 끝

2) POST

  • 데이터를 생성/수정 할 때 사용
  • 대부분의 경우 요청에 body가 포함되어서 보내진다.
    예시 : 장바구니에 상품을 담을 때
    (축양된 요청 메세지)
    POST /shop/bag HTTP/1.1
    Headers: {
	"HOST": "https://www.apple.com/kr"
	"Authroization": "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명하는 로그인 인증 토큰)
    }
    Body: {
	product: {
		"productId": 30
		"name": "12.9형 iPad Pro Wi-Fi + Cellular 128GB"
		"color": "스페이스 그레이"
		"price": "₩1,499,000"
		"quantity": 1
	}
    } // body 끝

3) DELETE

  • 특정 데이터를 서버에서 삭제하도록 요청 보낼 때 쓰는 method
    예시 : 장바구니에서 제품을 삭제한다.
    (축약된 요청 메세지)
    Headers: {
	"HOST": "https://www.apple.com/kr"
	"Authroization": "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명하는 로그인 인증 토큰)
    }
    Body: {
    	productId: 30
    }

    (축약된 응답 메시지)
    HTTP/1.1 201 SUCCESS
    Body: {
    	"message": "productId 30 DELETED"
    } // body 끝

3. Response Status Code

주로 볼 수 있는 상태 코드들

1) 200: OK

요청에 대한 처리가 성공적일 때 볼 수 있는 코드

2) 201: Created

post 등 무언가 잘 생성되거나 수정되었을 때 볼 수 있는 코드

3) 400: Bad Request

해당 요청이 잘 못 되었을 때 볼 수 있는 코드
주로 body 내용이 잘 못 되었을 때 볼 수 있다.
전화번호는 숫자로 되어야 하는데 문자열이 서버로 보내지거나 할 때

4) 401: Unauthorized

승인되지 않은 요청일 경우
로그인을 해야 요청가능한 기능인 경우 로그인(인증)을 요구하는 코드

5) 403: Forbidden

해당 요청에 대한 권한이 없다는 의미
권한을 얻으면 요청가능하다.
유료회원만 사용 가능한 기능을 무료회원이 볼려고 할 때 볼 수 있는 코드

6) 404: Not Found

요청한 URL을 찾을 수 없다는 코드. 홈페이지의 다른 페이지는 열린다.

7) 500: Internal Server Error

서버 자체 에러일 경우 볼 수 있는 에러. 백엔드의 문제이다.

profile
프론트엔드 엔지니어

0개의 댓글