Status Code 405 Là Gì? Nguyên Nhân Và Cách Khắc Phục Lỗi 405 Method Not Allowed

status code 405 là gì

Khi phát triển website hoặc làm việc với API, Đây là mã trạng thái HTTP cho biết phương thức yêu cầu (HTTP method) mà client gửi đến server không được hỗ trợ hoặc không được phép cho tài nguyên cụ thể đó. Lỗi 405 Method Not Allowed thường xuất hiện khi bạn gửi yêu cầu POST đến một endpoint chỉ chấp nhận GET, hoặc ngược lại. Bài viết này sẽ giải thích chi tiết về status code 405 là gì, nguyên nhân phổ biến, cách khắc phục và những điều cần lưu ý khi xử lý lỗi này.

Status Code 405 Là Gì? Định Nghĩa Chi Tiết

status code 405 là gì - Hình 5

Status code 405 (Method Not Allowed) là mã phản hồi HTTP thuộc nhóm 4xx (client error). Nó cho biết máy chủ xác định được yêu cầu từ client nhưng phương thức HTTP được sử dụng (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS…) không được phép hoặc không được hỗ trợ cho tài nguyên được yêu cầu. Server bắt buộc phải kèm theo header Allow trong phản hồi, liệt kê các phương thức được chấp nhận.

Đặc điểm chính của mã 405

    • Thuộc nhóm lỗi client (4xx) – thường do client gửi sai phương thức.
    • Server hiểu rõ yêu cầu nhưng từ chối vì phương thức không phù hợp.
    • Phản hồi phải có header Allow chứa danh sách phương thức hợp lệ.
    • Không giống 404 (Not Found) – server vẫn nhận diện được tài nguyên.

    Phân biệt 405 với các mã lỗi 4xx khác

    Mã lỗi Ý nghĩa Nguyên nhân chính
    400 Bad Request Yêu cầu sai cú pháp hoặc không hợp lệ Thiếu tham số, định dạng JSON sai
    401 Unauthorized Chưa xác thực Thiếu token, API key
    403 Forbidden Không có quyền truy cập Token hết hạn, role không đủ
    405 Method Not Allowed Phương thức HTTP không được phép Gửi POST thay vì GET, DELETE đến endpoint chỉ cho phép GET
    404 Not Found Tài nguyên không tồn tại URL sai, route chưa định nghĩa

    Nguyên Nhân Gây Ra Lỗi 405 Method Not Allowed

    Hiểu rõ status code 405 là gì sẽ giúp bạn nhanh chóng xác định nguyên nhân. Ví dụ: một form đăng nhập chỉ chấp nhận POST, nhưng bạn cố tình gửi yêu cầu GET đến URL đó. Hoặc một API lấy dữ liệu chỉ cho GET, nhưng bạn gửi DELETE.

    REST API cấu hình router không đúng

    Khi xây dựng API với Node.js (Express), PHP (Laravel), Python (Django/Flask), nếu bạn chỉ định nghĩa route cho một phương thức cụ thể, các phương thức khác sẽ trả về 405.

    Trùng lặp route hoặc thiếu định nghĩa

    Một số framework tự động trả về 404 thay vì 405 khi route tồn tại nhưng không match method. Tuy nhiên, nếu cấu hình đúng, server sẽ trả 405 kèm header Allow.

    Middleware hoặc bảo mật chặn phương thức

    Các tường lửa (WAF), proxy (Nginx, Apache) hoặc middleware có thể chặn một số phương thức HTTP (ví dụ: cấm DELETE vì lý do bảo mật) và trả về 405.

    Yêu cầu OPTIONS không được xử lý

    Trong CORS (Cross-Origin Resource Sharing), trình duyệt gửi preflight request bằng phương thức OPTIONS. Nếu server không xử lý OPTIONS, bạn sẽ nhận 405.

    Lợi ích Khi Hiểu Rõ Về Status Code 405

    status code 405 là gì - Hình 4

    Nắm vững status code 405 là gì mang lại nhiều lợi ích thiết thực cho lập trình viên và quản trị hệ thống:

    • Debug nhanh hơn: Không lãng phí thời gian kiểm tra sai endpoint hay lỗi xác thực.
    • Tối ưu bảo mật: Hạn chế các phương thức không cần thiết giúp giảm bề mặt tấn công.
    • Xây dựng API chuẩn REST: Đảm bảo tuân thủ nguyên tắc RESTful, cải thiện trải nghiệm người dùng.
    • Giảm lỗi phía client: Xác định nhanh lỗi gọi API sai method.

    So Sánh 405 Với Một Số Mã Lỗi Phương Thức Khác

    Mã lỗi Mô tả Khi nào xảy ra
    405 Method Not Allowed Phương thức không được phép Endpoint tồn tại nhưng method sai
    501 Not Implemented Server không hỗ trợ phương thức Server chưa cài đặt method đó (ví dụ: PATCH chưa được code)
    505 HTTP Version Not Supported Phiên bản HTTP không hỗ trợ Client gửi HTTP/3 đến server chỉ hỗ trợ HTTP/1.1

    Trong khi 501 nói server không hiểu phương thức, 405 nói server hiểu nhưng không cho phép trên tài nguyên đó.

    Hướng Dẫn Khắc Phục Lỗi Status Code 405

    status code 405 là gì - Hình 3

    Sau khi hiểu status code 405 là gì, bạn cần biết cách xử lý. Kiểm tra phương thức HTTP mà client gửi

    Dùng công cụ như Postman, cURL hoặc Network tab trong DevTools để xem request method. Đảm bảo bạn đang gửi đúng method mà API yêu cầu.

    2. Đọc header Allow từ server

    Khi nhận 405, phản hồi sẽ có header Allow. Ví dụ: Allow: GET, HEAD. Điều này cho biết bạn chỉ được dùng GET hoặc HEAD cho endpoint đó.

    3. Kiểm tra cấu hình router backend

    Trên Node.js (Express):

    • Nếu bạn dùng app.get('/api/resource', handler), yêu cầu POST sẽ trả về 405.
    • Sử dụng app.all() hoặc app.use() để xử lý nhiều method.

    Trên Laravel (PHP):

    • Route::get(…) chỉ chấp nhận GET. Để hỗ trợ thêm method, dùng Route::match([‘GET’, ‘POST’],…).

    4. Cấu hình CORS hỗ trợ OPTIONS

    Nếu lỗi xảy ra khi gọi API từ frontend, bạn cần đảm bảo server xử lý preflight OPTIONS request đúng cách. Thêm middleware CORS cho phép OPTIONS.

    5. Kiểm tra proxy, tường lửa (Nginx, Apache)

    Trong Nginx, nếu không có cấu hình limit_except, các method bị chặn sẽ trả 405. Cần thêm dòng nhằm cho phép các method cần thiết.

    6. Sử dụng đúng phương thức trong code client

    Kiểm tra kỹ method trong fetch, axios, ajax… Đôi khi chỉ nhầm lẫn giữa POST và GET.

    Sai Lầm Thường Gặp Khi Xử Lý Lỗi 405 Và Cách Tránh

    Nhầm lẫn 405 với 404

    Nhiều lập trình viên non kinh nghiệm cho rằng endpoint không tồn tại khi thấy error, nhưng thực tế server trả 405 vì method sai. Cách tránh: luôn kiểm tra mã trạng thái và header Allow.

    Không kiểm tra preflight OPTIONS request

    Trong quá trình phát triển React/Vue gọi API, bạn bỏ qua bước CORS và nghĩ rằng lỗi 405 là do server sai. Thực tế server cần hỗ trợ OPTIONS. Cách tránh: cấu hình CORS middleware ở backend.

    Không update API documentation

    Khi thay đổi phương thức cho endpoint (ví dụ từ GET sang POST), không cập nhật tài liệu dẫn đến client gọi sai. Cách tránh: đồng bộ code và tài liệu (OpenAPI/Swagger).

    Chặn tất cả method không cần thiết một cách cứng nhắc

    Một số framework tự động chặn PUT, DELETE vì lý do bảo mật, nhưng lại cần cho RESTful API. Cách tránh: chỉ chặn method trên các route cụ thể, không chặn toàn bộ server.

    Lưu Ý Quan Trọng Về Status Code 405

    status code 405 là gì - Hình 2
    • Bắt buộc kèm header Allow: Theo chuẩn HTTP/1.1 (RFC 7231), server phải trả về header Allow trong response 405. Nếu không có, đó là lỗi server.
    • Không nhầm với 404: 405 yêu cầu tài nguyên tồn tại, chỉ method sai. 404 là tài nguyên không tồn tại.
    • Liên quan đến RESTful design: API thiết kế chuẩn REST sẽ sử dụng đúng method cho từng hành động (GET để đọc, POST để tạo, PUT/PATCH để cập nhật, DELETE để xóa). Nếu dùng sai, client nhận 405.
    • Có thể do CDN hoặc proxy cache: Một số CDN có thể trả 405 nếu họ không hỗ trợ method lạ. Kiểm tra cấu hình upstream.
    • Xử lý trong code backend: Có thể ghi log lại request method, headers để debug nhanh.

Câu Hỏi Thường Gặp Về Status Code 405 (FAQ)

Lỗi 405 khác gì với 403?

403 Forbidden cho biết client đã xác thực nhưng không có quyền truy cập tài nguyên. 405 Method Not Allowed cho biết tài nguyên tồn tại nhưng phương thức không được phép (bất kể quyền).

Có phải lúc nào server cũng trả 405 khi method sai?

Không. Một số framework trả 404 khi route không match method (vì coi như route không tồn tại). Tuy nhiên, theo chuẩn, server nên trả 405 và kèm Allow header.

Làm sao để test lỗi 405?

Dùng cURL: curl -X POST https://api.example.com/resource nếu endpoint chỉ cho phép GET. Bạn sẽ thấy response 405.

Lỗi 405 có làm ảnh hưởng SEO không?

Nếu xuất hiện trên trang web public (ví dụ: form đăng nhập bị 405), người dùng không thể hoàn thành hành động, ảnh hưởng trải nghiệm và indirect SEO. Tuy nhiên, lỗi này thường xảy ra với API hơn là trang HTML tĩnh.

Có cần trả về body trong response 405 không?

Có thể có body để mô tả lỗi (JSON, HTML) nhưng không bắt buộc. Header Allow là quan trọng nhất.

Khi nào nên trả 405 thay vì 404?

Nếu tài nguyên tồn tại và bạn muốn client biết rằng method không được phép, hãy trả 405. Nếu tài nguyên không tồn tại, trả 404.

Làm sao để khắc phục lỗi 405 trong WordPress?

WordPress thường trả 405 khi gửi yêu cầu POST đến admin-ajax.php mà không có action phù hợp. Kiểm tra nonce, action hook và quyền user. Cũng có thể do plugin bảo mật chặn method.

Kết Luận

status code 405 là gì - Hình 1

Status code 405 là gì? Đó là mã lỗi HTTP báo hiệu phương thức không được phép trên tài nguyên yêu cầu. Hiểu rõ nguyên nhân (sai method, cấu hình router, CORS, bảo mật) và cách khắc phục (kiểm tra Allow header, sửa router, cấu hình CORS) sẽ giúp bạn xử lý nhanh chóng lỗi này.

Việc nắm vững status code 405 không chỉ giúp bạn debug API hiệu quả mà còn xây dựng hệ thống RESTful chuẩn chỉnh, an toàn hơn. Khi gặp lỗi 405, đừng vội kết luận server hỏng hóc – hãy đọc header Allow và điều chỉnh phương thức yêu cầu cho phù hợp. Đây là một trong những kỹ năng cơ bản mà bất kỳ lập trình viên web, backend, fullstack hay QA nào cũng cần thành thạo.

Hy vọng bài viết đã giải đáp toàn diện thắc mắc của bạn về mã lỗi 405 Method Not Allowed.

Bài viết cùng chủ đề:

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *