Http中Content-Type的取值讲解
在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息(MediaType,即是Internet Media Type,互联网媒体类型;也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息),但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值:
- 常见的媒体格式类型:Content-Type: text/html;charset:utf-8;
text/html : HTML格式
text/plain :纯文本格式
text/xml : XML格式
image/gif :gif图片格式
image/jpeg :jpg图片格式
image/png:png图片格式
2. 以application开头的媒体格式类型:
application/json : JSON数据格式
application/pdf :pdf格式
application/msword : Word文档格式
application/octet-stream : 二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded 应用于表单
application/xml : XML数据格式
application/atom+xml :Atom XML聚合格式
3. 当在表单中需要上传文件的时候,使用的媒体格式类型是:multipart/form-data
二、四种常见的POST提交数据方式的媒体格式类型详解
1、application/json
application/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。
2、application/x-www-form-urlencoded(Content-Type: application/x-www-form-urlencoded;charset=utf-8 )
这应该是最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 encType 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据;
3、multipart/form-data
当使用表单上传文件时,必须设置encType属性为这个请求头
4、text/xml
尚未使用,如遇到的话会持续进行更新
1.模拟HTTP/get传递参数
//PHP模拟get传参数 $url="www.first.session.com"; $hd = fsockopen($url,80,$errno,$msg,30); $header="GET /file/demo01.php?name=lisi&age=20 HTTP/1.1"."\r\n"; $header.="Host:$url"."\r\n"; $header.="Content-type:application/x-www-form-urlencoded"."\r\n"; $header.="\r\n"; fwrite($hd, $header); $content = stream_get_contents($hd); var_dump($content);
2.模拟HTTP/post请求传递参数
//PHP模拟POST传参数 $url="www.first.session.com"; $fd = fsockopen($url,80,$errno,$msg,30); #-------------------------------------------------- $content="----ABC\r\n"; $content.='Content-Disposition:form-data;name="username"'."\r\n\r\n"; $content.="lisi\r\n"; #-------------------------------------------------- $content.="----ABC\r\n"; $content.='Content-Disposition:form-data;name="age"'."\r\n\r\n"; $content.="20\r\n"; #------------------------------------------------- $content.="----ABC--\r\n\r\n"; #------------------------------------------------- $out = "POST /file/demo01.php HTTP/1.1"."\r\n"; $out .= "HOST:$url\r\n"; $out .= "Connection: keep-alive\r\n"; $out.="Content-Type:multipart/form-data;boundary=--ABC\r\n"; $out.="Content-Length:".strlen($content)."\r\n"; $out.="\r\n"; $out.=$content; fwrite($fd, $out); $contents = stream_get_contents($fd); var_dump($contents);
3.php模拟HTTP文件上传
//PHP模拟POST&文件上传 $url="www.first.session.com"; $fd = fsockopen($url,80,$errno,$msg,30); $content="----ABC\r\n"; $content.='Content-Disposition:form-data;name="username"'."\r\n\r\n"; $content.="lisi\r\n"; #------------------------------------------------------------- $content.= "----ABC\r\n"; $content.='Content-Disposition:form-data;name="ufile";filename="timg.jpg"'."\r\n"; $content.="Content-Type:image/jpg\r\n\r\n"; $content.=file_get_contents("./timg.jpg")."\r\n"; $content.="----ABC--"."\r\n\r\n"; #------------------------------------------------------------- $out = "POST /file/demo01.php HTTP/1.1"."\r\n"; $out .= "HOST:$url\r\n"; $out .= "Connection: keep-alive\r\n"; $out.="Content-Type:multipart/form-data;boundary=--ABC\r\n"; $out.="Content-Length:".strlen($content)."\r\n"; $out.="\r\n"; $out.=$content; fwrite($fd, $out); $contents = stream_get_contents($fd); var_dump($contents);