Home >Web Front-end >JS Tutorial >How to understand Content-Type in HTTP
View Restful API header plug-in: Chrome plug-in REST Console, and tool for sending Restful API: Chrome plug-in POST Man
In the HTTP 1.1 specification, HTTP request methods include OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
Usually we only use GET and POST, but for Restful According to the API specification, the PUT method should be used to request resources, and the DELETE method should be used to delete resources.
For example, send a DELETE packet:
http://example.com/my/resource?id=12345
Then the information can be obtained through the id. This packet only has a header and does not have a body. Let’s discuss some of the following: The body transmission format of the package.
Content-Type is used to specify the content type, which generally refers to the Content-Type that exists in the web page. The Content-Type attribute specifies the HTTP request and response. Content type. If ContentType is not specified, it defaults to text/html.
There is a configuration file mime.types
in nginx, which is mainly the file format indicating Content-Type.
The following are several common Content-Types:
1.text/html
2.text/plain
3.text/css
4.text/ javascript
5.application/x-www-form-urlencoded
6.multipart/form-data
7.application/json
8.application/xml
...
The first few are easy to understand. They are all file types of html, css, and javascript. The last four are POST delivery methods.
application/x-www-form-urlencoded
is a commonly used form delivery method, ordinary Form submission, or js package delivery, is done in this way by default.
For example, if a simple form is:
<form enctype="application/x-www-form-urlencoded" action="http://homeway.me/post.php" method="POST"> <input type="text" name="name" value="homeway"> <input type="text" name="key" value="nokey"> <input type="submit" value="submit"> </form>
, then the raw header received by the server will be similar to:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Encoding:gzip, deflateAccept-Language:zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,gl;q=0.2,de;q=0.2Cache-Control:no-cacheConnection:keep-aliveContent-Length:17Content-Type:application/x-www-form-urlencoded
Then the raw body received by the server will be, name=homeway&key=nokey
. In PHP, data in array form can be obtained through $_POST.
multipart/form-data
用在发送文件的POST包。
这里假设我用python的request发送一个文件给服务器:
data = { "key1": "123", "key2": "456", } files = {'file': open('index.py', 'rb')} res = requests.post(url="http://localhost/upload", method="POST", data=data, files=files) print res
通过工具,可以看到我发送的数据内容如下:
POST http://www.homeway.me HTTP/1.1Content-Type:multipart/form-data; boundary=------WebKitFormBoundaryOGkWPJsSaJCPWjZP ------WebKitFormBoundaryOGkWPJsSaJCPWjZP Content-Disposition: form-data; name="key2"456------WebKitFormBoundaryOGkWPJsSaJCPWjZP Content-Disposition: form-data; name="key1"123------WebKitFormBoundaryOGkWPJsSaJCPWjZP Content-Disposition: form-data; name="file"; filename="index.py"
这里Content-Type
告诉我们,发包是以multipart/form-data
格式来传输,另外,还有boundary
用于分割数据。
当文件太长,HTTP无法在一个包之内发送完毕,就需要分割数据,分割成一个一个chunk发送给服务端,
那么--
用于区分数据快,而后面的数据633e61ebf351484f9124d63ce76d8469
就是标示区分包作用。
微信用的是这种数据格式发送请求的。
POST http://www.homeway.me HTTP/1.1 Content-Type: text/xml<?xml version="1.0"?><resource> <id>123</id> <params> <name> <value>homeway</value> </name> <age> <value>22</value> </age> </params></resource>
php中$_POST
只能读取application/x-www-form-urlencoded
数据,$_FILES
只能读取multipart/form-data
类型数据,
那么,要读取text/xml
格式的数据,可以用:
$file = fopen('php://input', 'rb'); $data = fread($file, length); fclose($file);
或者
$data = file_get_contents('php://input');
Send data to the server in json format. At first, I tried to send the application/json
format to the server through curl. package,
However the data I received is as follows:
------------------------- -e1e1406176ee348a Content-Disposition: form-data; name="nid" 2 --------------------------e1e1406176ee348a Content-Disposition: form-data ; name="uuid" cf9dc994-a4e7-3ad6-bc54-41965b2a0dd7 --------------------------e1e1406176ee348a Content-Disposition: form-data; name="access_token" 956731586df41229dbfec08dd5d54eedb98d73d2 --------- ------------------e1e1406176ee348a--
After thinking about it, I realized that there is no so-called json in HTTP communication, but string conversion It just becomes json, that is, application/json
can be understood as text/plain
, a normal string.
The reason why there are so many messy things-------
It should be that the PHP array is transferred in, and there is a conversion problem
The above is the detailed content of How to understand Content-Type in HTTP. For more information, please follow other related articles on the PHP Chinese website!