zoukankan      html  css  js  c++  java
  • application/x-www-form-urlencoded和multipart/form-data的区别

    在学习<form>元素时,enctype属性有三个值

    enctype属性表格:

    描述
    application/x-www-form-urlencoded 在发送前编码所有字符(默认)
    multipart/form-data

    不对字符编码。

    在使用包含文件上传控件的表单时,必须使用该值。

    text/plain 空格转换为 "+" 加号,但不对特殊字符编码。

    其中,当值为multipart/form-data时,<input>元素的type属性必须为file。

    type属性表格:

    描述
    button 定义可点击按钮(多数情况下,用于通过 JavaScript 启动脚本)。
    checkbox 定义复选框。
    file 定义输入字段和 "浏览"按钮,供文件上传。
    hidden 定义隐藏的输入字段。
    image 定义图像形式的提交按钮。
    password 定义密码字段。该字段中的字符被掩码。
    radio 定义单选按钮。
    reset 定义重置按钮。重置按钮会清除表单中的所有数据。
    submit 定义提交按钮。提交按钮会把表单数据发送到服务器。
    text 定义单行的输入字段,用户可在其中输入文本。默认宽度为 20 个字符。

    后来我在学习requests模块时,再次接触到了application/x-www-form-urlencoded和multipart/form-data,下面说说深入的理解:

    enctype表示MIME编码。

    application/x-www-form-urlencoded : 窗体数据被编码为名称/值对。这是标准的编码格式。

    multipart/form-data : 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。

    text/plain : 窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。

    补充

    form的enctype属性为编码方式,常用有两种: application/x-www-form-urlencoded 和 multipart/form-data , 默认为application/x-www-form-urlencoded 。

    当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。

    当action为post时候,浏览器把form数据封装到http body中,然后发送到server。

    如果没有 type=file 的控件,用默认的 application/x-www-form-urlencoded 就可以了。

    但是如果有 type=file 的话,就要用到 multipart/form-data 了。浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file)、Content-Type(默认为text/plain)、name(控件name)等信息,并加上分割符(boundary)。

    总结

    报文主体会打上标签,这个标签就是MIME类型。通过这个标签,浏览器和服务器就能够知道数据的类型,进而采用合适的方式来处理该数据。

    MIME类型结构

    类型/子类型;可选参数列表(key/value)

    MIME常用于Content-Type和Accept首部。

    离散类型

    MIME直接用来描述对象的类型,即为离散类。

    复合类型

    复合类型用来描述集合包(集合包中的对象有不同的类型)。

    常见的MIME类型

    application 应用程序特有的内容格式
    audio 音频格式
    chemical 化学数据集
    image 图片格式
    message 报文格式(复合型)
    model 三维模型
    multipart 多部分对象集合(复合型)
    text 文本
    video 视频
  • 相关阅读:
    sqlsever中生成GUID的方法
    部署项目到服务器
    读后感
    第二次作业
    课堂作业
    第一次作业 开发环境配置介绍
    第二次结对作业
    代码审查
    最大连续子数组和
    单元测试
  • 原文地址:https://www.cnblogs.com/leomei91/p/7676227.html
Copyright © 2011-2022 走看看