In HTTP POST requests, the common methods for sending parameters are primarily two: using application/x-www-form-urlencoded format and using multipart/form-data format. Below, I will provide a detailed explanation of both methods and how to use them.
1. Using application/x-www-form-urlencoded
This is the most common method for sending POST request parameters. In this case, POST data is encoded as key-value pairs, similar to query strings. Each key-value pair is separated by &, and each key is associated with its value using =. Additionally, data must be URL-encoded before transmission to handle unsafe characters.
Example:
Assume we need to send a username (username) and password (password):
shellusername=example&password=123456
In an HTTP request, it would appear as follows:
httpPOST /login HTTP/1.1 Host: example.com Content-Type: application/x-www-form-urlencoded Content-Length: 27 username=example&password=123456
2. Using multipart/form-data
When sending files or non-ASCII data in a POST request, multipart/form-data is typically used. This format allows the request to be split into multiple parts, each with its own content type and encoding. It is particularly useful for file uploads.
Example:
Assume we need to send text information along with uploading an image:
httpPOST /profile-update HTTP/1.1 Host: example.com Content-Type: multipart/form-data; boundary=---123456 ---123456 Content-Disposition: form-data; name="username" example ---123456 Content-Disposition: form-data; name="avatar"; filename="photo.png" Content-Type: image/png <file data> ---123456--
In this request, boundary serves as the delimiter separating each part. Each part includes Content-Disposition to describe field information, and for files, it also specifies the filename and content type. After each part's data, it is separated by boundary followed by --.
Summary
The choice depends on the data type and requirements. application/x-www-form-urlencoded is suitable for sending simple text data, while multipart/form-data is ideal for cases involving files and large data volumes. In actual development, you should select the appropriate content type based on specific circumstances to properly format HTTP POST request parameters.