일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- buildSrc
- 낙관적 락
- Dirty Checking
- 3-way handshaking
- java
- Kafka
- 자바
- MSA
- 자료구조
- 정규화
- 네트워크
- DB
- 스레드 풀
- Spring
- HTTP
- 갱신 이상
- 삭제 이상
- JPA
- 캐시 오염
- 삽입 이상
- 페이지네이션
- AWS
- gatway
- 데이터베이스
- null
- Redis
- well-know port
- Kotlin
- ocp
- 비관적 락
- Today
- Total
어 나 갱수.
[네트워크] HTTP는 기본 아니겠냐 ㅋㅋㅋㅋ 🤣 본문
HTTP(HyperText Transfer Protocol)
HTTP메시지에 모든 것을 전송할 수 있다.
- HTML, TEXT
- IMAGE, 파일, 음성, 영상
- JSON, XML
- 거의 모든 데이터를 주고 받을 수 있다.
- 서버 간에 데이터를 주고받을 때도 HTTP를 사용한다.
HTTP의 특징
- 클라이언트 서버 구조이다.
- 무상태 프로토콜, 비연결성
- HTTP 메시지
HTTP서버 구조
- Request, Response 구조
- 클라이언트는 서버로 요청을 보내고 응답을 대기한다.
- 서버는 클라이언트로부터 요청을 받고 응답을 한다.
무상태(Stateless) 프로토콜
- 서버가 클라이언트의 상태를 저장하지 않는다.
- 장점 : 서버 확장성 높음(Scale Out)
- 단점 : 클라이언트가 서버로 요청할 때마다 추가로 데이터를 같이 보내야 한다.
비연결성(Connectionless)
비연결성은 클라이언트와 서버가 한 번 연결을 맺은 후, 클 라이언트 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어 버리는 성질을 말합니다.
장점
HTTP 프로토콜은 왜 한 번 맺은 연결을 끊어버리는 걸까요?
HTTP는 인터넷상에서 불특정 다수의 통신 환경을 기반으로 설계되었습니다.
만약 서버에서 다수의 클라이언트와 연결을 계속 유지해야 한다면, 이에 따른 많은 리소스가 발생하게 됩니다.
따라서 연결을 유지하기 위한 리소스를 줄이면 더 많은 연결을 할 수 있으므로 비연결적인 특징을 갖습니다.
단점
이로 인한 단점도 존재한다.
서버는 클라이언트를 기억하고 있지 않으므로 동일한 클라이언트의 모든 요청에 대해, 항상 새로운 연결을 시도/해제의 과정을 거쳐야 하므로 오버헤드가 발생할 수 있다는 단점이 있습니다.
HTTP 메서드
주요 메서드
- GET : 리소스 조회
- POST : 요청 데이터 처리, 주로 등록에 사용
- PUT : 리소스를 대체, 해당 리소스가 없으면 생성
- PATCH : 리소스 부분 변경
- DELETE : 리소스 삭제
GET
- 리소스 조회
- 서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달
- 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않는다.
POST
- 요청 데이터 처리
- 메시지 바디를 통해 서버로 요청 데이터 전달
- 서버는 요청 데이터를 처리
- 메시지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다.
- 주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용
요청 데이터를 처리한다는 게 뭔 말이지???
- HTML 양식에 입력된 필드와 같은 데이터 블록을 데이터 처리 프로세스에 제공
- 게시판, 뉴스 그룹, 블로그 또는 유사한 기사 그룹에 메시지 게시
- 서버가 아직 식별하지 않은 새 리소스 생성
PUT
리소스를 대체
- 리소스가 있으면 대체
- 리소스가 없으면 생성
- 쉽게 이야기해서 덮어버림
리소스가 이미 있는 경우 1
위와 같이 서버에 이런 데이터가 있는 상태에서 PUT메서드로 요청을 보내게 된다면
위와 같이 데이터가 대체된다.
주의!!! - 리소스를 완전히 대체한다.
위 사진과 같이 서버에 있는 데이터와 다른 형태로 필드로 PUT요청을 보내게 되면
위 사진과 같이 username필드를 삭제하면서 리소스를 대체하게 된다.
PATCH
- put에서 리소스를 완전히 대체한다는 점을 보완하기 위한 메서드로 부분만 대체하는 메서드이다.
PATCH메서드를 사용해서 요청을 보내게 된다면 부분만 수정되기 때문에
리소스의 전체가 바뀌지 않고 age필드만 20에서 50으로 값이 대체되었다.
DELETE
- 리소스 제거
데이터를 삭제하는 것이기 때문에 DELETE메서드로 요청하게 되면 리소스가 제거된다.
HTTP 메서드의 속성
- 안전(Safe Methods)
- 멱등(Idempotent Methods)
- 캐시 가능(Cacheable Methods)
HTTP 메서드 비교
POST방식이 GET방식보다 보안 측면에서 더 좋다?
- GET과 비교해서 POST는 URL에 데이터의 정보가 들어있지 않음으로 조금 더 안전하다고 볼 수 있다.
GET방식이 POST방식보다 속도가 빠르다?
- GET은 캐싱을 하기 때문에 여러 변 요청 시 이미 저장된 데이터를 활용해서 반환하기 때문에 조금 더 빠를 수 있다.
HTTP 상태코드
2XX (Successful)
클라이언트의 요청을 성공적으로 처리
상태코드
- 200 OK : 서버가 요청을 제대로 처리했다는 의미
- 201 Created : 어떠한 생성 작업을 요청받았고, 생성 작업을 완료하였습니다.
- 202 Accepted : 요청은 받았지만, 아직 아무동작도 하지 않은 상태
- 204 No Content : 서버가 요청을 성공적으로 처리했지만 반환하는 콘텐츠가 없는 상태
- 205 Reset Content : 204와 동일하지만 새로고침 등을 통해 새로운 내용 등을 확인할 것을 추가로 의미
3XX (Redirection)
요청을 완료하기 위해 유저 에이전트의 추가 조치 필요
- 300 Multiple Choices
- 301 Moved Permanently
- 302 Found
- 303 See Other
- 304 Not Modified
- 307 Temporary Redirect 308 Permanent Redirect
4XX (Client Error)
클라이언트 오류
- 클라이언트의 요청에 잘못된 문법등으로 서버가 요청을 수행할 수 없음
- 오류의 원인이 클라이언트에 있음
- 중요! 클라이언트가 이미 잘못된 요청, 데이터를 보내고 있기 때문에, 똑같은 요청을 다시 보내도 또 실패함
상태코드
- 400 Bad Request : 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없다.
- 401 Unauthorized : 클라이언트가 해당 리소스에 대한 인증이 필요함
- 403 Forbidden :서버가 요청을 이해했지만 승인을 거부함
- 보통 인증 자격 증명은 있지만, 접근 권한이 없을 시 발생하는 오류이다.
- 404 Not Found : 요청 리소스를 찾을 수 없음
500 (Server Error)
서버 오류
- 서버 문제로 오류 발생
- 서버에 문제가 있기 때문에 재시도 하면 성공할 수도 있음
상태 코드
- 500 Internal Server Error : 서버 문제로 오류 발생, 애매하면 500 오류
- 503 Service Unavailable : 서비스 이용 불가
Reference
- https://velog.io/@yh20studio/CS-Http-Method-%EB%9E%80-GET-POST-PUT-DELETE
- https://zara49.tistory.com/220
- https://mihee0703.tistory.com/47
- https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-Stateful-Stateless-%EC%A0%95%EB%A6%AC
- https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC
'네트워크' 카테고리의 다른 글
[Web] 웹 소켓(Web Socket)이란? 😙 (0) | 2023.10.01 |
---|---|
[네트워크] CORS 너 뭐냐?? 🐥 (0) | 2023.08.04 |
[네트워크] Web Server와 WAS의 차이 🙏 (0) | 2023.08.03 |
[네트워크] HTTP 했으니까 덤으로 HTTPS 까지??? 😙 (1) | 2023.07.31 |
[네트워크] TCP와 UDP란? 🐝 (2) | 2023.07.29 |