[8일차_02] 웹서버 만들기 및 HTTP 상태코드
웹서버 동작 원리 이해를 위한 nc 명령어를 통한 이해
- nc 명령어
- TCP 또는 UDP 프로토콜을 사용하는 네트워크 환경에서 데이터를 읽고 쓰는 간단한 프로그램.
- 일반적으로 상대 서버의 포트가 열렸는지 확인하거나, 직접 서버가 되어 원격 서버에서(클라이언트) 접속이 가능한지 확인하는 용도로 사용한다.
웹서버 만들기
1. 먼저 nc를 이용해 듣고있는 서버를 만든다.
- nc -l 8000
- 포트 8000에서 새 연결을 수신하도록 nc로 지시하여 웹 서버를 실행한다.
- nc -l: Listen 모드로 포트 띄움
2. 크롬, curl을 이용해 웹 브라우저에 접속
- curl localhost:8000/index.html
- http://172.23.112.128:8000
- IP주소는 명령프롬포트에서 multipass list를 이용해 확인
3. 서버에 응답을 입력
- get과 path를 이용해 클라이언트에게 내용을 보낸다
- 서버가 http/1.1로 응답함 - 그럼 클라이언트에 내용이 나온다.
4. 파일을 다 보냈다는 시그널이 필요 안그럼 클라이언트에서는 계속 로딩 하고 있는다
- ctrl + c를 이용해서 종료한다.
- 브라우저의 주요 기능은 사용자가 선택한 자원을 서버에 요청하고 브라우저에 표시하는 것이다
HTTP의 메소드
- Create - POST: 주로 새로운 리소스를 생성(create)할 때 사용
- Read - GET: 데이터를 읽거나(Read) 검색(Retrieve)할 때에 사용되는 메소드
- Update - PUT(전체): 리소스를 생성 / 업데이트하기 위해 서버로 데이터를 보내는 데 사용
- Delete – DELETE: 지정된 리소스를 삭제
- HEAD: GET 메서드의 요청과 동일한 응답을 요구하지만, 응답 본문을 포함하지 않는다.
- CONNECT: 목적 리소스로 식별되는 서버로의 터널을 맺는다.
- OPTIONS: 목적 리소스의 통신을 설정하는 데 쓰인다.
- PATCH: 리소스의 부분만을 수정하는 데 쓰인다.
● POST와 PUT의 차이점을 설명
POST는 새로운 데이터를 계속 생성하기 때문에 요청시마다 데이터를 생성하지만, PUT은 사용자가 데이터를 지정하고 수정하는 것이기 때문에 같은 요청을 계속하더라도 데이터가 계속 생성되지는 않는다
● POST 메서드는 멱등성을 보장하지 않는다.
멱등성이란, 동일한 요청을 여러 번 수행하더라도 결과가 항상 동일하게 나오는 성질을 의미다. 예를 들어 GET 메서드는 서버의 상태나 데이터를 변경하지 않고 단순히 데이터를 조회하는 역할을 하기 때문에 멱등성을 보장한다.
하지만 POST 메서드는 서버의 상태나 데이터를 변경할 수 있는 역할을 하기 때문에 멱등성을 보장하지 않는다. 같은 요청을 여러 번 수행하면, 데이터가 중복으로 생성되거나 수정될 수 있다.
HTTP 상태 코드
100번대 상태코드
그룹: 정보응답
설명: 상태가 괜찮으며 클라이언트가 계속해서 요청하거나 요청이 완료된 경우에는 무시해도 된다는 정보를 알려준다
- 100: Continue
- 클라이언트가 어떤 것을 요청했을 때 아직까지는 요청이 상태가 괜찮다는 것을 알려준다.
- 102: Processing
- 서버가 요청을 수신하였고, 처리중이므로 아직 제대로 된 응답을 줄 수 없음을 나타낸다.
200번대 상태코드
그룹: 성공 응답
- 200: OK
- 요청이 성공적으로 완료되었음을 알린다.
- 성공의 의미는 HTTP 메소드에 따라 달라진다.
- 201: Created
- 요청이 성공적이었으며, 그 결과로 새로운 리소스가 생성되었음을 알려준다.
- 204: No Content
- 요청을 문제없이 처리했지만, 클라이언트가 요청한 데이터가 없음을 알려준다.
300번대 상태코드
그룹: 리다이렉션 메시지
- 301: Moved Permanently
- 클라이언트가 요청한 리소스는 다른 곳으로 이전하였으니 다른 URL을 이용하도록 Redirect.
- 302: Found
- 클라이언트가 요청한 리소스는 임시로 다른 곳으로 이전하였음을 알린다.
- 303: See Other
- 302와 유사하지만, 오직 GET 요청에서만 사용할 수 있는 응답 코드.
- 307: Temporary Redirect
- 임시적인 리다이렉트. 302 Found와 동일한 의미이지만 사용자 에이전트가 사용된 HTTP 메소드를 변경하지 말아야한다. 예를 들면 POST로 첫 요청이 전송되었다면, 그 다음 요청도 POST여야 한다.
- 308: Permanent Redirect
- 영구적인 리다이렉트. 301 Moved Permanently와 동일한 의미를 지니며, 307 Temporary Redirect와 마찬가지로 클라이언트가 이전 메소드와 동일한 메소드를 사용해야 한다.
400번대 상태코드
그룹: 클라이언트 오류 응답
- 400: Bad Request
- 클라이언트측의 잘못된 문법(query 혹은 API)으로 인해 서버가 요청을 이해할 수 없음을 나타낸다.
- 401: Unauthorized
- 비록 HTTP 표준에서는 "미승인(unauthorized)"를 명확히 하고 있지만, 의미상 이 응답은 "비인증(unauthenticated)"을 의미한다. 클라이언트는 요청한 응답을 받기 위해서는 반드시 스스로를 인증해야 한다.
- 대표적인 예시로 회원제인 사이트에서 로그인을 하지 않고, 로그인이 필요한 리소스에 접속을 요청할 때를 들 수 있다.
- 403: Forbidden
- 클라이언트가 요청한 리소스에 접근할 권한이 없음을 나타낸다. 401 Unauthorized와 다른 점은, 서버는 클라이언트가 누구인지 알고 있다는 점이다.
- 인증된 사용자이다. 예시로 회원제 사이트에서 로그인을 했음에도 권한이 주어지지 않은 리소스에 접근을 요청할 때이다.
- 404: Not Found
- 웹에서 가장 자주 보이기에 가장 유명한 코드이다. 클라이언트가 요청한 리소스를 서버가 찾을 수 없음을 나타낸다.
- 브라우저에서는 알려지지 않은 URL을 의미한다. 이것은 API에서 종점은 적절하지만 리소스 자체는 존재하지 않음을 의미할 수도 있으며, 또 서버들은 인증받지 않은 클라이언트로부터 리소스를 숨기기 위하여 이 응답을 403 대신에 전송할 수도 있다.
- 405: Method Not Allowed
- 해당 URL에 한해서, 쓰거나 삭제하는 기능이 허용되지 않음을 나타낸다.
- 409: Conflict
- 클라이언트가 만들고자 하는 리소스가 이미 존재하거나, 충돌이 날 때 사용한다.
500번대 상태코드
그룹: 서버 오류 응답
설명: 처리할 수 없는 내부 오류가 발생했다는 의미다
최대한 피해야하는 오류이다.
- 500: Internal Server Eror
- 서버 내부에서 어떠한 문제가 발생해서 해당 요청을 처리할 수 없을 때 사용된다.
- 502: Bad Gateway
- 중간에 있는 서버가 클라이언트의 요청을 받아 처리해야할 때, 어떻게 처리하는지 모를 때를 나타낸다.
- 503: Service Unavailable
- 서버가 아직 준비가 되지 않았을 때, 이 URL의 특정한 요청을 처리할 준비가 되지 않았을 때를 나타낸다.
- 주 원인은 보통 유지보수를 위해 작동을 중단하거나, 서버에 과부하가 걸렸을 때이다.
=====================================================
참고 자료
세부적인 상대코드 좀 더 가시적
https://velog.io/@dev-joon/HTTP-Status-Code-%EC%A0%95%EB%A6%AC
HTTP Status Code와 Request Method와의 접목
자주 쓰이는 HTTP Status Code들과 Request Method들을 묶어서 봐보자
velog.io
https://velog.io/@yh20studio/CS-Http-Method-%EB%9E%80-GET-POST-PUT-DELETE
Http Method 란? (GET, POST, PUT, DELETE)
평소에 코딩을 하면서 서버와 클라이언트가 소통을 하기 위해서 보통 Http를 이용을 하게 되었습니다. 그런데 GET, POST, PUT, DELETE 등 여러가지의 Http Method 가 존재하는데 명확하게 사용하고 있을까?
velog.io
https://jameshfisher.com/2018/12/31/how-to-make-a-webserver-with-netcat-nc/
How to make a webserver with netcat (nc)
The netcat tool nc can operate as a TCP client. Because HTTP works over TCP, nc can be used as an HTTP server! Because nc is a UNIX tool, we can use it to make custom web servers: servers which return any HTTP headers you want, servers which return the res
jameshfisher.com