HTTP协议与HTML form
HTTP协议与HTML form
HTTP协议是应用层协议, 全称是HyperText Transfer Protocol
HTTP协议是一种请求回应式的, 一个Request一定会有一个Response
格式
HTTP的一次请求或者一次应答所发送的包为一个HTTP Message,
HTTP Message当然分为Request和Response, 两者都可以分为三个部分
- 起始行 Start Line
- 消息头 Message Headers
- 消息体 Message Body 或 Message entity
下面我用chrome做的测试
我在浏览器地址栏输入www.douban.com, 从我的Request中摘取部分
GET / HTTP/1.1
Host: www.douban.com
Connection: keep-alive
请求行有三部分:
- GET 方法,GET和POST是我们最常见的
- / 要请求的资源的URI
- HTTP/1.1 使用的HTTP协议版本
GET 请求是不会有Message Body的
我在请求www.douban.com后, 豆瓣服务器返回的Response中, 摘取状态行和部分header fields
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html; charset=utf-8
Content-Length: 15597
Connection: keep-alive
Response的状态行有三段:
- HTTP/1.1 使用的协议版本
- 200 状态码
- OK 状态描述, 计算机并不解析这个,这是给人看的
HTTP 与 form元素
URI
URI就是Uniform Resource Identifier, 用来定位web上的唯一资源, 而这个Request就是针对对这个资源实施的. <关于URI及其相关的名称其实很多, 对于有有些强迫症患者,确实要考究其准确定义,可以参考 RFC2396 和 RFC2616>
URI可以带query parameter请求参数, 就是?之后的部分
当我们用豆瓣的搜索,在豆瓣网任何地方搜索"world", Request请求行如下
GET /search?source=suggest&q=world HTTP/1.1
搜索框的部分是一个<form>,其html为(丢掉不相关的部分)
<form action="http://www.douban.com/search" method="get">
<input type="hidden" name="source" value="suggest">
<input name="q" >
</form>
可以看到这个<form>属性 method="get" , 它指示Request使用GET方法, <form>中的参数会被放到URI的 ?query 部分.
[??]那如果<form>的 method="post" 会是什么情况呢
用http://www.douban.com/accounts/login 页面测试, 帐号密码当然不能显示在URI中了. Request为(去掉不太相关的)
POST /accounts/login HTTP/1.1
Host: www.douban.com
Connection: keep-alive
Content-Length: 51
form_email=wangyu%40gmail.com&form_password=1234567
这里是以字节的ASCII码来显示的, "%40"指的 "@"
可以看到<form>中的数据放到了Request的body里面, Request的方法为POST
方法为POST的Request是有body的, body就是 &分隔的一个个 key-value
HTTP Message Headers
headers的keys是预先定义好的, 做为协议的一部分,都有各自的用途, 我们不能在headers中自己加名字. 当然POST的数据不会放在headers中了
headers分为4类
- general header
- request header
- response header
- entity header
general header修饰整个message, 不分是Request还是Response, 如
- Connection:keep-alive
request header修饰Request, 如:
- Host: www.douban.com
- User-Agent : .....
- Cookie : .....
response header修饰Response, 如:
- Server : nginx
entity header 修饰 Message body, 如:
- Content-Length :
- Content-Type : text/html; charset=utf-8
对于Message headers, 协议并没有规定顺序, 但是协议上建议以上面的分类的顺序写.
Django的HttpRequest
如果用Django我们会知道, 每一次请求都会被django封装在一个request传进我们的函数
request是一个HttpRequest类对象, 定义在django.http.request模块中, 封装了一个HTTP Request的信息
HttpRequest的__init__函数:
def __init__(self):
self.GET, self.POST, self.COOKIES, self.META, self.FILES = {}, {}, {}, {}, {}
self.path = ''
可以看到这里有五个字典
request.GET中是URI的query参数
当请求方法为POST时, 其body中的key-value值会放在request.POST中
request.META 中存放了Request Headers.
--------------
参考:
RFC2616中描述了HTTP/1.1 , 很多东西都是在上面看的 http://tools.ietf.org/html/rfc2616
Django的Request and Response https://docs.djangoproject.com/en/1.6/ref/request-response/
HTTP协议与HTML form的更多相关文章
- LoadRunner开发http协议接口之form表单脚本
loadrunner传form表单,用web_submit_data函数. Action() { // lr_start_transaction("hp_homepage"); / ...
- JMeter5.1开发http协议接口之form表单脚本
get请求--jmeter:form表单 下载文件 响应结果 post请求--jmeter:form表单 登录请求 响应结果 post请求--jmeter:form表单中传token 请求(token ...
- 前端基础:form表单提交
今天介绍下form表单提交经常用到的表单元素. 1:datalist元素,一般与input组建配合使用,以定义可能输入的值,例如: <!DOCTYPE html> <html lan ...
- Easyui 关闭弹出框后还显示验证提示信息
今天下午做form表单,然后可以保存,可以关闭.可是关闭的时候老是会在屏幕左上角显示验证提示框,很是着急. 如图: 可能是easyui自己框架的问题,或许是因为网上有的人,自己代码写得有问题,没有调试 ...
- 支付宝api指南
tyle="margin:20px 0px 0px; line-height:26px; font-family:Arial"> 在这些服务中,服务类型大致可以分为以下几类: ...
- 一篇文章搞定SpringMVC参数绑定
SpringMVC参数绑定,简单来说就是将客户端请求的key/value数据绑定到controller方法的形参上,然后就可以在controller中使用该参数了 下面通过5个常用的注解演示下如何进行 ...
- Android 上传文件,图片。以及服务器端接收相关。
前面一篇文章写了实现照相功能的一个例子,其实那个实现效果是个略缩图.要查看全图就要先指定照片的存放路径.以后我会修改那个文章.今天先说下图片,文件等上传的实现.接着拿照片说事,光照完了不行还得往服务器 ...
- HTML提交方式post和get区别(实验)
HTML提交方式post和get区别(实验) 一.post和get区别 get提交,提交的信息都显示在地址栏中. post提交,提交的信息不显示地址栏中,显示在消息体中. 二.客户端代码 <!D ...
- 【资料总结】html开发小实例
目 录 第1章 1 HTML的基本标签 1 第2章 25 表格基础 25 第3章 53 表单和框架 53 第4章 77 CSS样式表 77 第5章 104 使用Dreamweaver制作网页 104 ...
随机推荐
- eclipse字母大写和小写转换的快捷键
大写转换小写 ctrl+shift+y 小写转换大写 ctrl+shift+x
- OBIEE SampleAppv406 自己主动启动配置
SampleApp 一个简短的引论: SampleApp这是一个一站式服务,几乎证明OBIEE不管顶的特征可想而知. 它安装了大量的应用(数据库,OBIEE,的Endeca.TimesTen的.Ess ...
- CSS3火焰文字特效制作教程
原文:CSS3火焰文字特效制作教程 用一句很俗气的话概括这两天的情况就是:“最近很忙”,虽然手头上有不少很酷的HTML5和CSS3资源,但确实没时间将它们的实现过程写成教程分享给大家.今天刚完成了一个 ...
- Webserver管理系列:3、Windows Update
微软的操作系统可以使用用户过程中发现了一些漏洞,因此,他们经常发布一些系统补丁.因此,我们需要自己主动安装更新功能后,打开系统. 默认的更新功能未开启自己主动: 开启自己主动更新功能后.Windows ...
- MapReduce 编程模型
一.简单介绍 1.MapReduce 应用广泛的原因之中的一个在于它的易用性.它提供了一个因高度抽象化而变得异常简单的编程模型. 2.从MapReduce 自身的命名特点能够看出,MapReduce ...
- .net mvc4 从客户端中检测到有潜在危险的 Request.Form 值
[ValidateInput(false)] 即可, 网上说什么Web.Config 里面改,一点用都没有 [HttpPost] [ActionName("Edit")] [Val ...
- AngularJS之使用服务封装可复用代码
创建服务组件 在AngularJS中创建一个服务组件很简单,只需要定义一个具有$get方法的构造函数, 然后使用模块的provider方法进行登记: //定义构造函数 var myServicePro ...
- UVA The Sultan's Successors
题目例如以下: The Sultan's Successors The Sultan of Nubia has no children, so she has decided that thecou ...
- Java实现缓存(类似于Redis)
Java实现缓存,类似于Redis的实现,可以缓存对象到内存中,提高访问效率.代码如下: import java.util.ArrayList; import java.util.HashMap; i ...
- [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)
原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...