浅析http请求头常见的表单文件上传

首先先了解下application/x-www-form-urlencoded和multipart/form-data的区别

application/x-www-form-urlencoded:

是常用的表单发包方式,普通的表单提交,或者js发包,默认都是通过这种方式,

<form enctype="application/x-www-form-urlencoded" action="http://" method="POST">
    <input type="text" name="name" value="homeway">
    <input type="text" name="key" value="nokey">
    <input type="submit" value="submit">
</form

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

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

multipart/form-data:

上传张图片看看

Content-Type: multipart/form-data; boundary=---------------------------27646987427698

Content-Length: 198449

-----------------------------27646987427698

Content-Disposition: form-data; name="x1"

52

-----------------------------27646987427698

Content-Disposition: form-data; name="y1"

个人理解区别在于:如果没有 type=file 的控件,form表单会自动form的enctype属性为编码方式默认的 application/x-www-form-urlencoded

,常用有两种: application/x-www-form-urlencoded 和 multipart/form-data ,

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

通过表单提交数据的方法有两种,一种是GET 方法,另一种是 POST

方法,前者通常用于提交少量的数据,而在上传文件或大量数据时,应用POST 方法。 HTML 代码中,在<form> 标签中添加以下代码可以页面显示一个选择文件的控件。

<input type="file" name="file01">

在页面中显示如下(可能随浏览器不同而不同)可以直接在文本框中输入文件名,也可以点击按钮后弹出供用户选择文件的对话框。

浏览器编码

在向服务器端提交请求时,浏览器需要将大量的数据一同提交给Server 端,而提交前,浏览器需要按照Server 端可以识别的方式进行编码,对于普通的表单数据,这种编码方式很简单,编码后的结果通常是

field1=value2&field2=value2&的形式,如这种编码的具体规则可以在rfc2231 里查到,通常使用的表单也是采用这种方式编码的,

Servlet 的

API 提供了对这种编码方式解码的支持,只需要调用ServletRequest

类中的方法就可以得到用户表单中的字段和数据。

这种编码方式(

application/x-www-form-urlencoded

)虽然简单,但对于传输大块的二进制数据显得力不从心,对于传输这类

数据,浏览器采用了另一种编码方式,即

"multipart/form-data"

的编码方式,采用这种方式,浏览器可以很容易的表单内的数据和

文件一起。这种编码方式先定义好一个不可能在数据中出现的字符串作为分界符,然后用它将各个数据段分开,而对于每个数据段都

对应着HTML 页面表单中的一个Input 区,包括一个content-disposition

属性,说明了这个数据段的一些信息,如果这个数据段

的内容是一个文件,还会有Content-Type 属性,然后就是数据本身。

时间: 2024-10-10 14:10:58

浅析http请求头常见的表单文件上传的相关文章

Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据)

form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multipart/form-data"> {# 这里必须要请求头格式才能把上传文件的对象传过去 enctype="multipart/form-data"#} 姓名 <input type="text" name="user">

表单文件上传与文件下载

一.简介 使用form表单进行需要为form添加enctype="multipart/form-data" 属性,除此之外还需要将表单的提交方法改成post,如下 method="post". 二.示例 1.表单文件上传 网页代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 </head> 5 <body> 6 <form action="${pageC

混合表单文件上传到数据库(基于TOMCAT)

在实际的开发中在实现文件上传的同时肯定还有其他信息需要保存到数据库,就像混合表单在上传完毕之后需要将提交的基本信息插入数据库. 在这个demo中需要用到这个架包来帮助实现 1.定义一个公共类实现文件上传(BaseServlet) 上传是一个公共的操作,可能在很多个servlet中都要涉及到上传,比如在Empservlet中要上传雇员的照片,在ManagerServlet中要上传管理员的照片,此时就需要将上传的操作定义到一个公共父类. package com.sxt.mvcpro.servlet;

如何使用PHP上传文件,上传图片,php上传教程,php表单文件上传教程

使用PHP进行文件上传,主要使用到表单功能和PHP内置的$_FILES函数功能.接下来我们看如何实现PHP上传功能.例子效果图,此例子是在Mac下进行调试成功的. PHP上传图片文件的功能代码如下: <html> <head> <meta charset="utf-8"> <title>Upload File Example</title> <style> body{ width:500px; margin:20p

表单+文件上传+音频+iframe

一.表单及其标签 首先书写结构 <form action="表单提交地址" menthod=“post get提交方式”>  form只是外边框 <inpu type=“表单元素的类型” name=“键” value=“值”>                           表单元素: 文本类型: 文本框:text   可不规定value值 规定即锁定数值 密码框:password   可不规定value值 隐藏域:hidden 多行文本:textarea

文件上传(表单文件上传)

文件上传是开发一个网站最基本的一个需求功能 前台页面的设置: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerNa

from表单文件上传后页面跳转解决办法

from表单上传文件,路径跳转后,又不能转发回来. 本人的一个解决办法是.返回一段html代码,浏览器解析后后退一步,回到原来的页面并刷新. return "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/></head><body onload='JavaScript:history.

form表单文件上传

创建一个form表单 #上传文件的时候,enctype属性改成multipart/form-data <from action='' method='post' enctype='multipart/form-data'> <input type='file' name='avatar'> <input type='submit'> </from> 服务器接收 #服务器接收的时候,文件被放在request.FILES中 def file_put(reques

CURL模拟表单post提交及相关常用参数的使用(包括提交表单同时上传文件)

转载自:https://blog.csdn.net/freedomwjx/article/details/43278157 一. 首先,最简单的情况是我们只需要提交一个不带文件上传的表单,这种情况下,只需要在curl中使用--data(注意是--不是-)或者它的缩写-d即可. [plain] view plain copy curl -d "key=value&key=value" "url" 或者 [plain] view plain copy curl