본문 바로가기

Lecture

HTTP 동기 통신

HTTP 통신의 형태는 크게 4파트로 구성되어있다.

 

     1. start-line
     2. Headers
     3. empty line
     4. body

 

이렇게 4파트의 형식을 가진 REQUEST 와 RESPONSES가 서로 통신을 주고 받는걸 HTTP 통신이라고 하는데 각각 어떤 내용을 담고 있는지 확인해 보자

 

 

REQUEST

 

 

1. start line

 

   => request method(GET or POST) 현재 URL HTTP버전

   예시) GET http://localhost:3000 HTTP/1.1

 

 

2.headers

 

헤더는 화면에 꾸며지지 않는 정보들을 담고 있다.

몇가지만 살펴보자

host: 사이트의 도메인 주소(ex: 네이버, 구글)

user-agent: 사이트를 사용하고 있는 user의 정보

content-type: body내용의 데이터 타입을 명시한다. (ex: multipart/formdata)

content-length : ...

 

단 fetch를 사용해서 POST로 정보값을 보낼때는 내용을 직접 입력해줘야한다.

 

예시

 

    let token;
    try {
        token = await axios({
            method: 'POST',
            url: 'https://kauth.kakao.com/oauth/token',
            headers: {
                'content-type': 'application/x-www-form-urlencoded'
            },
            data: qs.stringify({
                grant_type: 'authorization_code',
                client_id: kakao.clientID,
                client_secret: kakao.clientSecret,
                redirectUri: kakao.redirectUri,
                code,
            })
        })
    } catch (err) {
        res.json(err.data)
    }

method, url은 start line에, headers안에 들어있는 데이터는 headers에게 전송한다

 

3. empty line

말그대로 비어있는 한 줄

 

4. body

우리 눈에 보이는 body내용이다.

 

 

RESPONSES

 

1. start line

   => HTTP버전 응답코드 응답내용

   예시) HTTP/1.1 200 OK

   응답코드 종류에 대해서 더 알려면 https://velog.io/@sdc337dc/%EC%9B%B9-%EA%B0%9C%EB%85%90-Http-%ED%86%B5%EC%8B%A0 참고

 

3, 4 는 REQUEST와 동일하다

 

 

아래에 작성된 두가지 코드로 페이지를 가동 시키고 파이어 폭스 브라우저에서 id와 pw값을 입력하고 GET 버튼을 눌러 render된 페이지의 헤더를 살펴보았다.

더보기

index.html

 

<h1>GET REQUEST</h1>
<form action="/login" method="get">
    <input type="text" name="userid">
    <input type="password" name="userpw">
    <input type="submit" value="GET"> 
</form>

 

 

server.js

 

const express = require('express');
const nunjucks = require('nunjucks');
const bodyParser = require('body-parser');
const app = express();

app.use(bodyParser.urlencoded({extended:false}));
app.set('view engine','html');
nunjucks.configure('views',{
    express:app,
})

app.get('/',(req,res)=>{
    res.render('index')
})

app.get('/login',(req,res)=>{
    let {userid,userpw} = req.body;
    console.log(userid,userpw)
    res.send(`GET OK ${userid}/${userpw}`)
});

app.listen(3000,()=>{
    console.log('start')
})

 

처음 랜더한 페이지

 

id와 pw입력한후 get 버튼 눌렀을때

 

 

요청 헤더는 이런식으로 뜬다

 

 

아까 썼던 내용을 확인해 보기 위해서 원시 코드를 확인해봤다.

 

 

여기서 맨 첫번째 줄 GET /login?userid=&userpw= HTTP/1.1은 위에서 말한 start line이다 그 아래로는 header부분이고이 뒤로 빈칸 한줄, body내용이 담긴다.

 

 

응답헤더는 이렇게 뜬다

 

똑같이 원시 코드를 확인해 보면

 

 

 

자 그럼 POST를 이용한 헤더를 확인해 보자

 

코드참고

더보기

HTML

 

<h1>POST REQUEST</h1>
<form action="/login" method="post">
    <input type="text" name="userid">
    <input type="password" name="userpw">
    <input type="submit" value="POST">
</form>

 

 

JS

 

const express = require('express');
const nunjucks = require('nunjucks');
const bodyParser = require('body-parser');
const app = express();

app.use(bodyParser.urlencoded({extended:false}));
app.set('view engine','html');
nunjucks.configure('views',{
    express:app,
})

app.get('/',(req,res)=>{
    res.render('index')
})

app.post('/login',(req,res)=>{
    let {userid,userpw} = req.body;
    console.log(userid,userpw)
    res.setTimeout(3000,()=>{
        res.send(`POST OK ${userid}/${userpw}`)
    });
});

app.listen(3001,()=>{
    console.log('start')
})

 

이번에는 POST를 사용해서 정보를 주고 받아보자.

 

값을 각각 입력하고 POST버튼을 누르면 

 

REQUEST HEADER

 

 

 

RESPONSES HEADER

 

 

 

 

'Lecture' 카테고리의 다른 글

비동기 통신 로딩 처리  (0) 2021.05.27
HTTP 비동기 통신  (0) 2021.05.25
미들웨어로 로그인 확인하기  (1) 2021.05.24
자바스크립트 Switch문 사용  (1) 2021.05.24
자바스크립트 비구조할당문  (0) 2021.05.24