게으른 개발자의 끄적거림

HTTP 405error란? (해결 방법)

끄적잉 2024. 6. 13. 22:50
반응형

HTTP 405error란? (해결 방법) HTTP 405 Method Not Allowed

 


### HTTP 상태 코드 개요

HTTP 상태 코드는 웹 서버가 클라이언트의 요청을 처리하는 데 있어 발생하는 결과를 나타내는 3자리 숫자입니다. 이 상태 코드는 클라이언트가 요청한 작업의 성공 여부 및 추가적인 정보를 제공하며, 1xx (정보), 2xx (성공), 3xx (리다이렉션), 4xx (클라이언트 오류), 5xx (서버 오류)로 분류됩니다. 

 


### HTTP 405 Method Not Allowed 에러란?

HTTP 405 Method Not Allowed 에러는 클라이언트가 웹 서버에 요청한 HTTP 메소드가 해당 리소스에서 허용되지 않을 때 발생하는 클라이언트 오류 상태 코드입니다. 이는 서버가 특정 리소스에 대해 해당 메소드를 지원하지 않음을 나타냅니다. 예를 들어, 서버가 특정 리소스에 대해 `POST` 요청을 허용하지 않는데 클라이언트가 `POST` 요청을 보내면 이 에러가 발생합니다.

 


### 주요 원인

1. **잘못된 HTTP 메소드 사용**: 서버가 특정 리소스에 대해 허용하지 않는 HTTP 메소드를 클라이언트가 사용한 경우입니다. 예를 들어, 데이터 조회는 `GET` 메소드를 사용해야 하는데 `POST` 메소드를 사용하면 이 에러가 발생합니다.
2. **서버 설정 오류**: 서버의 설정 파일이나 애플리케이션 코드에서 특정 메소드에 대한 허용을 잘못 구성한 경우입니다.
3. **API 엔드포인트 문제**: API 서버에서 특정 엔드포인트가 특정 메소드를 허용하지 않도록 구성된 경우입니다.
4. **URL 오류**: 클라이언트가 잘못된 URL로 요청을 보내는 경우입니다. 예를 들어, `PUT` 메소드는 특정 URL에 대해서만 허용되는데, 잘못된 URL로 `PUT` 요청을 보냈을 때 발생할 수 있습니다.

 


### HTTP 메소드

HTTP 메소드는 클라이언트가 서버에 요청하는 동작을 정의합니다. 주요 HTTP 메소드는 다음과 같습니다:

- **GET**: 서버에서 리소스를 가져옵니다.
- **POST**: 서버에 데이터를 전송하여 새로운 리소스를 생성합니다.
- **PUT**: 서버의 리소스를 업데이트합니다.
- **DELETE**: 서버의 리소스를 삭제합니다.
- **PATCH**: 서버의 리소스를 부분적으로 업데이트합니다.
- **OPTIONS**: 서버가 지원하는 메소드 목록을 요청합니다.
- **HEAD**: 서버에서 리소스의 헤더 정보만 가져옵니다.

 


### HTTP 405 에러 발생 예시

```http
POST /api/users/123 HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 50

{
  "name": "John Doe",
  "email": "john@example.com"
}
```

위 요청이 `POST` 메소드를 지원하지 않는 `/api/users/123` 엔드포인트로 보내지면 서버는 405 에러를 반환할 수 있습니다.

 

반응형


### HTTP 405 에러 해결 방법

#### 1. HTTP 메소드 확인 및 수정

클라이언트 측에서 요청을 보낼 때 올바른 HTTP 메소드를 사용하고 있는지 확인해야 합니다. 예를 들어, 리소스를 조회하려면 `GET` 메소드를, 새로운 리소스를 생성하려면 `POST` 메소드를 사용해야 합니다.

```javascript
fetch('/api/users/123', {
  method: 'GET', // POST가 아닌 GET 메소드 사용
  headers: {
    'Content-Type': 'application/json'
  }
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
```

#### 2. 서버 설정 검토 및 수정

서버의 설정 파일이나 코드에서 특정 메소드를 허용하도록 수정해야 할 수 있습니다. 예를 들어, Apache 서버에서는 `.htaccess` 파일이나 서버 설정 파일을 검토해야 합니다.

```apache
<Directory "/var/www/html/api">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
    <LimitExcept GET POST>
        Deny from all
    </LimitExcept>
</Directory>
```

위 설정은 `GET` 및 `POST` 메소드를 제외한 모든 메소드를 차단합니다. 필요에 따라 허용하는 메소드를 추가하거나 수정해야 합니다.

#### 3. 애플리케이션 코드 수정

웹 애플리케이션의 라우팅 설정에서 특정 HTTP 메소드를 처리하도록 수정할 수 있습니다. 예를 들어, Express.js를 사용하는 Node.js 애플리케이션에서는 다음과 같이 라우트를 설정할 수 있습니다.

```javascript
const express = require('express');
const app = express();

app.get('/api/users/:id', (req, res) => {
    // 사용자 정보 조회 로직
});

app.post('/api/users', (req, res) => {
    // 새로운 사용자 생성 로직
});

app.put('/api/users/:id', (req, res) => {
    // 사용자 정보 업데이트 로직
});

app.delete('/api/users/:id', (req, res) => {
    // 사용자 삭제 로직
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});
```

위 예시는 `GET`, `POST`, `PUT`, `DELETE` 메소드에 대해 각각의 엔드포인트를 설정하는 방법을 보여줍니다.

 


#### 4. CORS 정책 검토

교차 출처 리소스 공유(CORS) 정책 문제로 인해 405 에러가 발생할 수도 있습니다. 서버가 클라이언트의 도메인에서 오는 요청을 허용하도록 CORS 설정을 수정해야 합니다.

```javascript
const express = require('express');
const cors = require('cors');
const app = express();

app.use(cors({
    origin: 'http://example.com',
    methods: ['GET', 'POST', 'PUT', 'DELETE']
}));

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});
```

위 설정은 `http://example.com` 도메인에서 오는 모든 HTTP 메소드를 허용합니다.

 

 


#### 5. URL 및 엔드포인트 검토

클라이언트가 올바른 URL로 요청을 보내고 있는지 확인해야 합니다. 잘못된 URL로 요청을 보내면 405 에러가 발생할 수 있습니다.

```javascript
fetch('/api/users', {
  method: 'POST', // 리소스 생성
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    name: 'John Doe',
    email: 'john@example.com'
  })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
```

위 예시는 `/api/users` 엔드포인트에 `POST` 요청을 보내어 새로운 사용자를 생성하는 예시입니다.

 


### 결론

HTTP 405 Method Not Allowed 에러는 클라이언트가 서버에 허용되지 않는 HTTP 메소드로 요청을 보낼 때 발생합니다. 이를 해결하기 위해 클라이언트와 서버의 설정 및 코드를 검토하고 수정해야 합니다. 클라이언트는 올바른 HTTP 메소드를 사용하고 있는지 확인하고, 서버는 해당 메소드를 허용하도록 설정을 수정해야 합니다. 또한, CORS 정책 및 URL의 정확성도 확인하여 문제를 해결할 수 있습니다. 이러한 점검 과정을 통해 HTTP 405 에러를 효과적으로 해결할 수 있습니다.

반응형