Giao thức truyền tải siêu văn bản (HTTP) được thiết kế để cho phép liên lạc giữa máy khách và máy chủ Show
HTTP hoạt động như một giao thức phản hồi yêu cầu giữa máy khách và máy chủ Ví dụ. Máy khách (trình duyệt) gửi yêu cầu HTTP đến máy chủ; . Phản hồi chứa thông tin trạng thái về yêu cầu và cũng có thể chứa nội dung được yêu cầu
Hai phương thức HTTP phổ biến nhất là. NHẬN và ĐĂNG Phương thức NHẬNGET được sử dụng để yêu cầu dữ liệu từ một tài nguyên được chỉ định Lưu ý rằng chuỗi truy vấn (cặp tên/giá trị) được gửi trong URL của yêu cầu GET /test/demo_form. php?name1=value1&name2=value2 Một số lưu ý về yêu cầu GET
Phương thức ĐĂNGPOST được sử dụng để gửi dữ liệu đến máy chủ để tạo/cập nhật tài nguyên Dữ liệu được gửi đến máy chủ bằng POST được lưu trữ trong phần thân yêu cầu của yêu cầu HTTP ĐĂNG /test/demo_form. php HTTP/1. 1 name1=value1&name2=value2 Một số lưu ý về yêu cầu POST
So sánh NHẬN với. BƯU KIỆNBảng sau đây so sánh hai phương thức HTTP. NHẬN và ĐĂNG Nút GETPOSTBACK/ReloadHarmlessDữ liệu sẽ được gửi lại (trình duyệt sẽ thông báo cho người dùng rằng dữ liệu sắp được gửi lại) Đã đánh dấu Có thể đánh dấu Không thể đánh dấu Đã lưu vào bộ đệm Có thể lưu vào bộ đệm Không lưu vào bộ đệm Loại ứng dụng mã hóa/x-www-form-urlencodedapplication/x-www-form . Sử dụng mã hóa nhiều phần cho dữ liệu nhị phânLịch sửCác tham số vẫn còn trong lịch sử trình duyệtCác tham số không được lưu trong lịch sử trình duyệtHạn chế về độ dài dữ liệuCó, khi gửi dữ liệu, phương thức GET sẽ thêm dữ liệu vào URL; . Dữ liệu nhị phân cũng được phépSecurityGET kém an toàn hơn so với POST vì dữ liệu được gửi là một phần của URL Không bao giờ sử dụng GET khi gửi mật khẩu hoặc thông tin nhạy cảm khác POST an toàn hơn một chút so với GET vì các tham số không được lưu trữ trong lịch sử trình duyệt hoặc trong nhật ký máy chủ webVisibilityData hiển thị cho mọi người trong URLDữ liệu không được hiển thị trong URLPhương pháp PUTPUT được sử dụng để gửi dữ liệu đến máy chủ để tạo/cập nhật tài nguyên Sự khác biệt giữa POST và PUT là các yêu cầu PUT là bình thường. Nghĩa là, gọi cùng một yêu cầu PUT nhiều lần sẽ luôn tạo ra cùng một kết quả. Ngược lại, gọi một yêu cầu POST liên tục có tác dụng phụ là tạo cùng một tài nguyên nhiều lần Phương pháp HEADHEAD gần giống với GET, nhưng không có phần thân phản hồi Nói cách khác, nếu GET /users trả về danh sách người dùng, thì HEAD /users sẽ đưa ra yêu cầu tương tự nhưng sẽ không trả về danh sách người dùng Các yêu cầu HEAD rất hữu ích để kiểm tra xem yêu cầu GET sẽ trả về cái gì trước khi thực sự thực hiện yêu cầu GET - như trước khi tải xuống một tệp lớn hoặc nội dung phản hồi Phương thức XÓAPhương thức DELETE xóa tài nguyên đã chỉ định Phương pháp PATCHPhương thức PATCH được sử dụng để áp dụng các sửa đổi một phần cho tài nguyên Phương pháp TÙY CHỌNPhương thức TÙY CHỌN mô tả các tùy chọn giao tiếp cho tài nguyên đích Phương thức KẾT NỐIPhương thức CONNECT được sử dụng để bắt đầu liên lạc hai chiều (đường hầm) với tài nguyên được yêu cầu Phương pháp TRACEPhương pháp TRACE được sử dụng để thực hiện kiểm tra lặp lại thông báo kiểm tra đường dẫn cho tài nguyên đích (hữu ích cho mục đích gỡ lỗi) PHP $_GET là một biến siêu toàn cầu PHP được sử dụng để thu thập dữ liệu biểu mẫu sau khi gửi biểu mẫu HTML với method="get" $_GET cũng có thể thu thập dữ liệu được gửi trong URL Giả sử chúng ta có một trang HTML chứa một siêu liên kết với các tham số Kiểm tra $GET Khi người dùng nhấp vào liên kết "Test $GET", các thông số "subject" và "web" được gửi đến "test_get. php", và sau đó bạn có thể truy cập các giá trị của chúng trong "test_get. php" với $_GET Sự khác biệt cơ bản giữa METHOD="GET" và METHOD="POST" là chúng tương ứng với các yêu cầu HTTP khác nhau, như được định nghĩa trong HTTP. Quá trình gửi cho cả hai phương pháp bắt đầu theo cùng một cách - a được trình duyệt xây dựng và sau đó được mã hóa theo cách được chỉ định bởi thuộc tính enctype. Đối với METHOD="POST, thuộc tính mã hóa có thể là nhiều phần/biểu mẫu dữ liệu hoặc ứng dụng/x-www-form-urlencoding, trong khi đối với METHOD="GET", chỉ cho phép ứng dụng/x-www-form-urlencoding. Tập dữ liệu biểu mẫu này sau đó được truyền đến máy chủ Để gửi biểu mẫu bằng METHOD="GET", trình duyệt sẽ tạo một URL bằng cách lấy giá trị của thuộc tính hành động, nối thêm ? . Sau đó, trình duyệt xử lý URL này như thể theo một liên kết (hoặc như thể người dùng đã nhập trực tiếp URL). Trình duyệt chia URL thành các phần và nhận ra một máy chủ, sau đó gửi tới máy chủ đó một yêu cầu GET với phần còn lại của URL làm đối số. Máy chủ lấy nó từ đó. Lưu ý rằng quy trình này có nghĩa là dữ liệu biểu mẫu được giới hạn ở mã ASCII. Cần đặc biệt cẩn thận để mã hóa và giải mã các loại ký tự khác khi chuyển chúng qua URL ở định dạng ASCII Việc gửi biểu mẫu có METHOD="POST" khiến yêu cầu POST được gửi, sử dụng giá trị của thuộc tính hành động và thông báo được tạo theo loại nội dung được chỉ định bởi thuộc tính enctype Ưu và nhược điểmVì dữ liệu biểu mẫu được gửi như một phần của URL khi GET được sử dụng --
Sự khác biệt trong xử lý phía máy chủVề nguyên tắc, việc xử lý dữ liệu biểu mẫu đã gửi phụ thuộc vào việc nó được gửi bằng METHOD="GET" hay METHOD="POST". Do dữ liệu được mã hóa theo nhiều cách khác nhau nên cần có các cơ chế giải mã khác nhau. Do đó, nói chung, việc thay đổi PHƯƠNG PHÁP có thể cần phải thay đổi tập lệnh xử lý việc gửi. Ví dụ: khi sử dụng giao diện CGI, tập lệnh sẽ nhận dữ liệu trong biến môi trường (QUERYSTRING) khi GET được sử dụng. Nhưng khi POST được sử dụng, dữ liệu biểu mẫu được truyền vào luồng đầu vào tiêu chuẩn (stdin) và số byte cần đọc được cung cấp bởi tiêu đề Độ dài nội dung Điều gì xảy ra khi các biến GET và POST xung đột?Trong một số ngôn ngữ như PHP, thông tin từ các tham số GET và POST, ngoài việc có sẵn một cách riêng lẻ, còn được kết hợp thành một biến tiện ích e. g. , $_REQUEST trong PHP. Nếu có xung đột—tôi. e. , cùng một tên tham số được sử dụng với các giá trị khác nhau trong GET và POST—sau đó xung đột được giải quyết bằng các quy tắc nhất định. Trong trường hợp của PHP, quyền ưu tiên được quyết định bởi chỉ thị cấu hình. Thứ tự mặc định là EGPCS (môi trường, GET, POST, Cookie, Server). Điều này có nghĩa là biến trong $_GET được ưu tiên hơn $_POST, do đó biến này được ưu tiên hơn $_COOKIE Cách sử dụng được đề xuấtGET được khuyến nghị khi gửi các biểu mẫu "bình thường" - những biểu mẫu không 'làm thay đổi đáng kể trạng thái của thế giới'. Nói cách khác, các biểu mẫu chỉ liên quan đến truy vấn cơ sở dữ liệu. Một quan điểm khác là một số truy vấn tạm thời sẽ có tác dụng tương tự như một truy vấn đơn lẻ. Nếu có liên quan đến cập nhật cơ sở dữ liệu hoặc các hành động khác như kích hoạt email, thì nên sử dụng POST Từ blog nhà phát triển Dropbox trình duyệt không biết chính xác chức năng của một biểu mẫu HTML cụ thể, nhưng nếu biểu mẫu được gửi qua HTTP GET, thì trình duyệt sẽ biết rằng sẽ an toàn để tự động thử gửi lại nếu có lỗi mạng. Đối với các biểu mẫu sử dụng HTTP POST, việc thử lại có thể không an toàn nên trình duyệt sẽ yêu cầu người dùng xác nhận trước Yêu cầu "NHẬN" thường được lưu vào bộ đệm, trong khi yêu cầu "POST" khó có thể được. Đối với các hệ thống truy vấn, điều này có thể có tác động hiệu quả đáng kể, đặc biệt nếu các chuỗi truy vấn đơn giản, vì các bộ đệm có thể phục vụ các truy vấn thường xuyên nhất Trong một số trường hợp nhất định, nên sử dụng POST ngay cả đối với các truy vấn bình thường
Còn HTTPS thì sao?Cập nhật ngày 15 tháng 5 năm 2015. Cụ thể là khi sử dụng HTTPS (HTTP qua TLS/SSL), POST có cung cấp bảo mật nào cao hơn GET không? Đây là một câu hỏi thú vị. Giả sử bạn thực hiện một yêu cầu GET tới một trang web GET https://www.example.com/login.php?user=mickey&passwd=mini Giả sử rằng kết nối Internet của bạn đang bị theo dõi, thông tin nào về yêu cầu này sẽ có sẵn cho kẻ rình mò? Câu trả lời là không. Nếu bạn thực hiện một yêu cầu GET như vậy, kẻ tấn công sẽ chỉ biết những thông tin sau khi theo dõi lưu lượng truy cập web của bạn
Phần đường dẫn của URL — tôi. e. , trang thực tế được yêu cầu, cũng như các tham số chuỗi truy vấn — được bảo vệ (được mã hóa) khi chúng "qua dây" i. e. , đang trên đường đến máy chủ đích. Tình hình hoàn toàn giống với các yêu cầu POST Tuy nhiên, phương thức POST vẫn giữ được một lợi thế ngay cả trong trường hợp HTTPS. Các máy chủ web có xu hướng ghi lại toàn bộ URL được yêu cầu ở dạng văn bản thuần túy trong nhật ký truy cập của chúng; . Điều này áp dụng bất kể HTTP hay HTTPS được sử dụng |