http请求四种常见的POST提交数据方式

http请求常见的content-type分为4种:application/json、x-www-form-urlencoded、multipart/form-data、text/plain。

enctype属性规定在发送到服务器之前应该如何对表单数据进行编码。默认地,表单数据会编码为“application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为”+“加号,特殊符号转换为ASCII HEX值)。

enctye可选项如下:

1 概述

HTTP/1.1 协议规定的HTTP请求方法有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT这几种。其中POST一般用来向服务端提交数据,本文主要讨论POST提交数据的几种方式。

HTTP协议是以ASCII码传输。他是建立在TCP/IP协议之上的应用层规范,规定HTTP请求分为三个部分:

。状态行

。headers请求头

。entity-body消息主体

类似于下面这样:

HTTP协议规定POST提交的数据必须放在消息主体(entity-body)中,但并没有规定数据必须使用什么编码方式。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的HTTP请求满足上面的格式就可以。

单数,数据发送出去,还要服务端解析成功才有意义。一般服务端语言如php、python等,以及他们的framework,都内置了自动解析常见数据格式的功能。服务端通常是根据请求头(headers)中的Content-Type字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。所以POST提交数据包含了Content-Type和消息主体编码方式两部分,下面就正式开始介绍它们。

2、简介

1)application/x-www-form-urlencoded

HTTP中默认的提交数据的方式。浏览器的原生<form>表单,如果不设置enctype属性,那么最终就会以application/x-www-form-urlencoded方式提交数据。请求类似于下面这样:
通过抓包结果我们能得到以下结论:

。Content-Type被指定为application/x-www-form-urlencoded
。提交的数据按照key1=val1&key2=val2的方式进行编码,key和val都进行了URL转码。大部分服务端语言都对这种方式有很好的支持。

2)multipart/form-data

一个常见的POST数据提交的方式。我们使用表单上传文件时,必须将enctype设为multipart/form-data。

3)application/json

application/json作为请求头,用来告诉服务端消息主体是序列化的JSON字符串。方便提交复杂的结构化数据,特别适合RESTFul接口。最终发送的请求类似下面这样:
各大抓包工具如Chrome自带的开发者工具、Firebug、Fiddler,都会以树形结构展示JSON数据,非常友好。最终发送的请求的是:

4)text/xml

XML-RPC(XML Remote Procdure Call)。它是一种使用HTTP作为传输协议,XML作为编码方式的远程调用规范。典型的XML-RPC请求是这样的:
XML-RPC协议简单、功能够用,各种语言的实现都有。它的使用也很广泛,如 搜索引擎的ping服务等。

猜你喜欢

转载自www.cnblogs.com/relustarry/p/12525893.html