Bạn đang cố gắng treo một bức tranh lên tường. Bạn có một chiếc tua vít, nhưng thứ bạn thực sự cần là một chiếc búa. Dù bạn cố gắng đến đâu, chiếc tua vít đó cũng không thể đóng được chiếc đinh vào tường. Công cụ bạn đang sử dụng không phù hợp với nhiệm vụ bạn đang cố gắng hoàn thành.
Đây chính là tình huống được ghi lại bởi một trong những mã lỗi cụ thể và hữu ích nhất của HTTP: 405 Method Not Allowed.
Không giống như các lỗi chung chung hơn như 404 Not Found (nghĩa là "Tôi không tìm thấy thứ bạn đang tìm") hoặc 400 Bad Request (nghĩa là "Tôi không hiểu bạn đang nói gì"), lỗi 405 cực kỳ chính xác. Nó có nghĩa là: "Tôi đã tìm thấy tài nguyên bạn đang tìm, nhưng bạn đang sử dụng phương thức HTTP sai để tương tác với nó."
Đó là cách máy chủ nói với bạn: "Tôi biết /api/users là gì, nhưng bạn không thể XÓA nó. Hãy thử sử dụng GET thay vì."
Nếu bạn là nhà phát triển làm việc với các API RESTful, việc hiểu mã trạng thái 405 là rất quan trọng để xây dựng và sử dụng API một cách chính xác.
Trong bài đăng blog chi tiết này, chúng ta sẽ khám phá mọi thứ bạn cần biết về trạng thái 405 Method Not Allowed, từ ý nghĩa, lý do xảy ra, các tình huống phổ biến, cách khắc phục và các phương pháp hay nhất để xử lý nó một cách linh hoạt.
Tải xuống ứng dụng
Bây giờ, hãy cùng khám phá mục đích, cơ chế và ý nghĩa thực tế của mã trạng thái HTTP 405 Method Not Allowed.
Vấn đề: Các phương thức HTTP và thiết kế RESTful
Để hiểu 405, chúng ta cần nhanh chóng xem lại cách hoạt động của các API RESTful. Trong thiết kế RESTful, cùng một URL có thể hoạt động khác nhau tùy thuộc vào phương thức HTTP (động từ) bạn sử dụng:
GET /api/users- Truy xuất danh sách người dùngPOST /api/users- Tạo người dùng mớiPUT /api/users/123- Cập nhật người dùng 123 (thay thế hoàn toàn)PATCH /api/users/123- Cập nhật một phần người dùng 123DELETE /api/users/123- Xóa người dùng 123
Lỗi 405 xảy ra khi bạn cố gắng sử dụng một phương thức mà máy chủ chưa triển khai cho điểm cuối cụ thể đó. Ví dụ, việc cố gắng POST tới /api/users/123 (thường chỉ hỗ trợ GET, PUT, PATCH, DELETE) có thể sẽ trả về 405.
HTTP 405 Method Not Allowed thực sự có nghĩa là gì?
Mã trạng thái 405 Method Not Allowed cho biết rằng máy chủ biết tài nguyên đích (URL bạn đã yêu cầu) tồn tại, nhưng không hỗ trợ phương thức HTTP được sử dụng trong yêu cầu.
Có một yêu cầu quan trọng đối với phản hồi 405 thích hợp: nó phải bao gồm một tiêu đề Allow liệt kê các phương thức HTTP được hỗ trợ cho tài nguyên được yêu cầu.
Một phản hồi 405 thích hợp trông như thế này:
HTTP/1.1 405 Method Not AllowedAllow: GET, HEAD, OPTIONSContent-Type: application/json
{
"error": "Method Not Allowed",
"message": "POST method is not supported for this endpoint."
}
Hãy cùng phân tích thành phần chính:
Allow: GET, HEAD, OPTIONS: Đây là phần quan trọng nhất. Tiêu đề này cho máy khách biết chính xác những phương thức nào được phép. Nó giống như máy chủ đang nói, "Bạn không thể dùng búa ở đây, nhưng bạn có thể dùng ba công cụ này thay thế."
Nói một cách đơn giản, máy khách đã gửi một phương thức HTTP hợp lệ như GET, POST, PUT, DELETE, v.v., nhưng máy chủ không cho phép phương thức cụ thể đó trên URL hoặc điểm cuối được yêu cầu.
Tại sao lỗi 405 lại xảy ra?
Lỗi 405 xảy ra khi phương thức được sử dụng trong yêu cầu HTTP không được phép đối với tài nguyên. Các lý do phổ biến bao gồm:
- Gọi GET trên một điểm cuối chỉ hỗ trợ POST.
- Sử dụng PUT ở nơi chỉ hỗ trợ DELETE.
- Gửi yêu cầu OPTIONS tới các tài nguyên không cho phép.
- Định tuyến máy chủ hoặc trình xử lý phương thức HTTP bị cấu hình sai.
- Sử dụng API REST không đúng hoặc tài liệu lỗi thời.
Hiểu rõ nguyên nhân gốc rễ giúp khắc phục sự cố hiệu quả.
Tại sao máy chủ trả về 405 thay vì 404
Bạn có thể tự hỏi tại sao không chỉ trả về 404 Not Found?
Chà, 404 có nghĩa là tài nguyên không được tìm thấy chút nào, nhưng 405 có nghĩa là tài nguyên tồn tại, nhưng không với phương thức đó.
Sự khác biệt này rất quan trọng đối với các nhà phát triển vì nó cho bạn biết:
- Bạn đang ở đúng nơi.
- Bạn chỉ đang sử dụng sai công cụ.
Cách hoạt động: Một ví dụ cụ thể
Hãy tưởng tượng một điểm cuối API chỉ đọc cung cấp thông tin sản phẩm.
Yêu cầu hợp lệ:
GET /api/products/123 HTTP/1.1Host: api.example.com
Phản hồi của máy chủ: 200 OK với dữ liệu sản phẩm.
Yêu cầu không hợp lệ:
Một máy khách vô tình cố gắng cập nhật sản phẩm bằng cách sử dụng PUT:
PUT /api/products/123 HTTP/1.1Host: api.example.comContent-Type: application/json
{"name": "New Product Name"}
Phản hồi 405 của máy chủ:
HTTP/1.1 405 Method Not AllowedAllow: GET, HEADContent-Type: application/json
{
"error": "Method Not Allowed",
"message": "The PUT method is not supported for this resource."
}
Tiêu đề Allow: GET, HEAD nói rõ ràng cho máy khách rằng đây là một điểm cuối chỉ đọc. Máy khách bây giờ biết chính xác điều gì đã sai và cách khắc phục.
Tại sao tiêu đề Allow lại quan trọng đến vậy
Tiêu đề Allow biến 405 từ một lỗi gây khó chịu thành một cuộc trò chuyện hữu ích. Nếu không có nó, máy khách sẽ phải đoán mò:
- Với tiêu đề
Allow: "Tôi không thể PUT ở đây, nhưng tôi có thể GET hoặc sử dụng HEAD." - Không có tiêu đề
Allow: "Tôi không thể PUT ở đây. ¯_(ツ)_/¯ Chúc may mắn khi tìm ra những gì bạn có thể làm!"
Đây là lý do tại sao đặc tả HTTP bắt buộc các máy chủ phải bao gồm tiêu đề Allow trong các phản hồi 405. Đó là điều làm cho mã thực sự hữu ích thay vì chỉ gây khó chịu.
Phản hồi 405 trông như thế nào?
Máy chủ phản hồi với trạng thái 405 cùng với tiêu đề Allow cho biết các phương thức HTTP được phép. RFC 7231 (đặc tả HTTP/1.1) chỉ dẫn rằng khi mã trạng thái 405 được gửi, máy chủ PHẢI bao gồm tiêu đề Allow liệt kê các phương thức HTTP được phép cho tài nguyên đó.
Ví dụ phản hồi:
textHTTP/1.1 405 Method Not Allowed Allow: GET, HEAD, OPTIONS Content-Type: text/html
<html> <body> <h1>405 Method Not Allowed</h1> <p>The requested method POST is not supported for this resource.</p> </body> </html>Tiêu đề Allow là chìa khóa vì nó thông báo cho máy khách biết các phương thức nào được chấp nhận, cho phép sửa lỗi.
Bằng cách này, máy khách biết các phương thức nào được hỗ trợ và có thể điều chỉnh yêu cầu của họ cho phù hợp.
Các tình huống phổ biến gây ra lỗi 405
1. Điểm cuối chỉ đọc
Như trong ví dụ trên, một số tài nguyên được thiết kế chỉ đọc. Bạn có thể truy xuất chúng bằng GET, nhưng bạn không thể sửa đổi chúng bằng PUT, PATCH hoặc DELETE.
2. Phương thức không chính xác cho hành động
Đây có lẽ là nguyên nhân phổ biến nhất. Các nhà phát triển nhầm lẫn phương thức nào nên được sử dụng cho hành động nào.
- Sử dụng
GETđể tạo tài nguyên (nên làPOST) - Sử dụng
POSTđể cập nhật tài nguyên (nên làPUThoặcPATCH) - Sử dụng
DELETEtrên một URL tập hợp như/api/users(nên là trên một tài nguyên cụ thể như/api/users/123)
3. Thiếu triển khai phương thức
Nhà thiết kế API có thể đơn giản là chưa triển khai một phương thức cụ thể cho một điểm cuối. Ví dụ, một điểm cuối có thể hỗ trợ GET và POST nhưng không hỗ trợ PUT hoặc DELETE.
4. Tường lửa ứng dụng web (WAF) và các quy tắc bảo mật
Đôi khi, cấu hình bảo mật cố ý chặn một số phương thức nhất định. Ví dụ, một WAF có thể chặn các phương thức PUT, PATCH và DELETE trên một số đường dẫn nhất định vì lý do bảo mật, trả về 405.
405 so với các lỗi 4xx khác: Biết sự khác biệt
Điều quan trọng là phải phân biệt 405 với các mã lỗi máy khách khác.
405 Method Not Allowedso với404 Not Found:
405 có nghĩa là "URL này tồn tại, nhưng không dành cho phương thức đó."
404 có nghĩa là "URL này không tồn tại cho bất kỳ phương thức nào."
405 Method Not Allowedso với501 Not Implemented:
405 có nghĩa là "Tôi biết bạn muốn làm gì, nhưng tôi sẽ không cho phép bạn làm điều đó cho tài nguyên cụ thể này." (Lỗi máy khách)
501 có nghĩa là "Tôi hoàn toàn không biết cách xử lý phương thức HTTP này, cho bất kỳ tài nguyên nào." (Lỗi máy chủ)
405 Method Not Allowedso với403 Forbidden:
405 có nghĩa là "Thao tác này không khả dụng cho bất kỳ ai." (Giới hạn phương thức)
403 có nghĩa là "Thao tác này khả dụng, nhưng không dành cho bạn với quyền hiện tại của bạn." (Giới hạn ủy quyền)
Các tình huống phổ biến xuất hiện 405
- API RESTful: Cố gắng PUT tới một điểm cuối chỉ hỗ trợ GET hoặc POST.
- Biểu mẫu web: Gửi biểu mẫu bằng phương thức GET tới một điểm cuối mong đợi POST.
- Định tuyến được cấu hình sai: Định tuyến máy chủ không xử lý các phương thức nhất định đúng cách.
- Sự cố Middleware: Phần mềm bảo mật chặn hoặc lọc các phương thức cụ thể.
- Tài nguyên tĩnh: Yêu cầu POST trên một hình ảnh tĩnh hoặc URL tệp.
Cách máy khách nên xử lý 405 Method Not Allowed
Khi máy khách nhận được phản hồi 405, họ nên:
- Kiểm tra tiêu đề
Allowđể xác định các phương thức HTTP được hỗ trợ. - Sửa đổi yêu cầu để sử dụng một phương thức được phép.
- Thử lại yêu cầu cho phù hợp.
- Xử lý lỗi một cách linh hoạt trong giao diện người dùng hoặc quy trình làm việc.
- Thông báo rõ ràng cho người dùng về các hành động không được hỗ trợ.
Cách nhà phát triển có thể khắc phục lỗi 405
- Xem lại định tuyến và cấu hình máy chủ: Đảm bảo các tuyến đường xử lý tất cả các phương thức HTTP dự kiến.
- Kiểm tra tài liệu API: Xác minh việc sử dụng phương thức HTTP chính xác.
- Triển khai trình xử lý phương thức: Xác định rõ ràng các trình xử lý cho tất cả các phương thức được phép.
- Phản hồi bằng các tiêu đề
Allowphù hợp: Cải thiện khả năng sử dụng của máy khách. - Xác thực yêu cầu của máy khách: Phát hiện việc sử dụng phương thức không chính xác sớm trong ứng dụng máy khách của bạn.
- Ghi nhật ký lỗi 405: Để giám sát và khắc phục các sự cố định kỳ.
Ví dụ về các phương thức HTTP và cách sử dụng được phép
| Phương thức HTTP | Trường hợp sử dụng điển hình |
|---|---|
| GET | Truy xuất tài nguyên hoặc dữ liệu |
| POST | Tạo tài nguyên hoặc thực hiện hành động |
| PUT | Cập nhật hoặc thay thế tài nguyên |
| DELETE | Xóa tài nguyên |
| PATCH | Cập nhật một phần tài nguyên |
| OPTIONS | Hỏi về các phương thức được hỗ trợ |
Sự không khớp giữa phương thức và khả năng của tài nguyên sẽ kích hoạt lỗi 405.
Kiểm tra phản hồi 405 với Apidog

Kiểm tra xem API của bạn có trả về 405 chính xác cho các phương thức không được hỗ trợ hay không là một dấu hiệu của sự phát triển API mạnh mẽ. Apidog giúp quá trình này trở nên cực kỳ đơn giản.
Với Apidog, bạn có thể:
- Kiểm tra tất cả các phương thức dễ dàng: Lấy bất kỳ URL điểm cuối nào và nhanh chóng chuyển đổi giữa các phương thức GET, POST, PUT, PATCH, DELETE chỉ bằng một cú nhấp chuột để xem những phương thức nào được hỗ trợ.
- Xác thực tiêu đề Allow: Khi bạn nhận được phản hồi
405, Apidog sẽ hiển thị rõ ràng tiêu đềAllowtrong chi tiết phản hồi. Bạn có thể xác minh rằng nó chứa danh sách các phương thức chính xác. - Tự động kiểm tra phương thức: Tạo các bộ kiểm thử tự động xác minh rằng các phương thức không được hỗ trợ trả về
405với tiêu đềAllowphù hợp, trong khi các phương thức được hỗ trợ trả về trạng thái2xxmong đợi. - Gỡ lỗi mã phía máy khách: Nếu bạn đang xây dựng một ứng dụng máy khách nhận được
405, bạn có thể sử dụng Apidog để tái tạo chính xác yêu cầu và phản hồi, giúp bạn hiểu và khắc phục sự cố trong mã máy khách của mình. - Tài liệu hành vi API: Sử dụng Apidog để tài liệu các phương thức được hỗ trợ cho từng điểm cuối, làm cho thông tin này rõ ràng cho các nhà phát triển khác sử dụng API của bạn.
Tải xuống ứng dụng
Thay vì đoán mò, bạn sẽ có được sự rõ ràng trong vài giây. Tải xuống Apidog miễn phí và việc khắc phục sự cố HTTP sẽ trở nên dễ dàng.
Các phương pháp hay nhất để xử lý lỗi 405
Đối với nhà phát triển API (phía máy chủ):
- Luôn bao gồm tiêu đề
Allowtrong các phản hồi405. Điều này không phải là tùy chọn đối với một máy chủ HTTP tuân thủ. - Hãy nhất quán trong việc sử dụng phương thức của bạn trên toàn bộ API. Nếu hầu hết các điểm cuối tập hợp hỗ trợ GET và POST, đừng có một điểm cuối chỉ hỗ trợ GET mà không có lý do chính đáng.
- Cung cấp một thông báo lỗi hữu ích trong phần nội dung phản hồi, đặc biệt đối với các API được sử dụng bởi các nhà phát triển khác.
- Cân nhắc sử dụng OPTIONS: Triển khai phương thức OPTIONS cho các điểm cuối của bạn, phương thức này sẽ trả về cùng một tiêu đề
Allow. Điều này cung cấp cho máy khách một cách để khám phá các phương thức được hỗ trợ mà không gây ra lỗi.
Đối với người dùng API (phía máy khách):
- Kiểm tra tiêu đề
Allowkhi bạn nhận được405. Nó cho bạn biết chính xác những gì bạn có thể làm thay thế. - Sử dụng phương thức OPTIONS để khám phá các phương thức được hỗ trợ trước khi thử các thao tác khác.
- Xử lý lỗi
405một cách linh hoạt trong mã của bạn—đừng coi chúng là lỗi nghiêm trọng, mà là hướng dẫn về cách sửa yêu cầu của bạn.
Vai trò của phương thức OPTIONS
Phương thức OPTIONS là họ hàng chủ động của phản hồi 405. Thay vì thử một thao tác và bị từ chối, máy khách có thể hỏi máy chủ trước xem những phương thức nào được hỗ trợ:
Yêu cầu:
OPTIONS /api/products/123 HTTP/1.1Host: api.example.com
Phản hồi:
HTTP/1.1 200 OKAllow: GET, HEAD, OPTIONS
Đây là một cách thanh lịch hơn nhiều để khám phá khả năng của API mà không gây ra lỗi.
Khắc phục sự cố 405 phổ biến
- Kiểm tra kỹ các định nghĩa tuyến đường và trình xử lý động từ HTTP.
- Xem lại cấu hình proxy hoặc tường lửa có thể chặn các phương thức nhất định.
- Tìm lỗi chính tả hoặc sự khác biệt trong yêu cầu của máy khách.
- Sử dụng các công cụ gỡ lỗi như Apidog để ghi lại toàn bộ chu trình yêu cầu/phản hồi.
- Kiểm tra trên các môi trường khác nhau để phát hiện các sự cố cụ thể của môi trường sản xuất.
Ý nghĩa bảo mật của 405
405 cũng có thể có ý nghĩa bảo mật:
- Vô hiệu hóa các phương thức không an toàn (như
TRACE) giúp ngăn chặn các cuộc tấn công. - Tiết lộ quá nhiều trong tiêu đề Allow có thể cung cấp gợi ý cho kẻ tấn công.
- Xử lý 405 nhất quán tránh rò rỉ thông tin chi tiết về máy chủ.
Kết luận: Từ sự thất vọng đến sự rõ ràng
Mã trạng thái 405 Method Not Allowed không chỉ là một rào cản ngẫu nhiên. Nó là một tín hiệu có giá trị cho thấy tài nguyên tồn tại nhưng không chấp nhận phương thức bạn đã sử dụng. Mã trạng thái HTTP 405 Method Not Allowed là một ví dụ hoàn hảo về cách thiết kế API tốt cung cấp phản hồi rõ ràng, có thể hành động. Nó biến điều có thể là một ngõ cụt khó hiểu thành một biển báo hữu ích nói rằng, "Bạn không thể đi đường này, nhưng đây là những con đường đang mở cho bạn."
Đối với các nhà phát triển API, việc triển khai các phản hồi 405 phù hợp với các tiêu đề Allow chính xác là một dấu hiệu của sự chuyên nghiệp và chú ý đến chi tiết. Đối với người dùng API, việc hiểu cách đọc và phản hồi các lỗi 405 là chìa khóa để xây dựng các ứng dụng mạnh mẽ, tự sửa lỗi.
Vì vậy, lần tới khi bạn gặp lỗi 405, đừng thất vọng—hãy đọc tiêu đề Allow. Đó là máy chủ đang cố gắng giúp bạn thành công. Và khi bạn tự xây dựng hoặc kiểm tra API, một công cụ như Apidog sẽ cung cấp cho bạn khả năng đảm bảo việc sử dụng phương thức của bạn là chính xác và việc xử lý lỗi của bạn hữu ích như nó phải vậy.
Tải xuống ứng dụng
