Heim  >  Artikel  >  Web-Frontend  >  So übermitteln Sie Daten per Post in HTML

So übermitteln Sie Daten per Post in HTML

墨辰丷
墨辰丷Original
2018-06-04 15:24:4020611Durchsuche

Zu den durch das HTTP/1.1-Protokoll angegebenen HTTP-Anfragemethoden gehören OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE und CONNECT. POST wird im Allgemeinen zum Senden von Daten an den Server verwendet. In diesem Artikel werden hauptsächlich verschiedene Möglichkeiten zum Senden von Daten per POST erläutert.

Die vom HTTP/1.1-Protokoll angegebenen HTTP-Anforderungsmethoden umfassen OPTIONS, GET, HEAD, POST, PUT, DELETE und TRACE , CONNECT diese Typen. POST wird im Allgemeinen zum Senden von Daten an den Server verwendet. In diesem Artikel werden hauptsächlich verschiedene Möglichkeiten zum Senden von Daten über POST erläutert.

Wir wissen, dass das HTTP-Protokoll im ASCII-Code übertragen wird und eine Spezifikation der Anwendungsschicht ist, die auf dem TCP/IP-Protokoll basiert. Die Spezifikation unterteilt HTTP-Anfragen in drei Teile: Statuszeile, Anforderungsheader und Nachrichtentext. Ähnlich wie folgt:

<method> <request-url> <version>
<headers>
<entity-body></entity-body></headers></version></request-url></method>

Das Protokoll legt fest, dass die von POST übermittelten Daten im Nachrichtentext (Entity-Body) platziert werden müssen, das Protokoll gibt jedoch nicht an, welche Codierungsmethode die Daten verwenden müssen. Tatsächlich können Entwickler das Format des Nachrichtentexts selbst bestimmen, solange die letzte gesendete HTTP-Anfrage dem oben genannten Format entspricht.

Vor dem Versenden der Daten ist es jedoch nur dann sinnvoll, wenn der Server sie erfolgreich analysiert. Allgemeine serverseitige Sprachen wie Java und ihre Frameworks verfügen über integrierte Funktionen zum automatischen Parsen gängiger Datenformate. Der Server lernt normalerweise anhand des Felds „Content-Type“ im Anforderungsheader, wie der Nachrichtentext in der Anfrage codiert ist, und analysiert dann den Text. Wenn es also um das POST-Übermittlungsdatenschema geht, besteht es aus zwei Teilen: Inhaltstyp und Codierungsmethode für den Nachrichtentext. Beginnen wir mit der offiziellen Vorstellung.

application/x-www-form-urlencoded

Dies sollte die gebräuchlichste Methode zur Übermittlung von Daten per POST sein. Wenn für das native Formular des Browsers das Attribut „enctype“ nicht festgelegt ist, werden die Daten schließlich im Modus „application/x-www-form-urlencoded“ übermittelt. Die Anfrage ähnelt der folgenden (irrelevante Anfrageheader werden in diesem Artikel weggelassen):

POST http://www.example.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3

Erstens wird der Inhaltstyp als application/x-www-form-urlencoded angegeben; zweitens werden die übermittelten Daten angegeben gemäß Key1=val1&key2=val2 wird codiert, und sowohl key als auch val werden URL-transcodiert. Die meisten serverseitigen Sprachen unterstützen diese Methode gut. Beispielsweise kann in PHP POST[′title′] den Wert von title abrufen, POST[′title′] kann den Wert von title abrufen und _POST['sub'] kann das Unterarray abrufen.

Oft verwenden wir diese Methode auch bei der Übermittlung von Daten über Ajax. In JQuerys Ajax ist der Standardwert von Content-Type beispielsweise „application/x-www-form-urlencoded;charset=utf-8“.

multipart/form-data

Dies ist eine weitere gängige Methode zur Übermittlung von POST-Daten. Wenn wir ein Formular zum Hochladen von Dateien verwenden, muss der Enctyped des Formulars diesem Wert entsprechen. Schauen wir uns direkt ein Anfragebeispiel an:

POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

Dieses Beispiel ist etwas komplizierter. Zunächst wird eine Grenze generiert, um verschiedene Felder zu trennen. Um Duplikate mit dem Textinhalt zu vermeiden, ist die Grenze sehr lang und kompliziert. Dann gibt Content-Type an, dass die Daten mit Mutipart/Form-Data codiert sind und was der Grenzinhalt dieser Anfrage ist. Der Nachrichtentext ist entsprechend der Anzahl der Felder in mehrere Teile mit ähnlicher Struktur unterteilt. Jeder Teil beginnt mit --boundary, gefolgt von Inhaltsbeschreibungsinformationen, gefolgt von einem Wagenrücklauf und schließlich dem spezifischen Inhalt des Felds (Text oder Binär). . Wenn eine Datei übertragen wird, müssen auch der Dateiname und die Dateitypinformationen enthalten sein. Der Nachrichtentext endet mit dem Flag --boundary--. Die detaillierte Definition von Mutipart/Formulardaten finden Sie unter RFC1867.

Diese Methode wird im Allgemeinen zum Hochladen von Dateien verwendet und wird auch von den wichtigsten Serversprachen gut unterstützt.

Die beiden oben genannten Methoden für POST-Daten werden von Browsern nativ unterstützt, und derzeit unterstützen native Formulare nur diese beiden Methoden. Da jedoch immer mehr Websites, insbesondere WebApps, Ajax für die Dateninteraktion verwenden, können wir vollständig neue Datenübermittlungsmethoden definieren, um die Entwicklung komfortabler zu gestalten.

application/json

application/json Dieser Content-Type ist als Response-Header sicherlich jedem bekannt. Tatsächlich verwenden ihn immer mehr Menschen als Anforderungsheader, um dem Server mitzuteilen, dass der Nachrichtentext eine serialisierte JSON-Zeichenfolge ist. Aufgrund der Beliebtheit der JSON-Spezifikation unterstützen alle gängigen Browser mit Ausnahme niedrigerer Versionen von IE nativ JSON.stringify. Serverseitige Sprachen verfügen auch über Funktionen zur Verarbeitung von JSON, sodass Sie bei der Verwendung von JSON keine Probleme haben.

Es ist auch nützlich, dass das JSON-Format viel komplexere strukturierte Daten unterstützt als Schlüssel-Wert-Paare. Ich erinnere mich, dass ich vor einigen Jahren an einem Projekt gearbeitet habe und die Daten, die übermittelt werden mussten, eine sehr tiefe Ebene hatten. Ich habe die Daten in JSON serialisiert und übermittelt. Aber damals habe ich den JSON-String als Wert verwendet, ihn immer noch in das Schlüssel-Wert-Paar eingefügt und ihn im x-www-form-urlencoded-Modus übermittelt.

Die Ajax-Funktion in Googles AngularJS übermittelt standardmäßig einen JSON-String. Zum Beispiel der folgende Code:

var data = {&#39;title&#39;:&#39;test&#39;, &#39;sub&#39; : [1,2,3]};
$http.post(url, data).success(function(result) {
...
});

Die letzte gesendete Anfrage lautet:

POST http://www.example.com HTTP/1.1
Content-Type: application/json;charset=utf-8
{"title":"test","sub":[1,2,3]}

这种方案,可以方便的提交复杂的结构化数据,特别适合 RESTful 的接口。各大抓包工具如 Chrome 自带的开发者工具、Firebug、Fiddler,都会以树形结构展示 JSON 数据,非常友好。但也有些服务端语言还没有支持这种方式,例如 php 就无法通过 $_POST 对象从上面的请求中获得内容。这时候,需要自己动手处理下:在请求头中 Content-Type 为 application/json 时,从 php://input 里获得原始输入流,再 json_decode 成对象。一些 Java 框架已经开始这么做了。

当然 AngularJS 也可以配置为使用 x-www-form-urlencoded 方式提交数据。

text/xml

XML-RPC(XML Remote Procedure Call)。它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范。典型的 XML-RPC 请求是这样的:
POST http://www.example.com HTTP/1.1
Content-Type: text/xml
<!--?xml version="1.0"?-->
<methodcall>
<methodname>examples.getStateName</methodname>
<params>
<param>
<value><i4>41</i4></value>
</params>
</methodcall>

XML-RPC 协议简单、功能够用,各种语言的实现都有。它的使用也很广泛,如 WordPress 的 XML-RPC Api,搜索引擎的 ping 服务等等。JavaScript 中,也有现成的库支持以这种方式进行数据交互,能很好的支持已有的 XML-RPC 服务。不过,我个人觉得 XML 结构还是过于臃肿,一般场景用 JSON 会更灵活方便。

总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。

相关推荐:

php ajax提交post请求出现数组被截断情况的解决方法

Android+PHP 使用HttpClient提交POST的请求,使用JSON解析响应

php提交post数组参数实例分析

Das obige ist der detaillierte Inhalt vonSo übermitteln Sie Daten per Post in HTML. 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