2018/06/07 HTTP 中 Content-Type 的作用

在此之前先看一个小例子:

<?php
    var_dump($_FILES);?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Page Title</title>
</head>
<body>
    <form action="" method="POST">
        <input type="file" name="file">
        <input type="submit" value="submit">
    </form>
</body>
</html>
$_FILES 会获取到值么?

如果不是很清楚或者觉得可以获取到,那么可以接着看看。

本文部分图片和段落节选,原文为:理解HTTP之Content-Type

感谢。

Content-Type 是什么?

  通俗理解的的话,它就是我们规定发送数据包的一种格式,就像我们寄快递一样。不同的包装公司 (Content-Type) 有不同的包装方式。

  接受方也会根据这个值来进行下一步操作。

  这也就是说明了我们上面的那个小例子中。$_FILES 变量中为什么获取不到值。

  表单发送(未指定 Content-Type 使用默认),$_FILES 不认识默认的 Content-Type ,拒收,所以才会产生获取不到的情况

Content-Type 作用?

  Content-Type用于指定内容类型,一般是指网页中存在的Content-Type,Content-Type属性指定请求和响应的HTTP内容类型。如果未指定 ContentType,默认为text/html。

  在nginx中有个配置文件mime.types,主要是标示Content-Type的文件格式。

  下面是几个常见的Content-Type:

  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

  ...

  前面几个都很好理解,都是html,css,javascript的文件类型,后面四个是POST的发包方式。

  下面讲讲他们具体的格式问题

Content-Type 的格式?

  1:application/x-www-form-urlencoded

    application/x-www-form-urlencoded是常用的表单发包方式,普通的表单提交,或者js发包,默认都是通过这种方式,

  2:multipart/form-data

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

    这里Content-Type告诉我们,发包是以multipart/form-data格式来传输,另外,还有boundary用于分割数据。

    当文件太长,HTTP无法在一个包之内发送完毕,就需要分割数据,分割成一个一个chunk发送给服务端,

  3:application/json

    通过json形式将数据发送给服务器,一开始,我尝试通过curl,给服务器发送application/json格式包,

  4:text/xml

    通过xml 形式将数据发送给服务器

    

总结:

    发现了么。

    php中$_POST只能读取application/x-www-form-urlencoded数据,$_FILES只能读取multipart/form-data类型数据.

    具体为什么,就因该想一下这这两种发送的不同。

    对于其他格式的传输,应该怎么取呢?

那么,要读取text/xml格式的数据,可以用:

$file = fopen(‘php://input’, ‘rb’);
$data = fread($file, length);
fclose($file);

或者

$data = file_get_contents(‘php://input’);

    对于其他格式传输,取得,其实都是一种文件流一样的。

    之后按照规则去转码。

猜你喜欢

转载自www.cnblogs.com/25-lH/p/9152024.html