패스트캠퍼스 한 번에 끝내는 파이썬 웹 개발 초격차 패키지 pt3 - http와 소켓

정영찬·2022년 2월 25일
0

HTTP(Hyper Text Tranfer Protocol)

  • 클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜
  • 클라이언트인 웹 브라우저가 HTTP를 통하여 서버로부터 웹페이지나 그림 정보를 요청하면, 서버는 이 요청에 응답하여 필요한 정보를 해당 사용자에게 전달한다.

HTTP 구조

HTTP Request 구조

1. start line

HTTP 메소드, Request target, HTTP version이 있다

GET /search HTTP/2.0

  • HTTP 메소드 : 요청의 의도를 담고 있는 GET(존재하는 자원에 대한 요청),POST(새로운 자원생성),PUT(존재하는 자원에 대한 변경),DELETE(존재하는 자원에 대한 삭제) 등이 있다.

  • Reauest target: HTTP가 전송되는 목표 주소

  • HTTP version : version에 따라 메시지 구조나 데이터가 다를수 있어서 version을 명시한다.

    2. headers

  • HTTP Request 그 자체에 대한 정보를 담고 있다. key: value 형태로 이루어져 있다.

  • Request, Respone에만 있는 Header 외에 공통 Header도 존재한다.

Host : 요청하려는 서버 호스트 이름과 포트번호
User-agent : 클라이언트 프로그램 정보. 이것을 통해 서버는 클라이언트 프로그램에 맞는 데이터를 보내 줄수 있다.
Referer : 바로 직전에 머물렀던 웹 링크 주소
Accept : 클라이언트가 처리 가능한 미디어 타입종류 나열
If-Modified-Since : 여기에 쓰여진 시간 이후로 변경된 리소스 취득. 페이지가 수정되었으면 최신 페이지로 교체한다.
Authorization : 인증 토큰을 서버로 보낼 때 쓰이는 Header
Origin : 서버로 Post 요청을 보낼 때 요청이 어느 주소에 시작되었는지 나타내는 값. 이값으로 요청을 보낸 주소와 받는 주소가 다르면 CORS(Cross-Origin Resource Sharing) 에러가 발생한다.
Cookie : 쿠키의 값이 key-value로 표현된다.

3. empty line

헤더의 끝을 식별하기위해서 생긴 빈 줄

4. body

  • HTTP Request가 전송하는 데이터를 담고 있는 부분이다. 전송하는 데이터가 없으면 body 부분은 비어있다.
  • POST 요청일 경우, HTML 폼데이터가 포함되어있다.

HTTP Response 구조

1. Start Line

HTTP 메소드, Request target, HTTP version이 있으며 Request와 비슷하다.

2. Header

Location : 301, 302 상태코드일 때만 볼 수 있는 Header로 서버의 응답이 다른곳에 있다고 알려주면서 해당 위치(URL)를 지정한다.
Server : 웹서버의 종류
Age : max-age 시간내에서 얼마나 흘렀는지 초 단위로 알려주는 값
Referrer-policy : 서버 referrer 정책을 알려주는 값 ex)unsafe-url, string-origin
WWW-Authenticate : 사용자 인증이 필요한 자원을 요구할 시 ,서버가 제공하는 인증방식
Proxy-Authenticate : 요청한 서버가 프록시 서버인 경우 유저 인증을 위한 값

3. empty line

헤더의 끝을 식별하기위해서 생긴 빈 줄

4. body

  • HTTP Request가 전송하는 데이터를 담고 있는 부분이다. 전송하는 데이터가 없으면 body 부분은 비어있다.

※ 공통 헤더

요청과 응답에 모두 사용되는 헤더이다.

Date : 메시지가 만들어진 시작. 자동으로 생성됨

Connection : 클라이언트와 서버 간 연결에 대한 옵션 설정 ex)keep-Alive

Cache-Control : 캐시 제어
- no-store : 캐시 저장하지 않음
- no-cache: 모든 캐시를 쓰기 전에 해당캐시를 사용해도 되는지 확인할 것이다.
- must-revalidate: 만료된 캐시만 서버에서 확인한다
- public: 공유 캐시에 저장해도 된다.
- private: '브라우저' 같은 특정 사용자 환경에만 저장한다.

Content-Length : 메시지의 본문 크기를 바이트 단위로 표시. 메시지 크기에 따라서 자동으로 생성

Content-Type : 컨텐츠의 타입과 문자열 인코딩을 명시

Content-Language : 사용자의 언어를 뜻한다.

Content-Encoding : 컨텐츠가 압축된 방식. 압축된 컨텐츠를 보내면 브라우저가 해제해서 사용한다.

Http 상태코드

  • 1xx(정보) : 요청을 받았으며 프로세스를 계속하낟.
  • 2xx(성공) : 요청을 성공적으로 받았으며 인식했고 수용하였다.
  • 3xx(리다이렉션) :요청 완료를 위해서는 추가작업 조치가 필요하다.
  • 4xx(클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없다.
  • 5xx(서버 오류) : 서버가 명백히 유효한 요청에 대해 충족을 실패했다.

만약 코드가 어떤 내용을 뜻하는지 기억이 안날때 https://http.cat/(번호) 를 입력해서 들어가면 귀여운 고양이 사진과 함께 무슨 상태인지를 알려준다.

ex) https://http.cat/404

Socket

프로세스가 네트워크로 내보내거나 데이터를 받기위한 실제적인 창구역할을 수행한다. 프로세스가 데이터를 보내거나 받기 위해서는 반드시 소켓을 열어서 소켓에 데이터를 써보내거나 소켓으로부터 데이터를 읽어들여야 한다.

Socket 요소

  • 프로토콜 : 어떤 시스템이 다른 시스템과 통신을 원활하게 수용하도록 해주는 통신 규약

  • IP : 컴퓨터에 부여된 고유의 식별 주소

  • PORT : 네트워크 상에서 통신하기 위해서 호스트 내부적으로 프로세스가 할당받아야하는 고유한 숫자. 컴퓨터 내에서 프로그램을 식별하는 번호이다.

소켓통신 진행과정

서버
연결 요청이 오면 클라이언트 소켓을 생성하여 통신이 가능하게 한다.

  • socket()함수를 이용하여 소켓을 생성
  • bind() 함수로 ip와 port번호를 설정하게 된다.
  • listen() 함수로 클라이언트 접근 요청에 수신 대기열을 만들어 몇개의 클라이언트를 대기 시킬지 결정
  • accept() 함수를 사용하여 클라이언트와의 연결대기

클라이언트

  • socket() 함수로 가장먼저 소켓을 연다.
  • connect() 함수를 이용하여 통신 할 서버의 설정된 ip와 port 번호에 통신을 시도
  • 통신을 시도 시, 서버가 accept()를 이용하여 클라이언트의 socket descriptor를 반환
  • 이를 통해 클라이언트와 서버가 서로 read(),write()를 하며 통신한다.

참고 자료https://helloworld-88.tistory.com/215

profile
개발자 꿈나무

0개의 댓글