[1주차 TIL] HTTP/HTTPS

2024. 12. 15. 22:11·ELITE HACKER bootcamp/Pre.web

1. HTTP란?

HTTP(HyperText Transfer Protocol)는 W3 상에서 정보를 주고받을 수 있는 프로토콜입니다.

주로 HTML 문서를 주고받는 데에 쓰입니다. 주로 TCP를 사용하고 HTTP/3부터는 UDP를 사용합니다.

HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답(request/reponse) 프로토콜입니다.


2. HTTP와 HTTPS

  • HTTP
    • 인터넷에서 사용자가 웹 애플리케이션 서비스를 요청하고 웹서버는 사용자로부터 요청 받은 해당 서비스를 제공해주는 과정을 원할하게 수행하기 위한 제반 요건을 표준화한 프로토콜을 의미합니다.

  • HTTPS
    • HTTPS(HyperText Transfer Protocol Secure)은 HTTP의 보안이 강화된 버전의 프로토콜입니다.
    • 소켓 통신에서 일반 텍스트를 이용하는 대신 SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화합니다.
  •  


3. HTTP 헤더와 바디의 구조

  • HTTP 헤더 (Header)
    • HTTP 헤더는 HTTP 바디 및 요청/응답에 대한 정보를 포함합니다.
    • 본문에 대한 정보는 본문 컨텐츠 길이 등 본문 컨텐츠와 관련이 있습니다.
  • HTTP 헤더 유형
    • 일반 헤더
      • 전송되는 HTTP 본문 컨텐츠와 관련 없고, 요청/응답이 생성된 날짜 및 시간 등과 같은 HTTP 통신에 대한 일반적인 정보가 포함됩니다.
    • 요청/응답 헤더
      • 서버에 요청하면 요청 헤더가 있고 서버가 클라이언트/브라우저로 응답을 다시 보낼 때 응답 헤더가 있습니다.
      • 요청 헤더는 요청한 URL, 메소드(GET, POST, HEAD), 요청 생성에 사용된 브라우저 및 기타 정보와 같은 요청에 대한 정보가 포함됩니다.
    • 엔티티 헤더
      • 실제 메시지 또는 전송 중인 HTTP 본문에 대한 정보가 포함됩니다.
      • 컨텐츠 길이, 컨텐츠 언어, 인코딩, 만료 날짜 및 기타 중요한 정보와 같은 정보
  • HTTP 바디 (Body)
    • 가져올 실제 데이터 컨텐츠와 메시지 본문이 나타납니다.
    • 바디에는 HTML 코드, 이미지, CSS 스타일 시트, JavaScript 파일 등이 포함됩니다.

4. HTTP Method

HTTP method는 서버가 수행해야 할 동작을 지정하여 요청을 보내는 방법입니다.

HTTP method를 왜 사용?

- 리소스와 동작을 분리하기 위해
- HTTP method를 통해 서버가 수행해야 할 동작을 지정하면, URL은 리소스만 식별하면 되기 때문
  • HTTP Method의 종류
    • GET : 리소스를 조회
    • POST : 데이터 추가, 등록
    • PUT : 리소스 대체, 수정 / 해당 리소스가 없으면 새롭게 생성
    • DELETE : 리소스 삭제
    • PATCH : 리소스 부분 변경 (수정)
    • HEAD : GET과 동일하나 HTTP 메시지의 BODY 부분을 제외하고 조회
    •  OPTIONS : 서버와 브라우저가 통신하기 위한 통신 옵션을 확인하기 위함
      • 서버가 어떤 method, header, content-type을 제공하는지 알 수 있음
    • CONNECT : 대상 지원으로 식별되는 서버에 대한 연결 요청

5. HTTP 상태코드

서버에서의 처리 결과는 응답 메시지의 상태 라인에 있는 상태 코드를 보고 파악할 수 있습니다. 상태 코드는 세 자리 숫자로 되어 있습니다.

  • 첫 번째 숫자 : HTTP 응답의 종류를 구분하는 데 사용
  • 나머지 2개의 숫자 : 세부적인 응답 내용을 구분하기 위한 번호
  1. 1XX : Informational (정보 제공)
    • 임시 응답으로 현재 클라이언트의 요청까지는 처리되었으니 계속 진행하라는 의미입니다.
  2. 2XX : Success (성공)
    • 클라이언트의 요청이 서버에서 성공적으로 처리되었다는 의미입니다.
  3. 3XX : Redirection (리다이렉션)
    • 완전한 처리를 위해서 추가 동작이 필요한 경우입니다.
    • 주로 서버의 주소 또는 요청한 URI의 웹 문서가 이동되었으니 그 주소로 다시 시도하라는 의미입니다.
  4. 4XX : Client Error (클라이언트 에러)
    • 없는 페이지를 요청하는 등 클라이언트의 요청 메시지 내용이 잘못된 경우를 의미합니다.
  5. 5XX : Server Error (서버 에러)
    • 서버 사정으로 메시지 처리에 문제가 발생한 경우입니다.
    • 서버의 부하, DB 처리 과정 오류, 서버에서 익셉션이 발생하는 경우를 의미합니다.
  • HTTP 상태 코드 전체
    • 상태 코드가 매우 많기 때문에 자주 사용하는 것들만 작성 후 필요 시 구글링을 통해 찾아보도록 하겠습니다.
상태 코드 상태 텍스트 한국어 뜻 서버 측면에서의 의미
200 OK 성공 서버가 요청을 성공적으로 처리하였습니다.
201 Created 생성됨 요청이 처리되어서 새로운 리소스가 생성되었습니다.
응답 헤더 Location에 새로운 리소스의 절대 URI를 기록합니다.
202 Accepted 허용됨 요청은 접수하였지만, 처리가 완료되지 않았습니다.
응답 헤더의 Location, Retry-After를 참고하여 클라이언트는 다시 요청을 보냅니다.
301 Moved
Permanently
영구 이동 지정한 리소스가 새로운 URI로 이동하였습니다.
이동할 곳의 새로운 URI는 응답 헤더 Location에 기록합니다.
303 See Other 다른 위치 보기 다른 위치로 요청하라.
요청에 대한 처리 결과를 응답 헤더 Location에 표시된 URI에서 GET으로 취득할 수 있습니다. 브라우저의 폼 요청을 POST로 처리하고 그 결과 화면으로 리다이렉트시킬 때 자주 사용하는 응답 코드입니다.
307 Temporary
Redirect
임시
리다이렉션
임시로 리다이렉션 요청이 필요합니다.
요청한 URI가 없으므로 클라이언트 메소드를 그대로 유지한 채 응답 헤더 Location에 표시된 다른 URI로 요청을 재송신할 필요가 있습니다. 클라이언트는 향후 요청 시 원래 위치를 계속 사용해야 합니다.
302의 의미를 정확하게 재정의해서 HTTP/1.1의 307 응답으로 추가되었습니다.
400 Bad Request 잘못된 요청 요청의 구문이 잘못되었습니다.
클라이언트가 모르는 4xx 계열 응답 코드가 반환된 경우에도 클라이언트는 400과 동일하게 처리하도록 규정하고 있습니다.
401 Unauthorized 권한 없음 지정한 리소스에 대한 액세스 권한이 없습니다.
응답 헤더 WWW-Authenticate에 필요한 인증 방식을 지정합니다.
403 Forbidden 금지됨 지정한 리소스에 대한 액세스가 금지되었습니다.
401 인증 처리 이외의 사유로 리소스에 대한 액세스가 금지되었음을 의미합니다.
리소스의 존재 자체를 은폐하고 싶은 경우는 404 응답 코드를 사용할 수 있습니다.
404 Not Found 찾을 수 없음 지정한 리소스를 찾을 수 없습니다.
500 Internal
Server Error
내부 서버 오류 서버에 에러가 발생하였습니다.
클라이언트가 모르는 5xx 계열의 응답 코드가 반환된 경우에도 클라이언트는 500과 동일하게 처리하도록 규정하고 있습니다.
501 Not
Implemented
구현되지 않음 요청한 URI의 메소드에 대한 서버가 구현하고 있지 않습니다.
502 Bad Gateway 불량 게이트웨이 게이트웨이 또는 프록시 역할을 하는 서버가 그 뒷단의 서버로부터 잘못된 응답을 받았습니다.

6. SSL 인증서

  • SSL(Secure Sockets Layer)은 웹사이트와 브라우저 사이(또는 두 서버 사이)에 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술입니다.
  • SSL 인증서는 SSL 기반하에서 사용자의 웹브라우저와 인터넷 사이트의 웹서버 간 암호화 통신을 가능하게 하는 제 3의 신뢰기관이 인증한 인증서를 말합니다.
  • HTTPS는 HTTP를 안전하게 만드는 방식입니다.


📌 실습 도전 과제

1. "curl"을 이용하여 HTTP 요청 직접 보내보기

curl(client url) 명령어는 프로토콜들을 이용해 URL로 데이터를 전송하여 서버에 데이터를 보내거나 가져올 때 사용하기 위한 명령줄 도구 및 라이브러리입니다.
즉, Shell에서 REST API(http) 테스트를 하고 싶으면 curl 명령어를 사용하면 됩니다.
  • "curl" 설치
# 우분투
$ sudo apt update
$ sudo apt install curl
  •  
  • "curl" 버전 확인
$ curl -V
  • curl 명령어 옵션
    • 특정 URL을 대상으로 동작하며 URL 앞에는 curl의 옵션을 사용하면 됩니다.
    • 하이픈 하나(-)로 시작하는 short 형식과 하이픈 두개(--)로 시작하는 long 형식 모두 지원합니다.
curl -X GET https://www.example.com
# GET 방식은 BODY 없음
# -X 요청메소드 종류 명시

2. 웹 브라우저 개발자 도구를 사용하여 웹 사이트의 HTTP 통신을 살펴보기

웹 브라우저는 크롬 브라우저를 이용해야 합니다.

  • F12를 눌러서 개발자 도구를 켜줍니다.
  • 개발자 도구 상단의 Network 탭을 클릭 후 새로고침을 합니다.

반응형

'ELITE HACKER bootcamp > Pre.web' 카테고리의 다른 글

[1주차 TIL] 프록시  (0) 2024.12.16
[1주차 TIL] 패킷  (0) 2024.12.16
[1주차 TIL] Cookie와 Session  (0) 2024.12.16
[1주차 TIL] 프로토콜  (0) 2024.12.14
[1주차 TIL] 웹이란?  (0) 2024.12.12
'ELITE HACKER bootcamp/Pre.web' 카테고리의 다른 글
  • [1주차 TIL] 패킷
  • [1주차 TIL] Cookie와 Session
  • [1주차 TIL] 프로토콜
  • [1주차 TIL] 웹이란?
Jio_ni
Jio_ni
안녕하세요!! 개발 공부를 하고 있는 뽀시래기 강지현입니다!!
  • Jio_ni
    지현이의 개발 블로그
    Jio_ni
  • 전체
    오늘
    어제
    • 분류 전체보기 (200)
      • LG AI (4)
      • About (0)
      • ELITE HACKER bootcamp (12)
        • Pre.web (12)
        • Main.web (0)
      • Naver BoostCamp (0)
        • Basic (0)
      • Study (30)
        • Python (13)
        • C언어 (0)
        • Java (0)
        • HTML (7)
        • CSS (0)
        • Linux (0)
        • Web hacking (0)
        • git (4)
        • 혼공학습단 (1)
        • 유니티 (1)
        • 코딩 자율학습단 (4)
      • Project (0)
      • 코딩테스트 (153)
        • CodeUp (76)
        • 프로그래머스 (20)
        • 백준 (47)
        • SWEA (10)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Python
    CodeUp
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
Jio_ni
[1주차 TIL] HTTP/HTTPS
상단으로

티스토리툴바