Có 2 cách để Client có thể gửi thông tin cho Web Server:

  • Phương thức GET
  • Phương thức POST

Phương thức GET gửi thông tin qua URL của yêu cầu HTTP, trước khi trình duyệt gửi thông tin, nó mã hóa nó bởi sử dụng một giản đồ gọi là URL encoding. Trong giản đồ này, các cặp name/value được kết hợp với kí hiệu = và các cặp khác nhau được phân tách nhau bởi dấu &.

name1=value1&name2=value2&name3=value3

Các khoảng trống được xóa bỏ, thay thế bằng kí tự + và bất kì kí tự không phải dạng số và chữ được thay thế bằng giá trị hexa. Sau khi thông tin được mã hóa, nó sẽ được gửi lên Server.

Mặc định, phương thức GET không mã hóa dữ liệu theo nghĩa mã hóa bảo mật (như mã hóa bằng HTTPS). Thay vào đó, nó "mã hóa" dữ liệu bằng cách sử dụng URL encoding, để đảm bảo rằng dữ liệu được truyền trong URL tuân theo các quy tắc của URL.

URL encoding bao gồm:

  • Thay thế các khoảng trắng bằng ký tự +.
  • Thay thế các ký tự đặc biệt (không phải chữ và số) bằng giá trị hexa tương ứng, bắt đầu bằng % (ví dụ, ! trở thành %21).

Ví dụ:

Giả sử bạn có một chuỗi dữ liệu cần gửi với các cặp name/value như sau:

name=John Doe
age=30
city=New York​

Khi sử dụng URL encoding, các ký tự đặc biệt và khoảng trắng sẽ được thay thế theo quy tắc của URL encoding. Cụ thể:

  • Khoảng trắng ( ) được thay thế bằng ký tự +.
  • Ký tự đặc biệt (@, &, =, ?, ...) được thay thế bằng giá trị hexa tương ứng, bắt đầu bằng %.

Sau khi URL encoding, chuỗi dữ liệu trên sẽ được mã hóa như sau:

name=John+Doe&age=30&city=New+York​

Chi tiết từng bước mã hóa:

  • name=John Doe -> name=John+Doe
  • age=30 (không thay đổi vì không có ký tự đặc biệt)
  • city=New York -> city=New+York

Ví dụ URL đầy đủ khi sử dụng phương thức GET:

http://example.com/page?name=John+Doe&age=30&city=New+York​

Trong ví dụ này:

  • Dữ liệu được gửi dưới dạng chuỗi truy vấn gắn vào URL sau dấu hỏi ?.
  • Các khoảng trắng trong tên và thành phố đã được mã hóa thành +.

Ví dụ với ký tự đặc biệt: Giả sử bạn có chuỗi dữ liệu:

query=Hello World! How's it going?

Khi URL encoding, chuỗi này sẽ trở thành:

query=Hello+World%21+How%27s+it+going%3F​
  • ! trở thành %21
  • ' trở thành %27
  • ? trở thành %3F

Ví dụ URL đầy đủ:

http://example.com/search?query=Hello+World%21+How%27s+it+going%3F​

Như vậy, URL encoding đảm bảo rằng tất cả các ký tự trong chuỗi dữ liệu tuân thủ định dạng URL an toàn và hợp lệ.

Tóm lại, mặc định phương thức GET sử dụng URL encoding để đảm bảo dữ liệu phù hợp với định dạng URL, nhưng không thực hiện mã hóa bảo mật. Để bảo mật dữ liệu khi truyền, bạn cần sử dụng HTTPS.

Phương thức GET trong PHP

Phương thức GET gửi thông tin người dùng đã được mã hóa được phụ thêm vào request trang. Trang và thông tin mã hóa được phân tách nhau bởi kí tự hỏi chấm (?).

http://www.test.com/index.htm?name1=value1&name2=value2
  • Phương thức GET tạo ra một chuỗi kí tự dài xuất hiện trong Server log của bạn, trong Location: box của trình duyệt.

  • Phương thức GET được giới hạn gửi tối đa chỉ 1024 ký tự.

  • Không bao giờ sử dụng phương thức GET nếu gửi password hoặc thông tin nhay cảm lên Server.

  • GET không thể gửi dữ liệu nhị phân, ví dụ như hình ảnh hoặc tài liệu word lên Server.

  • Dữ liệu gửi bởi phương thức GET có thể được truy cập bằng cách sử dụng biến môi trường QUERY_STRING.

  • PHP cung cấp mảng liên hợp $_GET để truy cập tất cả các thông tin đã được gửi bởi phương thức GET.

Bạn thử ví dụ sau bằng việc đặt source code sau đây vào test.php script:

<?php
   if( $_GET["name"] || $_GET["age"] )
   {
      echo "Chào mừng ". $_GET['name']. "<br />";
      echo "Bạn ". $_GET['age']. " tuổi.";
      
      exit();
   }
?>
<html>
   <body>
   
      <form action="<?php $_PHP_SELF ?>" method="GET">
         Họ tên: <input type="text" name="name" />
         Tuổi: <input type="text" name="age" />
         <input type="submit" />
      </form>
      
   </body>
</html>

PHP code trên sẽ cho kết quả:

Chào mừng s2sontech
Bạn 1 tuổi;
      

Phương thức POST trong PHP

  • Phương thức POST truyền thông tin thông qua HTTP body.
  • Mặc định, khi sử dụng phương thức POST và đặt tiêu đề Content-Type thành application/x-www-form-urlencoded, dữ liệu sẽ được mã hóa theo định dạng URL encoding trước khi gửi lên server.
    • Việc sử dụng URL encoding không phải lúc nào cũng là mặc định của phương thức POST. Bạn cũng có thể gửi dữ liệu theo các định dạng khác như multipart/form-data hoặc application/json. Nhưng nếu không đặt định dạng nào cụ thể, và tiêu đề Content-Type được đặt thành application/x-www-form-urlencoded, thì URL encoding là định dạng mặc định được sử dụng.
  • Phương thức POST không có bất kì hạn chế nào về kích thước dữ liệu sẽ gửi.

  • Phương thức POST có thể sử dụng để gửi ASCII cũng như dữ liệu nhị phân.

  • Dữ liệu gửi bởi phương thức POST thông qua phần thân (body) của yêu cầu HTTP, vì vậy việc bảo mật phụ thuộc vào giao thức HTTP. Bằng việc sử dụng HTTPS, bạn có thể chắc chắn rằng thông tin của mình là an toàn.

  • Nếu không sử dụng HTTPS, dữ liệu gửi qua phương thức POST sẽ không được mã hóa. Dữ liệu sẽ được gửi dưới dạng văn bản thuần túy (plaintext) và có thể bị đánh chặn và đọc được bởi những bên thứ ba trong quá trình truyền tải.

    Sử dụng HTTPS (Hypertext Transfer Protocol Secure) đảm bảo rằng dữ liệu được mã hóa khi truyền từ client đến server, giúp bảo vệ thông tin khỏi bị rò rỉ hoặc bị tấn công bởi các bên không đáng tin cậy.

  • PHP cung cấp mảng liên hợp $_POST để truy cập tất cả các thông tin được gửi bằng phương thức POST.

Bạn thử ví dụ sau bằng việc đặt source code vào test.php script:

<?php
   if( $_POST["name"] || $_POST["age"] )
   {
      if (preg_match("/[^A-Za-z'-]/",$_POST['name'] ))
      {
         die ("Biến name không hợp lệ - nên là các chữ cái");
		}
      echo "Chào mừng ". $_POST['name']. "<br />";
      echo "Bạn ". $_POST['age']. " tuổi.";
      
      exit();
   }
?>
<html>
   <body>
   
      <form action="<?php $_PHP_SELF ?>" method="POST">
         Họ tên: <input type="text" name="name" />
         Tuổi: <input type="text" name="age" />
         <input type="submit" />
      </form>
   
   </body>
</html>

PHP code trên sẽ cho kết quả:

Chào mừng s2sontech
Bạn 1 tuổi;
      

Biến $_REQUEST trong PHP

Biến $_REQUEST trong PHP chứa nội dung của cả $_GET, $_POST, và $_COOKIE. Chúng ta sẽ bàn về biến $_COOKIE khi giải thích về Cookie trong PHP.

Biến $_REQUEST trong PHP có thể được sử dụng để lấy kết quả từ form data được gửi bởi cả 2 phương thức GET và POST.

Bạn thử ví dụ sau bằng việc đặt source code vào test.php script:

<?php
   if( $_REQUEST["name"] || $_REQUEST["age"] )
   {
      echo "Chào mừng ". $_REQUEST['name']. "<br />";
      echo "Bạn ". $_REQUEST['age']. " tuổi.";
      exit();
   }
?>
<html>
   <body>
      
      <form action="<?php $_PHP_SELF ?>" method="POST">
         Họ tên: <input type="text" name="name" />
         Tuổi: <input type="text" name="age" />
         <input type="submit" />
      </form>
      
   </body>
</html>

Ở đây, biến $_PHP_SELF chứa tên của chính script đó, script mà nó đang được gọi.

PHP code trên sẽ cho kết quả:

Chào mừng s2sontech
Bạn 1 tuổi;
      

Các bài học PHP phổ biến khác tại s2sontech:




Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Learning English Everyday