[session] HTTP 노트필기

Carminido·2020년 3월 22일
0

ComputerScience

목록 보기
8/9

#HTTP

프로토콜?

규칙 혹은 규약

우리가 이걸 지키자 하고 정해놓은 것

Transfer 전달

뭔가를 전달하기 위한 규칙

hyper Text 는 html을 말하는 거라고 해도 상관 없다

하이퍼 텍스트를 전송하기 위한, html 파일을 전송하기 위한 규칙

그러면 어디로 전달해야 할까? 서버로 전달한다.

서버와 서버끼리 hypertext를 전달하기 위해서 만든 규칙

worldwideweb을 만든 사람이 만들었다.

html을 서버끼리 전달하기 위해서 만들었다.

사실 http의 개념 자체는 어렵지 않다.

우리가 생각했을 때, 규칙을 만든다고 하면 어떻게 정할까?

규칙이 전달되기 위해서는 근간이 되는 것이 있어야 한다.

우리가 전달을 하기 위해서는 목소리를 내는데 우리는 한국말이라는 언어로 한다.

만약 우릳가 프랑스어로 말한다고 하면 알아들을 수 있을까? 아니다.

서로 이해를 하기 위해서 언어를 만드는 것 처럼

어떤 규칙으로 적느냐에 따라 이해가 달라지는 것

양자가 서로 이해를 하기 위해서 정해놓은 규칙이 프로토콜이다.

http는 양자간에 이해하기 위해서 정해 놓은 규칙이다.

종이와 검은색 잉크

http: 인터넷을 통해서 연결된다.

네트워크는 인터넷이 연결되어 있지 않으면 아예 보낼 수 없으니까

그럼 그 전송하는 것은 무엇 일까? 비트.

비트가 서버와 서버끼리 전송이 되는데 조금 더 추상화를 하면 텍스트 ( 문자열)이 전송된다.

그런데 이 문자열을 어떤 규칙으로 보내느냐에 따라서 이해가 달라진다.

tcp ftp 어떤 규칙에 의해서 쓰여졌느냐에 따라서 달라진다. http는 http, tcp 는 tcp

코딩의 세계에서는 마법이 없다. 모두 다 매개체가 있다.

서버에서는 비트(텍스트)가 오고가는 것인데 그 텍스트가 무엇이냐에 다라서 달라지는것

/프로토콜을 만든다면?

정보를 전송해야 하는데

우리의 말에도 문법(구성)이 있는 것처럼 똑같다.

-상대방의 주소. 내가 보내야 하니까

-보내는 사람 ( 어디서 오는 지에 대한 정보
-본문 ( 데이터)

-요청이 의도한 성격(메소드)

-데이터의 종류 ( 타입)

-프로토콜 http 버전의 정보

이런 것들은 모두 요청에 대한 meta 데이터

랜더링이 되는 것은 아니지만 필요한 데이터

그래서 이런걸 header 이라고 한다.

http 는 크게 세가지이다.

/http의 핵심 요소

-요청과 응답

한 서버가 다른 서버에 요청을 보낸다. 그러면 그 받은 서버가 응답을 보낸다.

이게 이렇게 서로 한번씩 주고 받는 것이 하나의 통신이다.

응답이 안왔으면 에러이다.

-state less
상태가 없다. 요청과 응답. 만약 우리가 네이버를 한다고 하면 수 많은 요청과 응답이 왔다갔다 하는데

그 이전에 어떤 요청이 있었는지 알지 못한다. 딱 현재의 통신만안다

기존에 있었던 통신들의 정보를 저장하지 않는다.

그래서 생기는 도전거리

지금 나가는 통신 전의 어떤 통신이 있었는지 모르기 때문에 생기는 문제

우리가 로그인을 하고 다음 페이지로 넘어가면 모른다.

근데 우리는 로그인을 해도 유지 상태가 되는데. 왜 가능할까

http는 stateless라서 그 요청에 필요한 정보를 같이 보낸다.

얘는 로그인한 유저야 라는 정보를 다음 요청에 첨부해서 보낸다.

request의 메세지 응답 구조

http유형에 맞춘 텍스트가 나갈 것인데

  1. startline

말그대로 시작줄도 세부분으로 되어있다.

request target

/login 이라면 그 엔드 포인트에 보낸다.

http 버전

http 메소드 ( 요청의 성격, 어떤 의도를 가지고 온 요청인지를 알려주는 것)

get, post, delete

데이트 줘. 데이트 저장해.

-두번째, header


*host 요청을 보내는 서버에 대한 정보

google.com/search

*user_agent

요청을 보내는 에이전트에 대한 정보

크롬을 쓰면 클라이언트는 크롬이 된다.

그 사람에 대한 정보 _ 광고

*Accept

어떤 스타일로 줘!

*connection

연결을 계속 할건지 말건지

한번 연결을 하는게 비싼 거다

그런데 끊고 싶으면 끊는 다는 내용을 주면 된다.

*content-type 내가 보내고 있는 데이터 타입이 이거야

이러한 정보는 key, value 구조로 되어있다.

마지막 부분. 본문! 실제 데이터

body가 없는 요청도 있다. get요청의 경우, 내가 달라고 요청을 하는거지 주는게 아니라서

Response 구조

3가지로 나누어져 있다.

  1. status line

왜? 요청에 대한 응답이니까 그 응답을 알려주기 위해서 먼저 보내는 거임

처리 했는지 잘못되었는지를 먼저 알려준다.

1-1. http 버전

1-2. status code 응답에 대한 상태를 숫자로 된 코드로 보낸다.

1-3. status text . 숫자로 표현하면 컴퓨터는 이해하기 쉽지만 사람에게는 어렵기 때문에 첨부해서 보내주는 것

404 not Found

근데 상대방을 못찾았는데 누가 못찾았다고 알려주는거야???? 야 그거 너 잘못되었어라고 누가 알려주는 걸까?

받는 서버의 주소를 두개로 해서 보냈음. host(headers) , target(startline)

404라면 , host google.com은 맞았는데 target이 잘못되었다.

ㄷ~아파트는 맞는데 그런집 없어요~ 다시 돌려보냄

  1. header

server라는 헤더가 있는게 리퀘스트와 차이.

보내주는 서버에 대한 정보

  1. body

실제 데이터

터미널에서 응답을 받으면 생 html로 준다. (랜더링이 안되어서)

.

HTTP 메소드

우리가 요청을 보낼 때마다 저렇게 하나씩 startline을 치거나 하지는 않는다.

하지만 HTTP 메소드 status 는 정해야 한다.

메소드는 우리가 어떤 요청인지를 알려주는 것

메소드의 종류가 많지만 몇 개 밖에 안든다.

웹페이지는 최대한 심플하게 짜는 것이 중요하다.

좋은 개발자는 어렵고 복잡한 것도 간결하고 심플하게 짜는 것이다.

여러가지의 메소드가 있지만 한정되어 있다.

-get 가져오다.

서버에 어떤 데이터를 달라고 요청하는 것 ( 유저 정보 , 검색 검색 정보를 달라는 것이니까 _

-Post

데이터를 생성하거나 기존의 데이터를 수정하거나 하는 것

포스트 요청이라면 내가 서버에 이 데이터 저장해, 업데이트해 하는 이런 요청이다.

-delete

말그대로 지우는 것

plus, 알아야 하는 것

/options.'

어쨌든 옵션에 관한 ㄱ것.

해당 주소가 어떤 http를 서포트ㄴ하는지 알 수있음

어떤 메소드가 허용되는지를 알아야 하기 때문에 옵션을 보내면 해당 엔드포인트 주소가 어떤 것을 허용하는지 알려준다.

Status Code

200 Ok 잘 처리 했음

301 이거 주소 바뀌었어

400 Bad Request 잘못된 요청

전화번호를 저장하는 요청인데 전화번호가 010가나다라마바사?

이거 저장안되니까 처리가 안되는 응답을 보내야 하는데

이때는 선택권이 두가지이다.

500 internal Server Error 전화번호 저장하려다가 오류난거니까

근데 이걸로 보내면 책임이 backend로 간다.

근데 그게 아니라 front에서 잘못된 것

그래서 이런 코드를 잘 보내야 무엇이 문제인지를 잘 알 수 있음

401

이거 아니야. 로그인 잘못되었음 이거 비밀번호 아니야

403 forbidden

401은 로그인의 잘못

403로그인은 했는데 admin아니야, 그러면 403

로그인은 했지만 접근 권한이 없음

코드를 잘 이해해야 적절한 응답을 보낼 수 있음.

404 not found 말그래도 타겟 주소가 잘못되어서 찾을 수 없다.

HTTPS security

전송하는 텍스트를 암호화 하는 것

민감정보는 Https로 해야 한다.

만약 로그인이 http라면?

네이버의 검색어는 https이다.

왜냐면 그 통신을 담당하는 통신사들이 그 정보를 가져갈 수 있으니까

요청은 프론트 응답은 서버

401이면, 프론트에서 그 코드를 읽고 비밀번호 틀렸습니다. 창을 내보내는 것

엔드포인트

target

접점

서버간의 접점이니까 end면 호스트(서버)를 말하는 것

backend API는 무엇인가?

데이터 처리

프론트입장에서는, backend API가 제공하는 기능을 이용하는 것

로그인, 로그아웃, 결제 모두 백엔드의 기능을 사용하는 것

백엔드도 결국엔 코드니까

로그인 함수를 만들었다. → 호출해야 한다.

그런데 문제는 front와 back이 물리적으로 다른 컴퓨터다.

근데 그 멀리있는 컴퓨터의 함수를 내가 호출할 수 없다. 그런데 나는 그 기능을 사용한다.

그래서 API를 쓰는 것이다.

원격 조정같은 느낌 다른 컴퓨터에 있는 기능을 내가 원격으로 호출해서 쓰는 것이다.

그 과정이 BACKEND API를 쓰는 것이고 그것을 하기 위해서 HTTP를 하는 것

호출하면 리턴값이 있다. 원격으로 호출했으니 그 결과값도 있다. 그 결과값이 response 이다.

시스템을 짤 때는 로그인 뿐만 아니라 다른 것들도 있다.

그런 엔드포인트를 사용하려면 함수가 많다. 그런데 어떤 엔드포인트를 사용해야한다라고 명시를 해야하는데 그게 바로 target이다. 그래서 target을 endpoint 주소

아파트의 동수 ( endpoint)


profile
나는야 코린이 하지만 무럭무럭 자라고 있죠

0개의 댓글