Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTP 기본개념 #2

Closed
kimkyuchul opened this issue Oct 10, 2022 · 0 comments
Closed

HTTP 기본개념 #2

kimkyuchul opened this issue Oct 10, 2022 · 0 comments
Labels

Comments

@kimkyuchul
Copy link
Owner

kimkyuchul commented Oct 10, 2022

들어가기 전에 Socket이란?

  • Socket은 한번 연결에 성공하면, 연결이 계속 유지된다.
  • 연속적(실시간)으로 데이터를 받아야 하는 경우인 실시가 스트리밍, 채팅 같은 서비스에 사용된다.
  • Socket의 가장 중요 포인트는 양뱡향 통신. 보통 Client가 Server에게 데이터를 요청하지만, 반대로 Server가 Client에게 데이터를 요청할 수도 있음

Socket과 다른 HTTP

  • HTTP 통신은 Client에서 데이터가 필요할 때마다 Server에게 요청하고, Server는 그 데이터를 응답하고 그리고 바로 연결이 종료 되는 방식
  • HTTP 통신은 단방향 통신이라, Client만 Server에게 요청할 수 있고, Server는 Client에게 요청할 수 없음

HTTP 메시지

  • PC에서 웹브라우저의 주소줄에 도메인을 입력하거나 혹은 특정 링크를 클릭하여 원하는 페이지로 이동하는 순간을 생각해 볼 때, 이때 우리가 보낸 요청은 일정한 형식을 갖춘 텍스트 기반 메시지로 변환되어 웹 서버에 전달되는데, 이 메시지 형식을 HTTP 메시지 라고 함
  • HTTP 메시지는 크게 요청과 응답 메시지로 나눔. 각각의 메시지는 모두 라인 - 헤더 - 바디의 세 부분으로 구성
  • 라인(Line)은 HTTP 메시지의 맨 첫 줄에 해당하는 영역으로, 메시지의 기본적인 내용인 응답/요청 여부, 메시지 전송 방식, 상태 정보 등이 작성
  • 헤더(Header)에는 메시지 본문에 대한 메타 정보
  • 바디(Body)에는 실제로 보내고자 하는 메시지 본문 내용(JSON)

HTTP 메시지 구조

  • 라인(Line)

    💡 POST /userAccount/login HTTP/1.1
    • POST/GET 등의 전송 메서드를 정의하며 시작
    • 요청 내용에 대한 경로
    • 요청 형식에 대한 버전 정보
  • 헤더(Header)

    💡 Host: [swiftapi.rubypaper.co.kr:2029](http://swiftapi.rubypaper.co.kr:2029/).
    Content-Type: application/json
    • 메세지 본문에 대한 메타 정보가 기입
    • 바디와 구분을 짓기 위해 한 줄의 공백이 삽입
    • Host란 Key에는, 도메인 및 포트번호 Value로 온다.
    • Content-Type이란 Key에는 메시지 바디의 타입 ( ex: application/json )
  • 바디(Body)

    {
    "이름": "홍길동",
    "나이": 25,
    "성별": "",
    "주소": "서울특별시 양천구 목동",
    "특기": ["농구", "도술"],
    "가족관계": {"#": 2,"아버지": "홍판서","어머니": "춘섬"},
    "회사": "경기 수원시 팔달구 우만동"
     }
    • 바디에 들어가는 메시지 형식은, 헤더의 Content-Type에서 설정한 Type과 일치
    • 길이가 유동적

POST / GET

POST

  • 위에서 살펴본 HTTP 요청 메시지는 POST 방식일 경우이다. 만약 전송 방식이 GET이라면 메시지 구조가 변경된다.
  • 헤더에 Content Type을 명시하고, 바디에 Content Type에 맞는 데이터를 넣는 것 ⇒ POST

스크린샷 2022-10-13 오후 4 03 33

GET

  • 메시지 본문이 사라지고, 본문에 있어야 할 값이 첫 번째 라인의 경로 뒤에 ‘?’ 문자열과 함께 연결된다.
  • GET 방식에서는 파라미터를 모두 URL, 뒤에 연결해서 전달하기 때문
  • 이렇게 연결된 파라미터를 쿼리 스트링(Query String)이라고 함
  • 본문을 사용하지 않기 때문에, 헤더의 Content-Type이 사용되지 않음
  • URL 뒤에 쿼리 스트링만 연결하면 돼서 간결하게 정보를 전달할 수 있는 장점
  • URL 경로의 허용범위가 1024Byte이기 때문에 긴 값은 전송할 수 없다는 단점
  • 따라서 데이터를 '전송' 할 때 보다, 필요한 정보를 '요청' 할 때 주로 사용

AA

POST, GET은 언제 사용?

  • POST의 경우 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있을 때 
    사용
  • 서버의 상태나 데이터를 변경시킬 때 사용 ex) 게시글을 쓰고, 삭제하는 것은 데이터가 변경되는 것
  • GET의 경우 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와할 때 
    사용
  • POST와 반대로 GET은 서버의 상태나 데이터를 변경시키지 않을 때 사용 ex) 조회
메소드 목적
GET 특정 리소스의 대표적인 정보 요청
POST ID 없이 리소스를 생성, 수정
PUT ID 기반으로 리소스를 생성하거나 수정
DELETE 리소스 삭제
HEAD GET 방식의 요청이지만 내용 없이 메타정보만 요청
OPTIONS 특정 URL에 대한 보조 메소드 역활
@kimkyuchul kimkyuchul added the CS label Oct 10, 2022
@kimkyuchul kimkyuchul changed the title HTTP, HTTPS HTTP 기본개념 Oct 13, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant