Khác Biệt Giữa Phương Thức POST và GET
POST và GET là hai trong số các phương thức phổ biến sử dụng trong biểu mẫu của trang web. Tuy nhiên có không hiểm các trường hợp lập trình viện đã lúng túng không biết nên lựa chọn giữa sử dụng phương thức GET hay POST khi tạo form. Cả hai phương thức này đều có thể được sử dụng để tạo ...
POST và GET là hai trong số các phương thức phổ biến sử dụng trong biểu mẫu của trang web. Tuy nhiên có không hiểm các trường hợp lập trình viện đã lúng túng không biết nên lựa chọn giữa sử dụng phương thức GET hay POST khi tạo form. Cả hai phương thức này đều có thể được sử dụng để tạo biểu mẫu tuy nhiên việc sử dụng không chính xác sẽ gây khiến tạo ra những lỗ hổng bảo mật mà các hacker có thể khai thác triệt để.
Như vậy thì câu hỏi ở đây là trong trường hợp nào nên sử dụng phương thức GET và ngược lại trường hợp nào thì nên sử dụng POST?
Lựa Chọn Giữa GET và POST
Để xác định được phương thức nào cần sử dụng thì bạn chỉ cần ghi nhớ công thức đơn giản sau:
- Nên sử dụng phương thức GET trong trường hợp bạn cần lấy dữ liệu của một tài nguyên (resource) và
- Nên sử dụng phương thức POST trong trường hợp bạn cần tạo một tài nguyên.
Ở trên một tài nguyên có thể là một file văn bản, hình ảnh, video hoặc một trang HTML...
Một ví dụ cụ thể như trong trường hợp bạn cần tạo một form để người dùng upload avatar hay video thì chúng ta thường sẽ sử dụng phương thức POST. Tuy nhiên khi tải về avatar hoặc video thì bạn lại muốn sử dụng phương thức GET.
Tương tự chúng ta cũng sẽ sử dụng phương thức POST trong trang đăng ký tài khoản người dùng. Trong trường hợp này tài nguyên được tạo ra chính là dữ liệu người dùng như username, password ... Thông thường các dữ liệu này sẽ được lưu trữ trên cơ sở dữ liệu.
Ngoài ra khi cần xử lý các thông tin nhạy cảm ví dụ như password thì bạn cần sử dụng POST thay vì GET. Điều này là bởi vì dữ liệu gửi bằng phương thức GET được hiển thị trên địa chỉ URL dưới dạng query string. Ví dụ:
http://www.codehub.vn/bai-viet?page=2&limit=20
Với URL ở trên thì phần ký tự phía dau dấu ? đầu tiên page=2&limit=20 được gọi là query string với hai parameter là page và limit chứa dữ liệu gửi đi sử dụng phương thức GET.
Điều này có nghĩa là trình duyệt sẽ lưu trừ dữ liệu này trong lịch sử duyệt web và sau đó sẽ hiển thị dữ liệu này để gợi ý người dùng khi họ nhập dữ liệu truy cập vào một URL có các ký tự tương tự ở các lần sau đó.
So Sánh GET và POST
Dưới đây là danh sách liệt kê cách điểm khác biệt mấu chôt giữa GET và POST:
- Lưu Trữ (Cache): Dữ liệu gửi bằng phương thức GET sẽ được lưu trữ lại trong query string và có thể được xem trong lịch sử trình duyệt. Ngược lại thì dữ liệu và địa chỉ URL của các request gửi bằng POST không được trình duyệt lưu lại.
- Đánh Dấu (Bookmark): Đối với request gửi bằng phương thức GET người dùng có thể bookmark lại được trên trình duyệt. Ngược lại các request gửi bằng POST sẽ không thể bookmark được.
- Gửi Lại Form: Với form gửi đi bằng phương thức GET bạn có thể gửi lại bằng cách bấm phím F5 hoặc Ctrl + R. Tuy nhiên với phương thức POST, nếu bạn muốn thực hiện việc gửi lại dữ liệu của form thì trình duyệt sẽ hiển thị một hộp thoại cảnh báo.
- Trở Lại Trang Trước: Trong trường hợp bạn đã gửi form dữ liệu đi rồi sau đó bấm phím Backspace để quay lại trang trước thì với phương thức GET bạn sẽ vẫn được cùng một nội dụng (chứa form). Ngược lại với POST thì bạn sẽ thấy một trang trống.
- Bảo Mật: Phương thức POST bảo mật hơn GET do dữ liệu không được lưu lại trong khi đó với GET thì bạn có thể hiển thị lại được các dữ liệu này.
- Dữ Liệu: Phương thức POST không giới hạn dung lượng dữ liệu gửi đi cũng như loại nhữ liệu (văn bản thông thường hay file nhị phân như upload tập tin hay hình ảnh, video...). Ngược lại, với phương thức GET dữ liệu gửi đi bị giới hạn sử dụng các ký tự chữ có trong bộ ký tự ASCII. Đồng thời dữ liệu của GET được gửi trong URL thông qua query string nên sẽ bị giới hạn bởi số lượng ký tự tối đa cho phép trong URL, với các trình duyệt thì số lượng ký tự tối đa cho phép trên URL, thông thường là 2048 ký tự.
Riêng đối với các bạn là developer thì cần chú ý rằng dữ liệu gửi bằng phương thức POST vẫn có thể được hiển thị thông qua công cụ phát triển developer tools của trình duyệt.