Heim >Web-Frontend >js-Tutorial >So verstehen Sie den Inhaltstyp in HTTP

So verstehen Sie den Inhaltstyp in HTTP

一个新手
一个新手Original
2017-09-14 11:03:222518Durchsuche

0x01.About

Restful API-Header-Plug-in anzeigen: Chrome-Plug-in REST Konsole und Tool zum Senden von Restful API: Chrome-Plug-in POST Man

In der HTTP 1.1-Spezifikation umfassen HTTP-Anforderungsmethoden OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT

Normalerweise verwenden wir nur GET und POST, aber für Restful Entsprechend Gemäß der API-Spezifikation sollte die PUT-Methode zum Anfordern von Ressourcen und die DELETE-Methode zum Löschen von Ressourcen verwendet werden.

Senden Sie beispielsweise ein DELETE-Paket:

http://example.com/my/resource?id=12345

Dieses Paket hat nur einen Header und keinen Text Besprechen Sie ein paar Das Format der Körperübertragung des Pakets, das den Körper enthält.


0x02.Content-Type

Content-Type wird verwendet, um den Inhaltstyp anzugeben, der sich im Allgemeinen auf den Inhaltstyp bezieht, der auf der Webseite vorhanden ist Das Attribut gibt den Inhaltstyp der HTTP-Anforderung und -Antwort an. Wenn ContentType nicht angegeben ist, wird standardmäßig text/html verwendet.

In Nginx gibt es eine Konfigurationsdatei mime.types, die hauptsächlich das Dateiformat des Inhaltstyps angibt.

Im Folgenden sind einige gängige Inhaltstypen aufgeführt:

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
...

Die ersten paar sind leicht zu verstehen, sie sind alle Dateitypen von HTML, CSS und Javascript, und die letzten vier sind POST-Übermittlungsmethoden.


0x03.application/x-www-form-urlencoded

application/x-www-form-urlencoded ist eine häufig verwendete Formularübermittlungsmethode oder die JS-Übermittlung erfolgt standardmäßig über diese Methode. Auf diese Weise

Zum Beispiel ein einfaches Formular:

<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>

Dann ist der vom Server empfangene Roh-Header ähnlich:

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

Dann der Roh-Header Körper vom Server empfangen Es wird sein, name=homeway&key=nokey, in PHP können Sie Daten in Array-Form über $_POST abrufen.


0x04.multipart/form-data

multipart/form-data用在发送文件的POST包。

这里假设我用python的request发送一个文件给服务器:

data = {    
"key1": "123",    
"key2": "456",
}
files = {&#39;file&#39;: open(&#39;index.py&#39;, &#39;rb&#39;)}
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就是标示区分包作用。


0x05.text/xml

微信用的是这种数据格式发送请求的。

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(&#39;php://input&#39;, &#39;rb&#39;);
$data = fread($file, length);
fclose($file);

或者

$data = file_get_contents('php://input');


0x06.application/json

Daten im JSON-Format an den Server senden. Zuerst habe ich versucht, das application/json-Formatpaket über Curl an den Server zu senden >

Die Daten, die ich erhalten habe, lauten jedoch wie folgt:

-----------------------------------------e1e1406176ee348a Inhaltsdisposition: Formulardaten; Name="nid" 2 ------------------------e1e1406176ee348a Inhaltsdisposition: Formulardatenname; ="uuid" cf9dc994-a4e7-3ad6-bc54-41965b2a0dd7 -----------e1e1406176ee348a Inhaltsdisposition: form-data = "access_token" 956731586df41229dbfec08dd5d54eedb98d73d2 --------- ----e1e1406176ee348a--

Später habe ich herausgefunden, dass es in der HTTP-Kommunikation kein sogenanntes JSON gibt, sondern eine String-Konvertierung Es wird einfach zu JSON, das heißt,

kann als application/json, eine gewöhnliche Zeichenfolge, verstanden werden. text/plain

Der Grund, warum es so viele Probleme gibt

, ist wahrscheinlich das Konvertierungsproblem bei der Übertragung des PHP-Arrays in -------

Das obige ist der detaillierte Inhalt vonSo verstehen Sie den Inhaltstyp in HTTP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn