4 つの一般的な POST データ送信方法 (短い概要)、4 つの post_PHP チュートリアル
4 つの一般的な POST データ送信メソッド (短い概要)、4 つの post
HTTP/1.1 プロトコルで規定された HTTP リクエスト メソッドには、OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT が含まれます。このうち、POST は通常、サーバーにデータを送信するために使用されます。この記事では主に、POST を通じてデータを送信するいくつかの方法について説明します。HTTP プロトコルは ASCII コードで送信され、TCP/IP プロトコルに基づくアプリケーション層の仕様であることがわかっています。この仕様では、HTTP リクエストをステータス行、リクエスト ヘッダー、メッセージ本文の 3 つの部分に分割しています。次のような形式:
リーリー
プロトコルは、POST によって送信されたデータをメッセージ本文 (entity-body) に配置する必要があると規定していますが、データがどのようなエンコード方式を使用する必要があるかはプロトコルで指定されていません。実際、送信される最後の HTTP リクエストが上記の形式を満たしている限り、開発者はメッセージ本文の形式を自分で完全に決定できます。ただし、データが送信される前に、サーバーがデータを正常に解析できた場合にのみ意味を持ちます。 php、python、Java、.NET などの一般的なサーバーサイド言語とそのフレームワークには、一般的なデータ形式を自動的に解析するための関数が組み込まれています。サーバーは通常、リクエストのメッセージ本文がリクエスト ヘッダーの Content-Type フィールドに基づいてエンコードされる方法を学習し、本文を解析します。つまり、Content-Type はメッセージ本文のエンコーディングを指定します。したがって、POST 送信データ スキームは Content-Type とメッセージ本文に直接関連しています。
application/x-www-form-urlencoded
これは、POST 経由でデータを送信する最も一般的な方法です。ブラウザのネイティブ フォーム フォームは、enctype 属性が設定されていない場合、最終的に application/x-www-form-urlencoded メソッド (enctype の POST デフォルト メソッド) でデータを送信します。リクエストは次のようなものです (この記事では無関係なリクエスト ヘッダーは省略しています):http://www.example.com HTTP/1.1 を投稿
Content-Type: application/x-www-form-urlencoded;charset=utf-8
title=テスト&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3
次に、送信されたデータは key1=val1&key2=val2 に従ってエンコードされ、key と val の両方が URL トランスコードされます。ほとんどのサーバーサイド言語は、このメソッドを適切にサポートしています。たとえば、PHP では、$_POST['title'] はタイトルの値を取得でき、$_POST['sub'] はサブ配列を取得できます。
マルチパート/フォームデータ
この POST メソッドも非常に一般的です。フォームを使用してファイルをアップロードする場合、フォームの enctyped はこの値と等しくなければなりません。以下に例を示します:http://www.example.com HTTP/1.1 を投稿
Content-Type:multipart/form-data; 境界=---WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
コンテンツの配置: フォームデータ名 = "テキスト"
タイトル
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
コンテンツの配置: フォームデータ = ファイル名 = "chrome.png";
コンテンツタイプ: 画像/png
PNG ...chrome.png の内容 ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
この例はもう少し複雑です。まず、テキストの内容との重複を避けるために、異なるフィールドを区切るために境界が生成されます。境界は非常に長く複雑です。次に、Content-Type は、データが mutipart/form-data でエンコードされることと、このリクエストの境界が何かを指定します。メッセージ本文は、フィールドの数に応じて同様の構造を持つ複数の部分に分割されます。各部分は --boundary で始まり、その後に内容の説明情報、改行、最後にフィールドの特定の内容 (テキストまたはバイナリ) が続きます。 。ファイルを転送する場合は、ファイル名とファイル タイプの情報も含める必要があります。メッセージ本文は --boundary-- フラグで終わります。 mutipart/form-data の詳細な定義については、rfc1867 を参照してください。
この方法は一般にファイルをアップロードするために使用され、主要なサーバー言語でもこの方法が適切にサポートされています。
上記の 2 つの POST データ メソッドはブラウザーでネイティブにサポートされており、現段階ではネイティブ フォームはこれら 2 つのメソッドのみをサポートしています。しかし、ますます多くの Web サイト、特に WebApp がデータのやり取りに Ajax を使用するようになっているため、新しいデータ送信メソッドを完全に定義して開発の利便性を高めることができます。
アプリケーション/json application/json この Content-Type は、応答ヘッダーとして誰もがよく知っています。現在、これをリクエスト ヘッダーとして使用して、メッセージ本文がシリアル化された JSON 文字列であることをサーバーに伝える人が増えています。 JSON 仕様の普及により、IE の下位バージョンを除くすべての主要なブラウザは、JSON.stringify をネイティブでサポートしているため、JSON を処理する機能も備えています。そのため、JSON を使用する際に問題は発生しません。
JSON 格式支持比键值对复杂得多的结构化数据,这一点很有用。记得,我几年前做一个项目时,需要提交的数据层次非常深,我就是把数据 JSON 序列化之后来提交的。不过当时我是把 JSON 字符串作为 val,仍然放在键值对里,以 x-www-form-urlencoded 方式提交。
Google 的 AngularJS 中的 Ajax 功能,默认就是提交 JSON 字符串。例如下面代码:
var data = {'title':'test', 'sub' : [1,2,3]}; $http.post(url, data).success(function(result) { ... });
最终发送的请求是:
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 成对象。一些 php 框架已经开始这么做了。
当然 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> </param> </params> </methodCall>
XML-RPC 协议简单、功能够用,各种语言的实现都有。它的使用也很广泛,如 WordPress 的 XML-RPC Api,搜索引擎的 ping 服务等等。JavaScript 中,也有现成的库支持以这种方式进行数据交互,能很好的支持已有的 XML-RPC 服务。不过,我个人觉得 XML 结构还是过于臃肿,一般场景用 JSON 会更灵活方便。
以上内容是小编跟大家分享的常见的四种POST 提交数据方式,希望大家喜欢。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











ここ数日、Ice Universeは、サムスンの次期主力スマートフォンであると広く信じられているGalaxy S25 Ultraの詳細を着実に明らかにしている。とりわけ、リーカーはサムスンがカメラのアップグレードを1つだけ計画していると主張した

OnLeaks は、X (旧 Twitter) のフォロワーから 4,000 ドル以上を集めようとして失敗した数日後、Android Headlines と提携して Galaxy S25 Ultra のファーストルックを提供しました。コンテキストとして、h の下に埋め込まれたレンダリング イメージ

TCLは、2つの新しいスマートフォンの発表に加えて、NXTPAPER 14と呼ばれる新しいAndroidタブレットも発表しました。その巨大な画面サイズはセールスポイントの1つです。 NXTPAPER 14 は、TCL の代表的なブランドであるマット LCD パネルのバージョン 3.0 を搭載しています。

Vivo Y300 Pro は完全に公開されたばかりで、大容量バッテリーを備えた最もスリムなミッドレンジ Android スマートフォンの 1 つです。正確に言うと、このスマートフォンの厚さはわずか 7.69 mm ですが、6,500 mAh のバッテリーを搭載しています。これは最近発売されたものと同じ容量です

サムスンは、ファンエディション(FE)スマートフォンシリーズをいつアップデートするかについて、まだ何のヒントも提供していない。現時点では、Galaxy S23 FE は 2023 年 10 月初めに発表された同社の最新版のままです。

ここ数日、Ice Universeは、サムスンの次期主力スマートフォンであると広く信じられているGalaxy S25 Ultraの詳細を着実に明らかにしている。とりわけ、リーカーはサムスンがカメラのアップグレードを1つだけ計画していると主張した

Redmi Note 14 Pro Plusは、昨年のRedmi Note 13 Pro Plus(Amazonで現在375ドル)の直接の後継者として正式に発表されました。予想通り、Redmi Note 14 Pro Plusは、Redmi Note 14およびRedmi Note 14 Proと並んでRedmi Note 14シリーズをリードします。李

OnePlus の姉妹ブランドである iQOO の製品サイクルは 2023 年から 4 年で、ほぼ終わりに近づいている可能性があります。それにもかかわらず、ブランドはまだZ9シリーズの開発を終えていないと宣言しました。その最終、そしておそらく最高エンドとなる Turbo+ バリアントが、予測どおりに発表されました。 T
