1. 程式人生 > >2018/06/07 HTTP 中 Content-Type 的作用

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

php chunk cat 屬性 說明 multipart HR 部分 doctype

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

<?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’);

    對於其他格式傳輸,取得,其實都是一種文件流一樣的。

    之後按照規則去轉碼。

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