HTTP / HTTPS
HTTP vs HTTPS
| 항목 |
HTTP |
HTTPS |
| 포트 |
80 |
443 |
| 암호화 |
없음 |
TLS로 암호화 |
| 인증서 |
불필요 |
SSL/TLS 인증서 필요 |
| 속도 |
빠름 |
미세하게 느림 (핸드셰이크) |
| SEO |
불리 |
유리 |
HTTP 메서드
| 메서드 |
용도 |
멱등성 |
GET |
리소스 조회 |
O |
POST |
리소스 생성 |
X |
PUT |
리소스 전체 수정 |
O |
PATCH |
리소스 부분 수정 |
X |
DELETE |
리소스 삭제 |
O |
HTTP 상태 코드
| 범위 |
의미 |
주요 코드 |
| 2xx |
성공 |
200 OK, 201 Created, 204 No Content |
| 3xx |
리다이렉트 |
301 Moved, 302 Found, 304 Not Modified |
| 4xx |
클라이언트 오류 |
400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 409 Conflict, 422 Unprocessable |
| 5xx |
서버 오류 |
500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable |
HTTP 헤더
요청 헤더
| 헤더 |
설명 |
Authorization |
인증 토큰 (Bearer <token>) |
Content-Type |
요청 바디 타입 (application/json) |
Accept |
응답 받을 타입 |
Cookie |
쿠키 전송 |
Origin |
요청 출처 (CORS) |
응답 헤더
| 헤더 |
설명 |
Content-Type |
응답 바디 타입 |
Set-Cookie |
쿠키 설정 |
Access-Control-Allow-Origin |
CORS 허용 출처 |
Cache-Control |
캐싱 정책 |
Location |
리다이렉트 대상 URL |
CORS
브라우저가 다른 출처의 리소스 요청을 차단하는 보안 정책.
출처(Origin) = 프로토콜 + 도메인 + 포트
https://api.example.com:443 ≠ https://example.com:443 → 다른 출처
서버 설정 (Node.js/Express)
app.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', 'https://example.com')
res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE')
res.setHeader('Access-Control-Allow-Headers', 'Content-Type,Authorization')
next()
})
HTTP 버전 비교
| 항목 |
HTTP/1.1 |
HTTP/2 |
HTTP/3 |
| 프로토콜 |
TCP |
TCP |
QUIC (UDP 기반) |
| 멀티플렉싱 |
X |
O |
O |
| 헤더 압축 |
X |
HPACK |
QPACK |
| 연결 수 |
도메인당 6개 |
1개 |
1개 |
| 기본 암호화 |
선택 |
사실상 필수 |
필수 |
메모