1 post 和 get 方式提交数据有什么区别
1.最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数;
2.GET能被缓存,POST不能缓存 。
3.GET历史参数保留在浏览器历史中。POST参数不会保存在浏览器历史中。
4.GET对数据长度有限制,当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。POST无限制。
5.GET只允许 ASCII 字符。POST没有限制。也允许二进制数据。
6 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。
GET的数据在 URL 中对所有人都是可见的。POST的数据不会显示在 URL 中。
7.GET方法请求资源。POST的语义是上传数据。
8.POST不安全,不幂等,
2 在Form元素的语法中,EncType表明提交数据的格式
2.1用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型。
下边是说明:
application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式。
multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。
text/plain: 窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。
2.2补充
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)等信息,并加上分割符
3 在input里,name 有什么作用?
用途1: name 属性用于对提交到服务器后的表单数据进行标识,或者在客户端通过 JavaScript 引用表单数据。只有设置了 name 属性的表单元素才能在提交表单时传递它们的值。比如input、select、textarea、和button等。我们可以在服务器端根据其Name通过Request.Params取得元素提交的值。
用途2: HTML元素Input type='radio'分组,我们知道radio button控件在同一个分组类,check操作是mutex的,同一时间只能选中一个radio,这个分组就是根据相同的Name属性来实现的。
4 placeholder 属性有什么作用?
该提示会在输入字段为空时显示,并会在字段获得焦点时消失。
5 label 有什么作用?如何使用?
- <label> 标签为 input 元素定义标注(标记)。
label 元素不会向用户呈现任何特殊效果。不过,它为鼠标用户改进了可用性。如果您在 label 元素内点击文本,就会触发此控件。就是说,当用户选择该标签时,浏览器就会自动将焦点转到和标签相关的表单控件上。
- <label> 标签的 for 属性应当与相关元素的 id 属性相同。
<div class="username">
<label for="username">姓名</label>
<input id="username" type="text" name="username"/>
</div>
6 type=hidden隐藏域有什么作用?
1.隐藏域的作用是帮助表单收集和发送信息,便于后端处理数据。用户点击提交数据的时候,隐藏域的信息也被一起发送到了后端。
2.后端接收前端传来的数据,需要确认前端的身份,是本公司的网页传来的数据,而不是其他黑客知道后端地址后传来的假数据。那么就加一个隐藏域,验证value里的值和数据库里name的值是不是对应的。
3.有时候一个表单里有多个提交按钮,后端怎么知道用户是点击哪个按钮提交过来的呢?这时候我们只要加隐藏域,对每一个按钮起个名字(value值),后端接收到数据后,检查value值,就能知道是哪个按钮提交的了。
4.有时候一个网页中有多个form,我们知道多个form是不能同时提交的,但有时这些form确实相互作用,我们就可以在form中添加隐藏域来使它们联系起来。
5.防范CRSF攻击
7 .表单范例
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div class="login">
<form action="/getInfo" method="post">
<div class="username">
<label for="username">姓名:</label>
<input id="username" type="text" name="username" placeholder="用户名"/>
</div>
<div class="password">
<label for="password">密码:</label>
<input id="password" type="password" name="password" placeholder="请输入密码" value="56767889"/>
</div>
<div class="sex">
<label for="">性别</label>
<input type="radio" name="sex1" value="男" checked/>男
<input type="radio" name="sex1" value="女"/>女
</div>
<div class="sex">
<label for="">取向</label>
<input type="radio" name="sex2" value="男" />男
<input type="radio" name="sex2" value="女" checked/>女
</div>
<div class="hobby">
<label >爱好</label>
<input type="checkbox" name="hobby" value="data"/>data
<input type="checkbox" name="hobby" value="旅游" checked/>旅游
<input type="checkbox" name="hobby" value="宠物" checked/>宠物
</div>
<div class="textarea">
<label for=" review">评论:</label>
<textarea name="review" id=" review" cols="30" rows="10">
ddd
</textarea>
<input type="hidden" name="csrf" value="123456"/>
</div>
<div class="select">
<label for="car">我的car:</label>
<select name="car" id="car">
<option selected value="萨博" >萨博</option>
<option value="奔驰">奔驰</option>
<option value="宝马">宝马</option>
</select>
<span class="submit">
<input type="submit" value="提交">
</span>
</div>
</form>
</div>
</body>
</html>