-
4.6 S2U10 종합퀴즈코드스테이츠/JavaScript 2023. 4. 7. 00:05
💁♀️ 동일 출처 정책(SOP)에서 동일한 출처(Origin)로 보기 위해 동일해야 하는 요소를 고르세요. (정답 세 개)
A. protocol
B. host
C. port
D. url-path
E. query🔈 해설
정답 A,B,C
동일 출처 정책(SOP)에서
protocol, host, port가 같으면 동일한 출처로 보고 있습니다.
💁♀️🙈 CORS(Cross-Origin Resource Sharing)에 대한 설명으로 옳은 것을 고르세요.
A. 같은 출처의 리소스만 공유가 가능한 정책이다.
B. 보안을 위해 잠재적으로 공격받을 수 있는 경로를 줄이기 위한 정책이다.
C. 다른 출처의 리소스를 받아오기 위해서 CORS가 등장했다.
D. POST 메서드로 프리플라이트 요청을 보내 해당 출처 리소스에 접근 권한이 있는지 확인한다.B.🔈 해설
정답 C
A. 같은 출처의 리소스만 공유가 가능한 정책은 동일 출처 정책(SOP) 입니다.
B. 잠재적으로 공격받을 수 있는 경로를 줄이기 위해 동일 출처 정책(SOP)이 있습니다.
D. OPTIONS 메서드로 프리플라이트 요청을 보냅니다.
💁♀️ 프리플라이트 요청(Preflight Request)에 사용하는 메서드로 옳은 것을 고르세요.
A. GET
B. POSTC. PUTD. PATCHE. OPTIONS
🔈 해설
정답 E
프리플라이트 요청(Preflight Request)에 사용하는 메서드는 OPTIONS 입니다.
💁♀️ 프리플라이트 요청(Preflight Request)에 대한 설명으로 옳은 것을 고르세요.
A. 응답 헤더의 Access-Control-Allow-Credentials로 출처가 허용되면 실제 요청을 보낸다.
B. POST 메서드로 사전 요청을 보내 해당 출처 리소스에 접근 권한이 있는지 확인한다.
C. 프리플라이트 요청으로 미리 접근 권한을 확인할 수 있다.
D. 요청을 두번 보내기 때문에 리소스 측면에서 비효율적이다.🔈 해설
정답 C
A. 응답 헤더의 Access-Control-Allow-Credentials가 아닌 Access-Control-Allow-Origin 입니다.
B. POST 메서드가 아닌 OPTIONS 메서드 입니다.
D. 프리플라이트 요청을 했을 때, 접근 권한이 없는 경우 CORS 에러가 나기 때문에 실제 요청을 불필요하게 보내지 않아도 됩니다.
💁♀️🙈 CORS 설정 방법에 대한 설명으로 옳지 않은 것을 고르세요.
A. Node.js에서 setHeader 메서드를 이용해 설정할 수 있다.
B. Node.js에서 writeHead 메서드를 이용해 설정할 수 있다.
C. Node.js에서 Access-Control-Allow-Origin에 출처를 설정해야 한다.
D. Express에서 cors 미들웨어를 이용해 설정할 수 있다.
E. Express에서 출처 접근 권한을 설정하려면 credentials를 설정해야 한다.🔈 해설
정답 E
Express에서 출처 접근 권한을 설정하려면 cors 미들웨어를 사용하면 됩니다.
세부적으로 출처를 설정해주기 위해서는 cors의 전달인자에 Configuration Options를 설정해야 합니다.
Configuration Options의 credentials가 아닌 origin을 설정합니다.
💁♀️ Express 미들웨어를 사용하는 상황으로 보기 어려운 것을 고르세요.
A. 모든 요청에 대해 url이나 메서드를 확인할 때
B. POST 요청 등에 포함된 body(payload)를 구조화할 때
C. 단순 요청 (Simple Request)이 필요할 때
D. 모든 요청/응답에 CORS 헤더를 붙여야 할 때
E. 요청 헤더에 사용자 인증 정보가 담겨있는지 확인할 때B.🔈 해설
정답 C
단순 요청(Simple Request)은 프리플라이트 요청(Preflight Request)을 생략하는 요청으로 Express 미들웨어와를 사용하는 상황으로 보기는 어렵습니다. 단순 요청은 만족시켜야 하는 조건들이 많습니다.
- GET, HEAD, POST 요청 중 하나여야 합니다.
- 자동으로 설정되는 헤더 외에, Accept, Accept-Language, Content-Language, Content-Type 헤더의 값만 수동으로 설정할 수 있습니다. Content-Type 헤더에는 application/x-www-form-urlencoded, multipart/form-data, text/plain 값만 허용됩니다.
💁♀️🙈 다음 Node.js 서버 코드에 대한 설명 중 옳지 않은 것을 고르세요.
const http = require('http'); const PORT = 4999; const ip = 'localhost'; const server = http.createServer((request, response) => { console.log( `http request method is ${request.method}, url is ${request.url}` ); response.writeHead(200, defaultCorsHeader); response.end('hello quizsets'); }); server.listen(PORT, ip, () => { console.log(`http server listen on ${ip}:${PORT}`); }); const defaultCorsHeader = { 'Access-Control-Allow-Origin': 'http://localhost:1234', 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type, Accept', 'Access-Control-Max-Age': 10 };
A. 클라이언트 http://localhost:1234에서 POST 요청을 보낼 시 CORS 에러가 발생하지 않는다.
B. 클라이언트 http://localhost:3000에서 POST 요청을 보낼 시 CORS 에러가 발생한다.
C. 서버에서 http://localhost:1234에 대하여 CORS를 허용하고 있다.
D. 서버에서 허용하는 메서드는 GET, POST, PUT, DELETE, OPTIONS이다.
E. request 객체에서 method, url을 사용할 수 없다.🔈 해설
정답 E
서버에서 요청(Request)를 처리할 때, 메서드와 url 관련된 작업을 할 것입니다.
그러기 위해서 Node.js에서는 request 객체에 method, url 같은 유용한 프로퍼티를 세팅해두었습니다.
💁♀️🙈 다음 Express 서버 코드에 대한 설명 중 옳지 않은 것을 고르세요.
const express = require('express') const app = express() const port = 3000 const logger1 = (req, res, next) => { console.log("logger1"); next(); } const logger2 = (req, res, next) => { console.log("logger2"); next(); } const codestates = (req, res) => { res.send('Hello CodeStates!'); } app.get('/', (req, res) => { res.send('Hello World!') }) app.use(logger1, logger2); app.get('/codestates', codestates); app.listen(port, () => { console.log(`Example app listening on port ${port}`) })
A. GET /요청을 서버에 보내면 'Hello World!'가 응답으로 온다.
B. GET /codestates요청을 서버에 보내면 'Hello CodeStates!'가 응답으로 온다.
C. GET /요청을 서버에 보내면 "logger1", "logger2"가 콘솔에 출력된다.
D. GET /codestates요청을 서버에 보내면 "logger1", "logger2"가 콘솔에 출력된다.
E. logger1, logger2는 미들웨어(middleware)다.🔈 해설
정답 C
app.use(logger1, logger2) 코드가 app.get('/', //생략) 보다 밑에 있기 때문에 미들웨어 적용이 되어있지 않습니다.
따라서 GET /요청을 서버에 보내면 "logger1", "logger2"가 콘솔에 출력되지 않습니다.
반면에, app.get('/codestates', codestates) 코드는 app.use(logger1, logger2)보다 아래에 있기 때문에 미들웨어 적용이 됩니다.
따라서 GET /codestates요청을 서버에 보내면 "logger1", "logger2"가 콘솔에 출력됩니다.
app.get('/', (req, res) => { res.send('Hello World!') }) app.use(logger1, logger2); app.get('/codestates', codestates);
💁♀️🙈 GET http://localhost:4000/flight/af6fa55c-da65-47dd-af23-578fdba40bed 요청을 보냈을 때 돌아오는 응답으로 옳은 것을 고르세요.
//App.js const express = require('express'); const app = express(); const port = 4000; const flightRouter = require('./flightRouter'); app.use('/flight', flightRouter) app.get('/', (req, res) => { res.send('Welcome, States Airline!'); }); app.listen(port, () => { console.log(`http://localhost:${port}`); }); //flightRouter.js const express = require('express'); const router = express.Router(); router.get('/', function(req, res) { res.send('항공편 목록') }); router.get('/:id', function(req, res) { res.send('항공편 id 조회') }); router.put('/:id', function(req, res) { res.send('항공편 수정') }); module.exports = router;
A. 'Welcome, States Airline!'
B. 'http://localhost:4000'
C. '항공편 목록'
D. '항공편 id 조회'
E. '항공편 수정'🔈 해설
정답 D
app.use와 express.Router를 활용하여 라우팅을 하고 있는 코드입니다. GET http://localhost:4000/flight/af6fa55c-da65-47dd-af23-578fdba40bed 요청을 보내면, '항공편 id 조회'가 응답으로 옵니다.
router.get('/:id', function(req, res) { res.send('항공편 id 조회') });
'코드스테이츠 > JavaScript' 카테고리의 다른 글
4.10 기술면접 준비 (0) 2023.04.10 4.6 Mini Node Server (0) 2023.04.07 3.29 [HTTP/네트워크] REST API (0) 2023.03.29 3.28 SSR vs CSR (0) 2023.03.28 3.28 브라우저의 작동원리 AJAX (0) 2023.03.28