Giới Thiệu Tổng Quan Về Status Code 307

Trong quá trình quản trị website và tối ưu SEO, việc hiểu rõ các mã trạng thái HTTP là kỹ năng không thể thiếu. Status code 307 là gì – đây là mã phản hồi Temporary Redirect, thuộc nhóm 3xx (Redirection). Khi máy chủ trả về mã 307, nó thông báo rằng tài nguyên đã được tạm thời chuyển hướng sang một URL khác, và trình duyệt phải giữ nguyên phương thức HTTP (GET, POST, PUT…) khi thực hiện request mới. Điều này khác biệt hoàn toàn so với mã 302 ở chỗ 307 bảo toàn phương thức gốc, trong khi nhiều trình duyệt cũ thường tự động đổi POST thành GET khi gặp 302.
Mã 307 được định nghĩa chính thức trong chuẩn HTTP/1.1 (RFC 7231) và vẫn được giữ nguyên trong HTTP/2 và HTTP/3. Hiểu đúng về status code 307 là gì giúp các nhà phát triển tránh được những lỗi chuyển hướng bất ngờ, đặc biệt là trong các ứng dụng xử lý form, API thanh toán hoặc hệ thống xác thực. So với mã 308, 307 mang tính tạm thời, trong khi 308 là chuyển hướng vĩnh viễn nhưng cũng giữ nguyên phương thức.
Bản Chất Và Cách Hoạt Động Của Status Code 307
Nguyên Lý Cốt Lõi: Bảo Toàn Phương Thức HTTP
Khi một máy chủ phản hồi bằng mã 307, nó kèm theo header Location trỏ đến URL đích. Trình duyệt hoặc client bắt buộc phải gửi lại yêu cầu với cùng phương thức và body ban đầu. Ví dụ: nếu client gửi một request POST với dữ liệu form đến URL A, server trả về 307 kèm Location: URL B, thì client sẽ gửi một request POST (không phải GET) đến URL B với cùng body dữ liệu. Điều này đảm bảo các giao dịch không bị mất mát thông tin.
Đây là điểm tạo nên sự khác biệt của status code 307 là gì so với mã 302. Trong thực tế, hầu hết trình duyệt hiện đại như Chrome, Firefox, Edge đều tuân thủ đúng chuẩn này. Tuy nhiên, một số bot cũ hoặc thư viện HTTP không được cập nhật có thể vẫn xử lý 307 giống như 302, dẫn đến lỗi logic.
Quy Trình Xử Lý Client Khi Nhận Mã 307
- Client gửi request ban đầu (ví dụ POST /api/payment).
- Server phản hồi HTTP 307 kèm header Location: /new-api/payment.
- Client kiểm tra mã trạng thái, nếu là 307, tự động gửi lại request với cùng phương thức POST và giữ nguyên body.
- Client hiển thị response từ URL mới cho người dùng (nếu là API) hoặc chuyển hướng trang (nếu là web).
So Sánh Chi Tiết: 307 vs 302 vs 308
| Mã | Loại Chuyển Hướng | Giữ Phương Thức | Thời Gian | Ứng Dụng Chính |
|---|---|---|---|---|
| 301 | Vĩnh viễn | Không (thường chuyển GET) | Vĩnh viễn | Thay đổi URL vĩnh viễn, chuyển SEO |
| 302 | Tạm thời | Không (trình duyệt cũ đổi POST → GET) | Tạm thời | Bảo trì, A/B testing cơ bản |
| 307 | Tạm thời | Có (bắt buộc) | Tạm thời | API, form, thanh toán, xác thực |
| 308 | Vĩnh viễn | Có (bắt buộc) | Vĩnh viễn | Chuyển URL vĩnh viễn mà không mất POST |
Bảng so sánh trên cho thấy status code 307 là gì – nó đóng vai trò trung gian giữa 302 và 308, giúp chuyển hướng tạm thời nhưng vẫn đảm bảo an toàn dữ liệu. Trong khi 308 là lựa chọn cho chuyển hướng vĩnh viễn có giữ phương thức, 307 là lựa chọn ưu việt khi cần chuyển hướng tạm thời cho các tác vụ quan trọng.
Lợi Ích Khi Sử Dụng Status Code 307 Đúng Cách

Bảo Toàn Dữ Liệu Trong Form Và API
Trong các hệ thống đăng ký, thanh toán trực tuyến, việc chuyển hướng sai phương thức có thể gây mất thông tin thẻ tín dụng hoặc tạo ra đơn hàng trùng lặp. Sử dụng status code 307 là gì – là giải pháp đảm bảo dữ liệu POST được giữ nguyên, tránh thất thoát. Ví dụ: một cổng thanh toán cần chuyển hướng người dùng đến URL xác thực bổ sung. Nếu dùng 302, trình duyệt sẽ gửi GET và mất dữ liệu form, dẫn đến lỗi giao dịch. 307 giải quyết triệt để vấn đề này.
Tuân Thủ Chuẩn HTTP Chính Thức
Các ứng dụng hiện đại, đặc biệt là RESTful API, yêu cầu tuân thủ nghiêm ngặt nguyên tắc HTTP. Mã 307 được khuyến nghị trong nhiều tài liệu kỹ thuật cho các tác vụ chuyển hướng tạm thời có trạng thái. Việc dùng đúng mã giúp client và server giao tiếp chính xác, giảm thiểu lỗi. Hơn nữa, khi viết tài liệu API, chỉ rõ rằng endpoint có thể trả về status code 307 là gì giúp lập trình viên dễ dàng hiểu cách xử lý.
Tối Ưu Trải Nghiệm Người Dùng Và SEO
Mặc dù 307 không ảnh hưởng trực tiếp đến SEO như 301, nhưng nó vẫn quan trọng. Googlebot hiện đại (Googlebot Smartphone) tuân thủ đúng chuẩn HTTP và sẽ giữ phương thức khi gặp 307. Điều này cho phép các trang web chuyển hướng người dùng đến phiên bản tạm thời (ví dụ trang bảo trì) mà không ảnh hưởng đến chỉ mục. Nếu trang chính đang bảo trì, dùng 307 thay vì 302 giúp bot hiểu rằng tài nguyên vẫn tồn tại nhưng tạm thời ở nơi khác.
Hạn Chế Của Status Code 307
Tương Thích Ngược Với Một Số Client Cũ
Không phải tất cả client và thư viện HTTP đều xử lý chính xác mã 307. Một số bot cũ, thư viện Python requests phiên bản dưới 2.0, hoặc các proxy cũ có thể xử lý 307 như 302, tức là chuyển hướng bằng GET thay vì POST. Điều này gây ra lỗi trong tích hợp API. Để khắc phục, nhà phát triển cần kiểm tra log và nâng cấp thư viện lên phiên bản mới nhất.
Không Phù Hợp Cho Chuyển Hướng Vĩnh Viễn
Nếu bạn cần chuyển hướng vĩnh viễn một trang web, 307 là lựa chọn sai. Dùng 307 cho chuyển hướng vĩnh viễn sẽ khiến trình duyệt và bot liên tục gửi yêu cầu đến URL cũ, làm chậm tốc độ tải trang và ảnh hưởng đến thứ hạng tìm kiếm. Trong trường hợp này, mã 308 (giữ phương thức, vĩnh viễn) hoặc 301 (vĩnh viễn, không giữ phương thức) mới là phù hợp. Hiểu rõ status code 307 là gì giúp bạn chọn đúng mã cho đúng tình huống.
Yêu Cầu Cấu Hình Chính Xác Trên Server
Không phải mọi nền tảng hosting đều hỗ trợ cấu hình 307 dễ dàng như 301 hay 302. Với Apache, bạn cần dùng RewriteRule và chỉ định [R=307,L]; với Nginx, dùng dòng return 307 $uri;. Nếu cấu hình sai, server có thể trả về 302 thay vì 307, gây ra hành vi không mong muốn. Nhà phát triển cần kiểm tra lại response header sau khi cấu hình.
Ứng Dụng Thực Tế Của Status Code 307

Hệ Thống Thanh Toán Và Giao Dịch
Một trong những ứng dụng phổ biến nhất của 307 là trong các cổng thanh toán như PayPal, Stripe, hoặc các ngân hàng nội địa. Khi người dùng gửi thông tin thanh toán qua form POST, server có thể tạm thời chuyển hướng đến trang xác thực 3D Secure. Mã 307 đảm bảo dữ liệu thanh toán không bị mất trong quá trình chuyển hướng, giảm thiểu rủi ro giao dịch thất bại hoặc trùng lặp.
Xác Thực Đa Yếu Tố (MFA)
Trong các ứng dụng yêu cầu xác thực hai lớp, người dùng thường được chuyển hướng tạm thời đến trang nhập mã OTP. Sử dụng 307 giúp giữ nguyên phiên làm việc và dữ liệu form đã gửi trước đó. Nếu dùng 302, thông tin đăng nhập có thể bị mất, buộc người dùng phải nhập lại từ đầu.
Chuyển Hướng Tạm Thời Trong Bảo Trì Hệ Thống
Khi một trang web hoặc API cần bảo trì khẩn cấp, quản trị viên có thể cấu hình 307 để chuyển hướng người dùng sang trang thông báo tạm thời. Vì 307 bảo toàn phương thức, các API client sẽ không bị lỗi khi gọi POST hay PUT. Sau khi bảo trì xong, chỉ cần tắt chuyển hướng, mọi thứ hoạt động bình thường.
Load Balancing Và Phân Phối Tài Nguyên
Một số hệ thống load balancing sử dụng 307 để điều hướng request đến các máy chủ phụ tạm thời khi máy chủ chính quá tải. Vì 307 giữ nguyên dữ liệu POST, các giao dịch viết (write) được chuyển hướng an toàn. Tuy nhiên, trong thực tế, các hệ thống hiện đại thường dùng redirect nội bộ (internal redirect) hoặc proxy thay vì 307.
Hướng Dẫn Cấu Hình Status Code 307 Trên Các Nền Tảng
Cấu Hình Trên Apache
Để tạo chuyển hướng 307 trong Apache, thêm dòng sau vào file.htaccess hoặc cấu hình VirtualHost:
RewriteEngine On RewriteRule ^old-path$ /new-path [R=307,L]
Đảm bảo module mod_rewrite đã được bật. Kiểm tra response bằng cURL: curl -I -X POST https://example.com/old-path sẽ thấy mã 307 kèm Location.
Cấu Hình Trên Nginx
Trong block server hoặc location của Nginx, thêm:
location /old-path { return 307 /new-path;
}
Hoặc nếu cần điều kiện phức tạp hơn, dùng biến:
if ($scheme!= "https") { return 307 https://$server_name$request_uri;
}
Cấu Hình Trên Cloudflare
Cloudflare Page Rules hỗ trợ tạo redirect 307 thông qua giao diện. Vào Page Rules, chọn Forwarding URL, chọn Status Code là 307, nhập URL cũ và URL mới. Lưu ý: Cloudflare chỉ hỗ trợ 307 cho forwarding URL, không hỗ trợ redirect từ origin nếu chưa có rule.
Sai Lầm Thường Gặp Khi Sử Dụng Status Code 307

Lầm Tưởng 307 Giống 302
Nhiều nhà phát triển nghĩ rằng 307 và 302 hoàn toàn như nhau, dẫn đến việc dùng 302 cho các tác vụ cần giữ POST. Kết quả là dữ liệu form bị mất. Hãy nhớ: status code 307 là gì – là mã bắt buộc giữ phương thức, trong khi 302 không đảm bảo điều này. Nếu API của bạn cần chuyển hướng POST, luôn dùng 307 hoặc 308.
Dùng 307 Cho Chuyển Hướng Vĩnh Viễn
Một sai lầm khác là dùng 307 cho các redirect 301. Điều này khiến bot không biết đây là chuyển hướng vĩnh viễn, dẫn đến việc không chuyển giao giá trị SEO. Nếu bạn thay đổi URL vĩnh viễn, hãy dùng 301 (nếu không cần giữ POST) hoặc 308 (nếu cần giữ POST).
Không Kiểm Tra Response Header
Sau khi cấu hình, cần kiểm tra thực tế bằng công cụ như curl, Postman hoặc browser DevTools. Nếu header trả về 302 thay vì 307, có thể do module rewrite chưa đúng cấu hình hoặc middleware tự động ghi đè. Luôn kiểm tra trước khi deploy lên production.
Lưu Ý Quan Trọng Khi Sử Dụng Status Code 307 Trong SEO
Googlebot xử lý 307 giống như 302 đối với mục đích lập chỉ mục, nghĩa là nó không chuyển giá trị PageRank từ URL cũ sang URL mới. Do đó, 307 không được dùng để thay thế cho 301 trong chiến lược SEO chuyển đổi. Tuy nhiên, Googlebot vẫn tuân thủ đúng phương thức khi gặp 307, đặc biệt với các request POST (ví dụ khi crawl API). Nếu bạn muốn bot vẫn index được nội dung sau khi chuyển hướng tạm thời, hãy đảm bảo URL mới có thể truy cập công khai và không bị chặn bởi robots.txt.
Ngoài ra, tránh chain redirect (chuỗi chuyển hướng) với 307. Nếu A chuyển hướng 307 đến B, rồi B lại chuyển hướng 307 đến C, client phải thực hiện hai request tuần tự, làm tăng độ trễ. Google khuyến nghị giới hạn tối đa 5 lần redirect cho mỗi URL. Trong trường hợp bắt buộc, nên dùng tối đa 2-3 redirect và ưu tiên redirect một bước.
Câu Hỏi Thường Gặp Về Status Code 307 (FAQ)

Status code 307 khác gì so với 308?
Cả hai đều bảo toàn phương thức HTTP. Điểm khác biệt duy nhất là thời gian: 307 là tạm thời (client nên tiếp tục dùng URL cũ cho request sau), còn 308 là vĩnh viễn (client nên cập nhật URL mới cho mọi request tương lai).
Có nên dùng 307 cho chuyển hướng HTTP sang HTTPS không?
Không. Chuyển hướng HTTP sang HTTPS thường là vĩnh viễn, do đó nên dùng 301. Nếu muốn giữ phương thức (ví dụ chuyển POST từ HTTP sang HTTPS), dùng 308. Tuy nhiên, hầu hết trình duyệt vẫn dùng GET sau khi chuyển hướng HTTPS dù có 308, nên 301 là lựa chọn phổ biến hơn.
Status code 307 có ảnh hưởng đến SEO không?
Không ảnh hưởng xấu nếu dùng đúng mục đích tạm thời. Nhưng vì không chuyển giao PageRank, nó không thay thế được 301 cho SEO. Googlebot xử lý 307 như redirect tạm thời, vẫn giữ index cho URL cũ.
Làm sao để kiểm tra một URL có dùng 307 không?
Dùng lệnh curl -I https://example.com/path và xem dòng đầu tiên của response. Nếu hiện HTTP/1.1 307 Temporary Redirect, đó là 307. Hoặc dùng browser DevTools (tab Network) xem Status Code.
Trình duyệt nào không hỗ trợ 307?
Hầu hết trình duyệt hiện đại đều hỗ trợ. Một số trình duyệt cũ như Internet Explorer 6, 7 hoặc một số bot cũ có thể xử lý sai. Nhưng từ năm 2015 trở đi, tất cả trình duyệt phổ biến đều tuân thủ chuẩn.
Kết Luận
Status code 307 là gì – đó là mã phản hồi Temporary Redirect với cơ chế bảo toàn phương thức HTTP, đóng vai trò quan trọng trong các hệ thống yêu cầu tính toàn vẹn dữ liệu khi chuyển hướng tạm thời. Từ thanh toán, xác thực đến bảo trì hệ thống, hiểu và ứng dụng đúng 307 giúp bạn xây dựng các ứng dụng web và API ổn định, an toàn. Tuy nhiên, cần phân biệt rõ với 301, 302 hay 308 để tránh ảnh hưởng đến hiệu suất và SEO. Luôn kiểm tra kỹ cấu hình và sử dụng công cụ phù hợp. Hy vọng bài viết này đã mang đến cho bạn cái nhìn toàn diện và chuyên sâu về mã trạng thái đặc biệt này.
- Crawl Scheduling Là Gì? Chiến Lược Tối Ưu Lịch Trình Thu Thập Dữ Liệu Cho Google
- Cách Khắc Phục Lỗi WordPress Email Tiếng Việt Mất Dấu, Sai Font Chữ Hiệu Quả Nhất 2025
- Elementor Video Lazy Load Lỗi: Nguyên Nhân, Cách Khắc Phục Từ A Đến Z Cho Website WordPress
- Topical Clustering Là Gì? Giải Pháp SEO Bền Vững Từ Chuyên Gia 15 Năm Kinh Nghiệm
- Theme WordPress Filters Là Gì? Hướng Dẫn Toàn Diện Từ A-Z Cho Người Mới Bắt Đầu















