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 ...
随机推荐
- Maven+struts2+spring4+hibernate4的环境搭建
搭建Maven+struts2+spring4+hibernate4其实并不难!但开始弄的时候还是费了我好大的力气,老是出现这样那样的错误!好了,废话不多说,开始搭建开发环境. 一.Myeclipse ...
- Linux核心设计依据(七)系统调用
我理解的系统调用,用户进程和内核是内核提供了一个接口进行交互.除了异常和下降外.内核系统调用是唯一合法入境.像/proc还通过系统调用访问. 系统调用的意义: 让用户进程受限地訪问硬件设备 为用户空间 ...
- 开源服务发现项目Zookeeper,Doozer,Etcd
这篇文章是Jason Wilder对于常见的服务项目发现Zookeeper.Doozer,Etcd所写的一篇博客,其原文地址例如以下:Open-Source Service Discovery. 服务 ...
- Java数据结构与算法(21) - ch09红黑树(RB树)
红-黑规则1. 每一个节点不是红色的就是黑色的2. 根总是黑色的3. 如果节点是红色的,则它的子节点必须是黑色的:如果节点是黑色的,其子节点不是必须为红色.4. 从根到叶节点或空子节点的每条路径,必须 ...
- 【iOS开展-94】xcode6如何使用GIT以及如何添加太老项目GIT特征?
(1)对于一个新项目:如何使用GIT?在新项目的过程,例如,您可以选择下面的复选框. (2)针对老项目,加入GIT功能. --在终端.cd到项目文件夹 --然后输入git init,初始化一个.git ...
- bnu 34986 Football on Table(数学+暴力)
pid=34986" target="_blank" style="">题目连接:bnu 34986 Football on Table 题目大 ...
- javascript实现数据结构:广义表
原文:javascript实现数据结构:广义表 广义表是线性表的推广.广泛用于人工智能的表处理语言Lisp,把广义表作为基本的数据结构. 广义表一般记作: LS = (a1, a2, ..., an ...
- Mobile开发的饕餮盛宴-Zoomla!波CMS2 x2.1正式宣布
饕餮 [tāo tiè] 古代汉族神话传说中龙的第五子,是一种存在于传说.想象的神奇怪兽. 古书<山海经>介绍其特点是:其形状如羊身人面,其目在腋下,虎齿人爪.其音如婴儿. 作为中国本土软 ...
- Android游戏开发研究与主角在地图滚动
让人感动的地图过程平滑滚动 玩过rpg朋友应该都知道RPG的游戏地图一般都比較大 今天我和大家分享一下在RPG游戏中怎样来处理超出手机屏幕大小的游戏地图. 如图所看到的为程序效果 ...
- 高效率的Shell
1. 批量将Excel转为CSV文件 XLSX2CSV: https://github.com/dilshod/xlsx2csv sudo easy_install xlsx2csv #安装Xlsx2 ...