/ / Phương thức HTTP là gì và bạn có thể sử dụng chúng như thế nào?

Phương thức HTTP là gì và bạn có thể sử dụng chúng như thế nào?

Mỗi yêu cầu HTTP sử dụng một phương thức để mô tả mục đích thiết yếu của nó. Mỗi phương pháp có cách sử dụng cụ thể cho các tác vụ khác nhau, từ tìm nạp trang web đến xóa tài nguyên. GET và POST là hai cái quen thuộc nhất, ngoài ra còn có bảy cái khác.


Tìm hiểu về khái niệm này và mục đích của từng phương thức trong số chín phương thức HTTP có thể có.


Phương thức HTTP là gì?

Mỗi yêu cầu HTTP bạn thực hiện bao gồm một hành động và mục tiêu cho hành động đó, giống như một động từ và một danh từ hoạt động như một đối tượng.

URL xác định một tài nguyên duy nhất, đóng vai trò là mục tiêu của yêu cầu. Trong khi đó, động từ—hành động cần thực hiện trên URL đó—được biểu thị bằng một phương thức.

Dòng đầu tiên của yêu cầu HTTP cung cấp thông tin quan trọng nhất bao gồm phiên bản HTTP, URL tài nguyên và phương thức yêu cầu:

 GET /software/htp/cics/index.html HTTP/1.1

9 phương thức HTTP là gì?

Bốn phương thức đầu tiên tương đương với bốn hành động từ mô hình CRUD: Tạo, Đọc, Cập nhật và Xóa. Các phương thức HTTP tương ứng là BƯU KIỆN, LẤY, ĐẶTXÓA BỎ.

LẤY

Yêu cầu mặc định, phổ biến nhất mà bạn sẽ gửi khi duyệt web và nhấp vào liên kết hoặc yêu cầu dữ liệu qua API. Máy chủ sẽ trả về tài nguyên trong nội dung phản hồi của nó.

BƯU KIỆN

Sử dụng POST để tạo tài nguyên mới, đặc biệt khi những tài nguyên đó có tài nguyên gốc có thể nhận dạng được. Ví dụ: nếu bạn có tài nguyên /clients, bạn nên tạo một ứng dụng khách mới bằng cách POST dữ liệu cần thiết cho /clients.

ĐẶT

Cập nhật hoặc thay thế một tài nguyên hiện có. Điều này tương tự như POST, nhưng máy khách chịu trách nhiệm chọn một mã định danh duy nhất cho tài nguyên. Để tạo tài nguyên bằng PUT, URL tài nguyên phải bao gồm mã định danh, ví dụ: /khách hàng/007.

XÓA BỎ

Sử dụng phương pháp này để xóa tài nguyên bạn chỉ định trong URL. Giống như tất cả các phương thức HTTP, hỗ trợ nằm ở máy chủ. Nó có thể cho phép bất kỳ ai xóa tài nguyên, mặc dù điều đó rõ ràng là rủi ro. Một máy chủ hỗ trợ XÓA thường sẽ yêu cầu xác thực và ủy quyền.

Hai phương pháp khác cung cấp các biến thể nhỏ ở trên: CÁI ĐẦU. Bạn có thể thấy chúng hữu ích khi sử dụng một số API nhất định hoặc nếu bạn đang xây dựng API của riêng mình.

Phương thức PATCH cập nhật tài nguyên hiện có, chỉ với một phần dữ liệu. Nói cách khác, bạn không cần cung cấp bản trình bày đầy đủ của tài nguyên mới, chỉ cần cung cấp các trường mà bạn cần cập nhật.

Yêu cầu HEAD dành cho khi bạn muốn có thông tin về tài nguyên chứ không phải chính tài nguyên đó. Phản hồi sẽ không bao gồm phần thân, nhưng nó sẽ chứa một tập hợp các tiêu đề HTTP hữu ích. Bạn có thể biết tổng kích thước của tệp trước khi tải xuống, thông qua tiêu đề phản hồi Độ dài nội dung.

Các phương pháp còn lại—TÙY CHỌN, KẾT NỐIDẤU VẾT—tối nghĩa hơn. Họ xử lý siêu dữ liệu, kết nối mạng và khắc phục sự cố. Bạn có thể thấy chúng hữu ích trong một số loại lập trình nhất định, nhưng có thể bạn sẽ không sử dụng chúng hàng ngày.

TÙY CHỌN

Máy chủ sẽ phản hồi phương thức này bằng cách cho bạn biết phương thức HTTP nào mà tài nguyên thực sự hỗ trợ. Điều này có thể hữu ích cho việc khám phá.

KẾT NỐI

Một số loại phần mềm mạng có thể sử dụng phương pháp này để thiết lập đường hầm giữa hai máy tính. Điều này thường được sử dụng để bắt đầu kết nối HTTPS thông qua proxy.

DẤU VẾT

Phương pháp này rất hữu ích để khắc phục sự cố. Khi nhận được nó, máy chủ sẽ gửi lại yêu cầu mà nó nhận được trong phần phản hồi. Phương pháp này cung cấp một cơ chế để kiểm tra xem các máy trung gian có thay đổi bất kỳ chi tiết nào của yêu cầu hay không.

GET và HEAD là hai phương thức duy nhất mà mọi máy chủ web nói chung đều hỗ trợ. Một máy chủ cụ thể có thể hỗ trợ hoặc không hỗ trợ các phương pháp khác, vì vậy bạn nên kiểm tra trước.

Khi nào bạn có thể sử dụng các phương pháp này?

Hầu hết thời gian, các phương thức HTTP sẽ minh bạch đối với bạn. Tuy nhiên, bạn sẽ cần xem xét chúng nếu bạn thêm biểu mẫu vào trang web hoặc sử dụng API.

Phương thức HTTP trong HTML

Các hình thức phần tử phương pháp thuộc tính cho phép bạn đặt phương thức HTTP để sử dụng khi biểu mẫu gửi. HTML chỉ hỗ trợ bưu kiệnlấy các giá trị cho thuộc tính này—cộng với một hộp thoại thay thế tối nghĩa.

 <form method="post">
  ...
</form>

Bạn có thể sử dụng các tính năng như Công cụ dành cho nhà phát triển của Chrome để xem Mạng lưu lượng truy cập và xác nhận phương thức mà trình duyệt của bạn gửi cho một yêu cầu cụ thể. Lưu ý rằng hầu hết các biểu mẫu web sẽ gửi POST vì chúng thường cập nhật dữ liệu trên máy chủ. Tuy nhiên, nhiều biểu mẫu tìm kiếm sử dụng GET vì chúng chỉ tìm nạp dữ liệu mà không thay đổi dữ liệu.

Bảng công cụ dành cho nhà phát triển Chrome đang hiển thị 3 yêu cầu với các phương thức khác nhau: POST, GET và PATCH

Bởi vì dữ liệu POST không phải là một phần của URL nên nó riêng tư hơn so với việc bạn gửi nó qua GET. Dữ liệu vẫn tồn tại trong phần thân của yêu cầu, theo lý thuyết, kẻ tấn công có thể chặn nó. Nhưng việc gửi dữ liệu qua HTTPS sẽ giảm thiểu vấn đề này.

Bạn không bao giờ nên thực hiện đăng nhập người dùng bằng các yêu cầu GET. Mặc dù đăng nhập có vẻ giống thao tác đọc hơn là tạo hoặc cập nhật, nhưng bạn vẫn cần sử dụng POST để bảo mật dữ liệu.

Vì biểu mẫu HTML chỉ hỗ trợ GET và POST, nên bạn không thể trực tiếp tạo biểu mẫu để xóa tài nguyên trên máy chủ chẳng hạn. Một cách giải quyết phổ biến, tôn trọng các nguyên tắc REST trên máy chủ, là sử dụng một biến giữ chỗ và giả vờ đó là phương thức HTTP gốc. Ví dụ:

 <form method="post">
  <input type="hidden" name="_method" value="DELETE" />
  ...
</form>

Mã phía máy chủ của bạn có thể kiểm tra sự hiện diện của biến ‘phương thức proxy’ này và xử lý nó như thể đó là phương thức thực được sử dụng. Ví dụ: trong PHP:

 $method = $_SERVER["REQUEST_METHOD"];

if (array_key_exists("_method", $_REQUEST)) {
  $method = $_REQUEST["_method"];
}

Gửi yêu cầu HTTP theo chương trình

Web Fetch API cung cấp hàm JavaScript tìm nạp() mà bạn có thể sử dụng để gửi yêu cầu HTTP. Nó hỗ trợ đầy đủ các phương thức, không chỉ GET và POST mà HTML hỗ trợ.

Chức năng tìm nạp sẽ gửi yêu cầu GET theo mặc định. Để sử dụng một phương thức khác, hãy chỉ định tên của nó làm giá trị cho một phương pháp thuộc tính trong một đối tượng mà bạn gửi làm đối số thứ hai.

 fetch('https://example.com/', { method: "HEAD" });

Bạn cũng có thể gửi yêu cầu HTTP từ nhiều ngôn ngữ phía máy chủ, bao gồm cả PHP. Trong ngôn ngữ đó, thư viện curl là một cách phổ biến để gửi các yêu cầu như vậy.

Thư viện curl có tùy chọn CURLOPT_CUSTOMREQUEST mà bạn có thể đặt để chỉ định một phương thức

 if ($ch = curl_init($url)) {
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_exec($ch);
    
}

Thông qua dòng lệnh

Công cụ dòng lệnh curl cho phép bạn truyền dữ liệu đến hoặc từ máy chủ, thông qua một trong số các giao thức. HTTP (và HTTPS) là hai trường hợp sử dụng rất phổ biến.

Theo mặc định, curl gửi yêu cầu GET, bạn có thể xác nhận bằng lệnh sau:

 curl -v -s -o /dev/null example.com/get-test

Bạn có thể thấy phương thức yêu cầu trên dòng thứ năm của kết quả:

Một ví dụ GET yêu cầu sử dụng curl.

Bạn có thể thay đổi phương thức yêu cầu mà curl gửi bằng cờ -X:

 curl -v -s -o /dev/null example.com/get-test -X POST

Bây giờ, curl gửi một yêu cầu bằng phương thức POST:

Một ví dụ yêu cầu POST sử dụng curl.

HTTP có nhiều công dụng

Hầu hết những gì bạn làm trên web sẽ liên quan đến các yêu cầu GET tiêu chuẩn, thỉnh thoảng có POST để gửi biểu mẫu. Nhưng HTTP là một giao thức biểu cảm hơn nhiều so với điều này gợi ý.

Một số phương pháp phổ biến nhất phản ánh mô hình CRUD, điều này làm cho HTTP trở thành cơ sở tuyệt vời để xây dựng API tập trung vào tài nguyên.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *