Maison > Article > interface Web > Comment comprendre le type de contenu en HTTP
Afficher le plug-in d'en-tête de l'API Restful : plug-in Chrome REST Console et outil d'envoi d'API Restful : plug-in Chrome POST Man
Dans la spécification HTTP 1.1, les méthodes de requête HTTP incluent OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
Habituellement, nous utilisons uniquement GET et POST, mais pour Restful selon Selon la spécification de l'API, la méthode PUT doit être utilisée pour demander des ressources et la méthode DELETE doit être utilisée pour supprimer des ressources.
Par exemple, envoyez un paquet DELETE :
http://example.com/my/resource?id=12345
Ensuite, vous pouvez obtenir les informations via l'identifiant. Ce paquet n'a qu'un en-tête et aucun corps. discutez-en quelques-uns. Le format de transmission du corps du paquet contenant le corps.
Content-Type est utilisé pour spécifier le type de contenu, qui fait généralement référence au Content-Type qui existe dans la page Web. L'attribut spécifie le type de contenu de la requête HTTP et de la réponse. Si ContentType n’est pas spécifié, la valeur par défaut est text/html.
Il existe un fichier de configuration mime.types
dans nginx, qui indique principalement le format de fichier de Content-Type.
Voici plusieurs types de contenu courants :
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
...
Les premiers sont faciles à comprendre, ce sont tous des types de fichiers HTML, CSS et Javascript, et les quatre derniers sont des méthodes de livraison POST.
application/x-www-form-urlencoded
est une méthode de livraison de formulaire couramment utilisée. La soumission de formulaire ordinaire ou la livraison js se fait par défaut. De cette façon,
Par exemple, un formulaire simple :
<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>
Ensuite l'entête brut reçu par le serveur sera similaire :
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
Ensuite l'en-tête brut corps reçu par le serveur Ce sera, name=homeway&key=nokey
, en php, vous pouvez obtenir des données sous forme de tableau via $_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');
Envoyer les données au serveur sous forme json Au début, j'ai essayé d'envoyer le package au format application/json
au serveur via curl,
--------------------------e1e1406176ee348a Disposition du contenu : nom-données du formulaire="nid" 2 --------------------------e1e1406176ee348a Disposition du contenu : nom des données du formulaire ; ="uuid" cf9dc994-a4e7-3ad6-bc54-41965b2a0dd7 --------------------------e1e1406176ee348a Disposition du contenu : form-data name="access_token" 956731586df41229dbfec08dd5d54eedb98d73d2 --------- ----e1e1406176ee348a--Plus tard, j'ai compris qu'il n'y avait pas de soi-disant json dans la communication HTTP, mais une conversion de chaîne Cela devient simplement json, c'est-à-dire que
peut être compris comme application/json
, une chaîne ordinaire. text/plain
Il devrait y avoir un problème de conversion lorsque le tableau PHP est transféré dans-------
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!