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 ...
随机推荐
- 采用xshell链路本地虚拟机Linux
昨天想安装在自己的机器看Linux.而使用xshell通路.但是这花了很长的时间,于xshell结束所有的提示"Could not connect to '192.168.54.100' ( ...
- SQL Server 2005 MD5函数
原文:SQL Server 2005 MD5函数 在SQL Server 2005下自带的函数HashBytes() ,此函数是微软在SQL Server 2005中提供的,可以用来计算一个字符串的M ...
- 如何定义自己的ViewGroup
在发展中,有时会遇到一些要求.布局和控制系统不仅提供使用,以满足我们的发展,所以这一次就行,通常是你自己的自定义布局(ViewGroup)并控制(View)该.我在这里,我们将用一个简单的例子,当他们 ...
- 发布一个参考ssdb,使用go类似的实现redis高性能nosql:ledisdb
起因 ledisdb是一个參考ssdb.採用go实现,底层基于leveldb,相似redis的高性能nosql数据库,提供了kv,list,hash以及zset数据结构的支持. 我们如今的应用极大的依 ...
- Sky数 2097
Problem Description Sky从小喜欢奇特的东西,而且天生对数字特别敏感,一次偶然的机会,他发现了一个有趣的四位数2992,这个数,它的十进制数表示,其四位数字之和为2+9+9+2=2 ...
- java中的反射,invoke方法[转]
在施老师的项目中需要用到invoke,就是通过函数名反射相应的函数.一下代码简单地介绍了java反射中invoke方法,如果要具体的,可以参考魔乐核心课程的反射部分内容 package org.cur ...
- document.domain跨域
原文:[转载]document.domain跨域 document.domain 用来得到当前网页的域名. 比如在地址栏里输入: javascript:alert(document.domain); ...
- Office——检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败
检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 8000401a 1.运行dcomcnfg.e ...
- 七牛云存储C#例用小例子 C#笔记
最近有需求要把网站的图片传到云存储上去.于是就找到了七牛.看上面的SDK...看了才发现里面注释很少.当时看的头大.在网上搜一下,基本上没有好的例子.给初学者带来很大的不便!不过最后还是做出来了.在这 ...
- JavaScript语言基础知识11
JavaScript字符的比较. 在接下来的学习内容的开始,我们先来看一下alert()此功能,它是一个消息框. OK,接下来正式介绍代码: <HTML> <HEAD> < ...