클라이언트와 서버의 소통방법은 요청 메소드와 응답코드가 존재합니다.
컴퓨터 HTTP 통신에서 클라이언트와 서버는 각각 답장에 메소드와 응답 코드라는 도장을 찍어 보냅니다.
요청 메소드의 종류
예시) Java
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
// GET 요청
HttpRequest getRequest = HttpRequest.newBuilder()
.uri(new URI("https://www.example.com"))
.GET()
.build();
HttpResponse<String> getResponse = client.send(getRequest, HttpResponse.BodyHandlers.ofString());
System.out.println(getResponse.body());
// POST 요청
HttpRequest postRequest = HttpRequest.newBuilder()
.uri(new URI("https://www.example.com"))
.POST(HttpRequest.BodyPublishers.ofString("key=value"))
.build();
HttpResponse<String> postResponse = client.send(postRequest, HttpResponse.BodyHandlers.ofString());
System.out.println(postResponse.body());
// PUT 요청
HttpRequest putRequest = HttpRequest.newBuilder()
.uri(new URI("https://www.example.com"))
.PUT(HttpRequest.BodyPublishers.ofString("key=value"))
.build();
HttpResponse<String> putResponse = client.send(putRequest, HttpResponse.BodyHandlers.ofString());
System.out.println(putResponse.body());
// DELETE 요청
HttpRequest deleteRequest = HttpRequest.newBuilder()
.uri(new URI("https://www.example.com"))
.DELETE()
.build();
HttpResponse<String> deleteResponse = client.send(deleteRequest, HttpResponse.BodyHandlers.ofString());
System.out.println(deleteResponse.statusCode());
}
}
예시) Python
import requests
# GET 요청
response = requests.get('https://www.example.com')
print(response.text)
# POST 요청
response = requests.post('https://www.example.com', data = {'key':'value'})
print(response.text)
# PUT 요청
response = requests.put('https://www.example.com', data = {'key':'value'})
print(response.text)
# DELETE 요청
response = requests.delete('https://www.example.com')
print(response.status_code)
GET: 브라우저에서 웹사이트에 접속할 때 보내는 요청이며, 서버로부터 데이터를 가져오기 위해 사용합니다.
POST: 서버에 데이터를 저장될 자료를 보내고, 새 게시물을 작성할 때 사용합니다.
PUT: 특정 데이터 전체를 새로 저장하고, 게시물을 수정할 때 사용합니다.
DELETE: 서버의 특정 데이터를 삭제할 때 사용합니다.
HEAD: 서버 리소스의 헤더(메타 데이터)를 가져옵니다.
OPTIONS: 리소스가 지원하고 있는 메소드를 허용하는지 물어보기 위해 사용합니다.
PATCH: 리소스의 일부분을 수정합니다.
CONNECT: 프록시 동작의 터널 접속을 변경합니다.
응답 코드의 종류
HTTP 응답 코드는 요청이 성공적으로 완료되었는지 알려주고,
100의 자리 숫자로 각각의 요청이 어떤 결과물을 반환했는지 확인합니다.
정보 응답 (Information responses: 100번대):
서버가 요청을 받았으며, 서버에 연결된 클라이언트는 작업을 계속 진행하라는 의미입니다.
성공 응답 (Successful responses: 200번대):
요청이 성공적으로 처리되었습니다.
[200]: 요청이 성공적으로 처리완료.
[201]: 요청이 성공적 처리되었고 그 결과 새로운 리소스 생성완료.
[204]: 성공적으로 처리지만, 답장에 적을 내용 없음.
[206]: 요청에서 지정한 대로, 일부 콘텐츠만 보냄.
리다이렉션 응답 (Redirection messages: 300번대):
클라이언트가 요청한 리소스가 다른 URI에 있음을 알려줍니다.
클라이언트 에러 응답 (Client error responses: 400번대):
클라이언트의 요청이 잘못되었거나 처리할 수 없음을 나타냅니다.
[400]: 서버가 요청을 이해하지 못했음.
[401]: Unauthorized 로그인이 필요한 상황에 로그인이 되어있지 않음.
[403]: Forbidden 로그인되어 있지만, 요청을 보낼 권한이 없음.
[404]: Not Found 데이터가 없음 또는 URL이 잘못되어 있을 때 나타남.
서버 에러 응답 (Server error responses: 500번대):
서버가 유효한 요청을 처리하는 데 실패했음을 나타냅니다.
[500]: 서버 내부에 오류 발생.
[502]: 서버 과부하 또는 기타 네트워크 통신 문제 발생.