GET gắn dữ liệu vào URL, POST gửi trong body.
html
<form method="get" action="/search">
<input name="q" value="react"> <!-- → /search?q=react -->
</form>
<form method="post" action="/orders">
<input name="card" value="..."> <!-- nằm trong body, không hiện trên URL -->
</form>| GET | POST | |
|---|---|---|
| Vị trí dữ liệu | query string | request body |
| Bookmark / share link | được | không |
| Nằm trong lịch sử & log server | có | không |
| Browser cache | có | không |
| F5 sau khi gửi | an toàn | hỏi gửi lại |
| Idempotent (gửi lại không đổi kết quả) | có | không |
Điểm hay bị nói sai: POST không an toàn hơn GET. Cả hai đều đi qua mạng không mã hoá (plaintext) nếu không có HTTPS. Khác biệt thật là dữ liệu GET bị ghi lại ở lịch sử trình duyệt, access log, Referer header — nên đừng đưa token hay mật khẩu vào query string.
Chọn thế nào: đọc/lọc/tìm kiếm → GET (chia sẻ được link kết quả). Tạo/sửa/xoá → POST.