1.NODE.JS

const PORT = 4999;
const ip = 'localhost';

  //request 객체 매소드분기하기
  if(request.method === 'OPTIONS'){
  response.writeHead(200, defaultCorsHeader);
  response.end('hello mini-server sprints');}
  
  //request 객체의 경로 분기하기
  //매소드가 POST이고 경로가 소문자일때
  let body = [];
  request.on('data', (chunk) =>{
    body.push(chunk);
  });
  if (request.method ==='POST' && request.url ==='/lower'){
    let body = [];
    request.on('data', (chunk) =>{
      console.log(chunk)
      body.push(chunk);
    });
    request.on('end' ,() =>{
      body = Buffer.concat(body).toString().toLowerCase();
      response.writeHead(201, defaultCorsHeader);//
      response.end(body)
    });
    //매소드가 POST이고 경로가 대문자일때
  }else if (request.method ==='POST' && request.url ==='/upper'){
    let body = [];
    request.on('data', (chunk) =>{
      body.push(chunk);
    });
    request.on('end' ,() =>{
      body = Buffer.concat(body).toString().toUpperCase();
      console.log(body)
      response.writeHead(201, defaultCorsHeader);
      response.end(body)
      console.log(body)
    });
    
  }
  else {
      //에러가 발생 할 경우
    response.writeHead(404, defaultCorsHeader);
    response.end('error')
  }



server.listen(PORT, ip, () => {
  console.log(`http server listen on ${ip}:${PORT}`);
});//.listen(4999)


const defaultCorsHeader = {
  'Access-Control-Allow-Origin': '*',//모든 오리진이 접근가능하게한거!
  'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
  'Access-Control-Allow-Headers': 'Content-Type, Accept',
  'Access-Control-Max-Age': 10
};

2.express refactoring

const PORT = 4999;
const ip = 'localhost';
const express = require('express'); 
const cors = require('cors');// cors 미들웨어
const app = express(); //서버 생성
app.use(express.static('client'))
app.use(express.json({strict: false}))
app.use(cors());

  
 

app.get('/' , (req,res) =>{
   res.json( `express method is ${app}.get,post,listen mothod, url is ${'/path'}`)
})

app.post('/lower', (req, res)=> {
  res.statusCode=201
  res.json(req.body.toLowerCase());//send에서 json으로 바꿔줘야돼용
})
app.post('/upper', (req,res)=>{
 
  res.statusCode=201
  res.json(req.body.toUpperCase());
})

app.listen(PORT, ()=>{
  console.log(`http server listen on ${ip}:${PORT}`)
})

app.use((cors())이부분은 모든 요청에대해 허락을 하는부분이기때문에 위험하다 다음에는 cors안에 origin을 채워놓자

3.CORs (cross origin resouce sharing 다른출처 리소스 공유)가 왜 필요한가?

다른 오리진에 리소스를 요청 쉐어링을 할수가있냐
내가 만약에 네이버 블로그를 만들었는데 어떤 악의적인 사용자가 와서 다른사용자가와서 지워버릴수도있음. 진짜 다날라가는거
그래서 서버가 허용한 범위내에서 도메인이나 보안에 접근에 위험이 있기때문에 해당헤더에 도메인주소를 넣는것으로 합의를보았음.

preflight 

서버가 가지고있는 중요한정보를 수정하기위해 요청이 안전한가 떠보는것.안전하다면 post나 get이나 헤더 모음집에 허용한 메소드를 사용할 수 있다.

simple request

preflight 없이 바로 본요청을 넣을 수있다. 일반적인 방법으로 웹 애플리케이션 아키텍쳐를 만족시킬 수 없다.

 

복사했습니다!