HTML form enctype 属性试验

HTML form enctype

http://www.w3.org/TR/html401/interact/forms.html#h-17.13.1%E2%80%8D

enctype= content-type [CI]
This attribute specifies the content type used to submit the form to the server (when the value of method is "post"). The default value for this attribute is "application/x-www-form-urlencoded". The value "multipart/form-data" should be used in combination with the INPUT element,type="file".

enctype 如果不写, 默认为 application/x-www-form-urlencoded, 如果提交内容包括 file input元素, 则类型应该是 multipart/form-data。

enctype含义?

且看下面描述, 浏览器处理表单过程的第三步,将表单数据集合编码, 编码是根据enctype指定的content-type值。 编码格式是HTTP协议的一部分, 客户端和服务器都遵守。

Step three: Encode the form data set

The form data set is then encoded according to the content type specified by the enctype attribute of the FORM element.

但是 enctype是否就这两种类型?

看规范描述, 只要求UA支持这两种类型, 其他的content-type类型没有定义。

17.13.4 Form content types

The enctype attribute of the FORM element specifies the content type used to encode the form data set for submission to the server. User agents must support the content types listed below. Behavior for other content types is unspecified.

。。。

application/x-www-form-urlencoded

This is the default content type. Forms submitted with this content type must be encoded as follows:

。。。。

multipart/form-data

。。。

enctype用法试验

首先,只有使用POST方法的时候enctype才生效,GET方法默认使用 application/x-www-form-urlencoded 编码方法。

  • If the method is "get" and the action is an HTTP URI, the user agent takes the value of action, appends a`?‘to it, then appends the form data set, encoded using the "application/x-www-form-urlencoded" content type. The user agent then traverses the link to this URI. In this scenario, form data are restricted to ASCII codes.
  • If the method is "post" and the action is an HTTP URI, the user agent conducts an HTTP "post" transaction using the value of the action attribute and a message created according to the content type specified by the enctype attribute.

构造一个含有file控件的form, 还包括一个input框, 变化enctype为以下值, 查看请求报文都是按照 application/x-www-form-urlencoded 编码的:

1、 不书写 enctype 属性

<form id="fileupload" name="fileupload" method="post" action="/index.php">

2、 书写enctype但是值为空:

<form id="fileupload" name="fileupload" method="post" action="/index.php" enctype="">

3、 书写enctype值为未定义值:

<form id="fileupload" name="fileupload" method="post" action="/index.php" enctype="sss">

4、 书写enctype为

<form id="fileupload" name="fileupload" method="post" action="/index.php" enctype="application/x-www-form-urlencoded">

代码:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="./jquery.js"></script>
    <link rel="stylesheet" href="./test.css" />
</head>
<body>
    <style>
    </style>
    <form id="fileupload" name="fileupload" method="post" action="/index.php" enctype="sss">
        <input type="file" name="testfile"></br>
        <input type="text" name="textinput" value="textinputvalue"></br>
        <input type="submit" value="upload"></br>
    </form>
    <script>

    </script>
</body>
</html>

抓包:

POST http://wwwtestcom/index.php HTTP/1.1
Host: wwwtestcom
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:32.0) Gecko/20100101 Firefox/32.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 0
Referer: http://wwwtestcom/fileupload.php
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 56

testfile=%E5%91%A8%E6%8A%A5.txt&textinput=textinputvalue

修改enctype为 multipart/form-data

<form id="fileupload" name="fileupload" method="post" action="/index.php" enctype="multipart/form-data">

抓包:

POST http://wwwtestcom/index.php HTTP/1.1
Host: wwwtestcom
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:32.0) Gecko/20100101 Firefox/32.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 0
Referer: http://wwwtestcom/fileupload.php
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------734115918637
Content-Length: 299

-----------------------------734115918637
Content-Disposition: form-data; name="testfile"; filename="test.txt"
Content-Type: text/plain

-----------------------------734115918637
Content-Disposition: form-data; name="textinput"

textinputvalue
-----------------------------734115918637--

另外, 演示下file控件可以选择多个文件的情况:

代码:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="./jquery.js"></script>
    <link rel="stylesheet" href="./test.css" />
</head>
<body>
    <style>
    </style>
    <form id="fileupload" name="fileupload" method="post" action="/index.php" enctype="multipart/form-data">
        <input type="file" name="testfile" multiple="multiple"></br>
        <input type="text" name="textinput" value="textinputvalue"></br>
        <input type="submit" value="upload"></br>
    </form>
    <script>

    </script>
</body>
</html>

选择两个文件, 抓包 -- 可以看到报文体中, 有两个 testfile 的PART, 每个PART对应一个文件:

POST http://wwwtestcom/index.php HTTP/1.1
Host: wwwtestcom
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:32.0) Gecko/20100101 Firefox/32.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 0
Referer: http://wwwtestcom/fileupload.php
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------25276621921226
Content-Length: 451

-----------------------------25276621921226
Content-Disposition: form-data; name="testfile"; filename="test.txt"
Content-Type: text/plain

-----------------------------25276621921226
Content-Disposition: form-data; name="testfile"; filename="test1.txt"
Content-Type: text/plain

-----------------------------25276621921226
Content-Disposition: form-data; name="textinput"

textinputvalue
-----------------------------25276621921226--

时间: 2024-10-27 07:50:06

HTML form enctype 属性试验的相关文章

IE和FireFox 对FORM enctype属性的认识存在差异

IE和FireFox 对FORM enctype属性的认识存在差异,一般来说对于动态创建的form,如果因为要上传文件的原因很自然的会使用类似如下的代码: 1  //create form 2  this.form = document.createElement("FORM");3  this.form.id = "jasonUploadForm";4  this.form.name = "jasonUploadForm";5  this.fo

HTML &lt;form&gt; 标签的 enctype 属性

在HTML中,form标签用于提交表单.form标签有一个enctype属性. enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码    也就是说,在Form元素的语法中,EncType表明提交数据的格式. enctype属性的取值 序号 值 描述 1 application/x-www-form-urlencoded (1)在发送前,编码所有字符(默认).窗体数据被编码为"名称/值"对,这是标准的编码格式. (2)当action为get时候,浏览器用x-www-fo

Form表单标签的Enctype属性的作用及应用示例介绍

Enctype :指定将数据回发到服务器时浏览器使用的编码类型.用于表单里有图片上传. 编码类型有以下三种: application/x-www-form-urlencoded: 在发送前编码所有字符(默认).这是标准的编码格式. multipart/form-data: 不对字符编码,在使用包含文件上传控件的表单时,必须使用该值. text/plain: 窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符. 例子: <form action="${pageContext.reque

表单中&lt;form&gt;的enctype属性

application/x-www-form-urlencoded.multipart/form-data.text/plain 上传文件的表单中<form>要加属性enctype="multipart/form-data",很多人只是死记硬背知道上传表单要这么 写,知其然而不知其所以然.那到底为什么要添加这个属性呢?它是什么意思呢?它又有什么其他可选值呢? 其实form表单在你不写enctype属性时,也默认为其添加了enctype属性值,默认值是enctype=&quo

form表单标签的enctype属性的作用

Enctype是指定将数据回发到服务器时浏览器使用的编码类型,其编码类型有以下三种 一. application/x-www-form-urlencoded 这是通过表单发送数据时默认的编码类型.我们没有在from标签中设置enctype属性时默认就是application/x-www-form-urlencoded类型的.application/x-www-form-urlencoded编码类型会把表单中发送的数据编码为名称/值对.这是标准的编码格式.当表单的ACTION为POST的时候,浏览

form表单中的encType属性

enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码,它有三个值 1.application/x-www-form-urlencoded:表单数据被编码为名称/值对.这是默认的编码方式(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值).使用get方式提交时,把表单数据(name1=value1&name2=value2...)以键值对append到url后,用  '?' 分割url和参数.使用post方式提交时,把表单数据以键值对放在请求体中传

form表单中enctype属性作用

上传文件时,提交的表单属性里需要加enctype="multipart/form-data",才能提交文件信息,不然会报错.那么enctype属性的作用是什么?就是设置表单传输的编码. enctype属性有三种: 1.application/x-www-form-urlencoded 2.multipart/form-data 3.text/plain 其中,第一种是enctype属性的默认值.所以平时不填,其实就是这个值.第二种是用来提交非文本的内容,比如图片,音乐等.第三种是用来提

HTML5 Web Form 新增属性和表单验证

<form>标签的基本属性 1 method属性:指定浏览器向服务器传送数据的方式,可选: 2 action属性:设置服务器接受和处理表单数据的URL: 3 enctype属性:制定表单数据在发送到服务器之前进行编码的编码方式: 4 accept属性:指定能够通过文件上传进行提交的文件类型: 5 accept-charset属性:指定服务器处理表单数据所接收的字符集: 6 target属性:制定浏览器在提交表单后生成的页面在哪个框加载或在哪个窗口显示: 7 id属性:用来识别网页中的form标

Form.KeyPreview 属性

Form.KeyPreview 属性 今天再做KeyDown 和 KeyUp 事件时,就是忘了设置,窗体的KeyPreview 属性,所以KeyDown 和 KeyUp 事件没有反应(这里说明一下,本人使用的是自定义控件,如果是窗体控件就没有问题的.具体原因,下面会有解释.) 获取或设置一个值,该值指示在将键事件传递到具有焦点的控件前,窗体是否将接收此键事件. 命名空间:System.Windows.Forms程序集:System.Windows.Forms(在 system.windows.f