티스토리 뷰

Backend

web. HTTP(S)란 무엇인가?

out of coding 2019. 6. 22. 12:01

HyperText Transfer Protocol

  1. 웹상에서 데이터를 서로 주고 받을수 있도록 만들어진 프로토콜 또는 규약을 이야기 합니다.
  2. 애플리케이션 레벨의 프로토콜인 TCP/IP 위에서 동작을 합니다.
  3. http 80, https 443 port 이용
  4. 클라이언트의 요청(Request)를 서버가 응답(Response)하는 구조

특징

  1. 비상태 연결 (stateless, connectless)
    • 서버에 연결하고 요청을해서 응답을 받으면 연결을 끊어버리는 구조
    • 장점 : 접속유지 최소화를 이루게 되고 불특정 다수를 대상으로 하는 서비스에 유리
    • 단점 : 연결을 끊어버리기 때문에, 클라이언트의 이전 상태를 알수가 없게 되고 다시 요청을 할 경우에는 부가 정보를 전송하여 주어야 하는 문제점들이 있음. 특히 로그인을 예로 들었을 경우에 로그인을 하였는지에 대한 정보 유지가 어렵게 되어 있는 점들이 있으나 이것은 쿠키등등으로 해결을 하고 있습니다.
  2. Keep-Alive
    • HTTP 1.1부터 적용되는 기술이며, 하나의 연결에 하나의 요청을 하는 것을 기준으로 설계가 되어 있는데, 연속으로 파일등을 전송하여야 하는 일이 있다고 한다면 연속적인 동작임에도 불가하고 계속 접속, 끊기를 반복하여야 하는 문제점들이 발생하게 됩니다. 이러한 문제를 해결하기 위해서 지정된 시간동안은 커넥션을 끊지 않고 요청을 지속적으로 보내도 되는 방법
  3. HTTPS
    • SSL을 의미하며, 전자상거래에서의 데이터 보안을 위해서 개발한 통신 레이어입니다. 표현계층 프로토콜로 응용 계층 아래에 있기 때문에 어떤 응용 계층의 데이터라도 암호화해서 보내는게 가능합니다.
    • HTTP보다 느리기 때문에 많이들 사용합니다.

Request 구조

POST /test HTTP/1.1
Host: test.com
User-Agent: ...
Aceept: application/json
Accept-Language: en-US
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/json
Content-Length: 83

{
    "name": "dh"
}

위와 같은 형태로 전송하게 됩니다.

 

다음과 같은 구조로 구성이 되어 있습니다.

 

1. Start-line

POST /test HTTP/1.1

여기에는 세가지 부분이 포함이 되어 있습니다.

  • HTTP Method : POST로 적은 부분인데요. 대부분 GET, POST, PUT, DELETE를 이용합니다. 추가적으로 HEAD, OPTIONS를 사용하여 서버가 수행해야하는 동작을 나타내게 됩니다.
  • /test : 이것은 URL정보 프로토콜, 포트, 도메인의 절대 경로로 나타낼 수 있는 부분입니다.
    • origin 형식 : 끝에 "?"와 쿼리 문자열이 붙는 절대 경로로 가장 일반적인 형식입니다.
      예를 들면 아래와 같은 형태가 될수 있을것 같네요
      POST / HTTP 1.1
      GET /test.html HTTP/1.0
      HEAD /test.html?query=dh HTTP/1.1
      OPTIONS /test.html HTTP/1.0
    • absolute 형식 : 완전한 URL의 형태이며, 대부분 GET과 함께 사용됩니다.
      GET http://test.com/document/test.html
    • authority 형식 : 도메인 이름 및 옵션 포트 (":"가 앞에 붙는다고 합니다... 저도 이걸 사용하지는 않아서... ) HTTP 터널을 구축하는 경우에만 CONNECT와 함께 사용할 수 있다고 합니다.
      CONNECT test.com:80 HTTP/1.1
    • asterisk 형식 : OPTIONS와 함께 별표("*") 하나로 간단하게 서버 전체를 나타냅니다.
      OPTIONS * HTTP/1.1
  • HTTP 버전 : 메시지의 남은 구조를 결정하기 때문에, 응답 메시지에서 써야 할 HTTP 버전을 알려주는 역할을 합니다.

2. Header

 

Request Header : 요청 내용을 좀 더 구체화 시키는 목적으로 이용합니다. Accept 구조를 가지고 전문의 타입을 결정할 수 있습니다.

Host: test.com
User-Agent: ...
Aceept: application/json
Accept-Language: en-US
Accept-Encoding: gzip, deflate

General Header

Connection: keep-alive

Entity Header : 요청 및 응답 메시지 모두에서 사용 가능한 Entity(콘텐츠, 본문, 리소스)에 대한 설명 헤더 항목

Content-Type: application/json
Content-Length: 83

Body

{
    "name": "dh"
}

 

Response 구조

HTTP/1.1 404 Not Found
Connection: close
Content-Length: 1573
Content-Type: text/html; charset=UTF-8
Date

<DOCTYPE html>
<html lang=en>

 

다음과 같은 구조로 응답을 주게 됩니다.

 

  • 응답 라인
    • 버전
    • 상태 코드
    • 상태 메세지 : HTTP/1.1 200 OK
  • 응답 헤더
    • Content-Type : 바디 데이터의 타입
    • Content-Length : 바디 데이터 크기
    • Set-Cookie : 쿠키 설정
    • ETag : 엔티티 태그
  • 응답 바디 : HTML, JSON, Octet Stream 등

Response 상태 코드

  • 1xx : 정보
  • 2xx : 성공
    • 200 : OK. 요청 성공
    • 201 : Created. 생성 요청 성공
    • 202 : Accepted. 요청 수락(처리 보장X)
    • 204 : 성공했으나 돌려줄게 없음
  • 3xx : 리다이렉션
    • 300 : Multiple choices. 여러 리소스에 대한 요청 결과 목록
    • 301,302,303 : Redirect. 리소스 위치가 변경된 상태
    • 304 : Not Modified. 리소스가 수정되지 않았음
  • 4xx : 클라이언트 오류
    • 400 : Bad Request. 요청 오류
    • 401 : Unauthorized. 권한없음
    • 403 : Forbidden. 요청 거부
    • 404 : Not Found. 리소스가 없는 상태
  • 5xx : 서버 오류
    • 500 : Internal Server Error. 서버가 요청을 처리 못함
    • 501 : Not Implemented. 서버가 지원하지 않는 요청
    • 503 : Service Unavailable. 과부하 등으로 당장 서비스가 불가능한 상태

 

 

'Backend' 카테고리의 다른 글

VIP란? Very Important Person아님... Virtual IP임!!  (2) 2019.11.19
web. Cookie와 Session  (0) 2019.06.22
Referer...  (0) 2018.04.18
[Web]welcome-file  (0) 2015.01.26
Beans  (0) 2014.08.19
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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 31
글 보관함