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的更多相关文章

  1. LoadRunner开发http协议接口之form表单脚本

    loadrunner传form表单,用web_submit_data函数. Action() { // lr_start_transaction("hp_homepage"); / ...

  2. JMeter5.1开发http协议接口之form表单脚本

    get请求--jmeter:form表单 下载文件 响应结果 post请求--jmeter:form表单 登录请求 响应结果 post请求--jmeter:form表单中传token 请求(token ...

  3. 前端基础:form表单提交

    今天介绍下form表单提交经常用到的表单元素. 1:datalist元素,一般与input组建配合使用,以定义可能输入的值,例如: <!DOCTYPE html> <html lan ...

  4. Easyui 关闭弹出框后还显示验证提示信息

    今天下午做form表单,然后可以保存,可以关闭.可是关闭的时候老是会在屏幕左上角显示验证提示框,很是着急. 如图: 可能是easyui自己框架的问题,或许是因为网上有的人,自己代码写得有问题,没有调试 ...

  5. 支付宝api指南

    tyle="margin:20px 0px 0px; line-height:26px; font-family:Arial"> 在这些服务中,服务类型大致可以分为以下几类: ...

  6. 一篇文章搞定SpringMVC参数绑定

    SpringMVC参数绑定,简单来说就是将客户端请求的key/value数据绑定到controller方法的形参上,然后就可以在controller中使用该参数了 下面通过5个常用的注解演示下如何进行 ...

  7. Android 上传文件,图片。以及服务器端接收相关。

    前面一篇文章写了实现照相功能的一个例子,其实那个实现效果是个略缩图.要查看全图就要先指定照片的存放路径.以后我会修改那个文章.今天先说下图片,文件等上传的实现.接着拿照片说事,光照完了不行还得往服务器 ...

  8. HTML提交方式post和get区别(实验)

    HTML提交方式post和get区别(实验) 一.post和get区别 get提交,提交的信息都显示在地址栏中. post提交,提交的信息不显示地址栏中,显示在消息体中. 二.客户端代码 <!D ...

  9. 【资料总结】html开发小实例

    目 录 第1章 1 HTML的基本标签 1 第2章 25 表格基础 25 第3章 53 表单和框架 53 第4章 77 CSS样式表 77 第5章 104 使用Dreamweaver制作网页 104 ...

随机推荐

  1. Sql Server之旅——第五站 确实不得不说的DBCC命令

    原文:Sql Server之旅--第五站 确实不得不说的DBCC命令 今天研发中心办年会,晚上就是各自部门聚餐了,我个人喜欢喝干红,在干红中你可以体味到那种酸甜苦辣...人生何尝不是这样呢???正好 ...

  2. IE打印的参数配置说明

    IE自动给我们在页眉和页脚处加上了这些不必要的打印信息.如果我们不想要任何页眉和页脚的话,直接删除它们就行了.:-)大部分时候我都是这样做的.但如果你想自定义页眉和页脚的时候,该怎么做呢?上面的那些“ ...

  3. 房间计费系统改造E-R图纸设计

    简单的学习过程:     这几天忙得太混乱了,用了近一个星期才设计好.我在这段时间遇到的困难,就积极找师哥师姐指点迷津,如今多少总算是有些拿得出手的成果. 学习成果: Entity Relations ...

  4. C#将Excel数据导入数据库(MySQL或Sql Server)

    最近一直很忙,很久没写博客了.今天给大家讲解一下如何用C#将Excel数据导入Excel,同时在文章最后附上如何用sqlserver和mysql工具导入数据. 导入过程大致分为两步: 1.将excel ...

  5. Swift语言指南(六)--可选值

    原文:Swift语言指南(六)--可选值 在值可能不存在的情况下使用可选值(optional), 可选值是: · 存在一个值,这个值等于 x 或 · 不存在任何值 注: 在 C 和 Objective ...

  6. mysql分表分库

    单库单表 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到. 单库多表 随着用户数量的增加,user表的数据量会越来越大,当数 ...

  7. ADS-B 雷达 显示终端5.8

    改动日志 1  更新背景地图. 增加了全国范围内的国际航路.区域航路信息,全部航路信息来自网络及中国民用航空局公布的公开资料:航路採用深蓝色画笔绘制航路中包括有航路代码.高度及报告点信息.代码及报告点 ...

  8. JavaScript重载解读

    在JavaScript有一个特殊的数据类型---Function种类,JavaScript每个功能Function的类型,例如可以.由于函数是对象.指针,不会与某个函数绑定. <pre name ...

  9. 谢绝艳照门 - 手把手教你把当今很hit的家庭监控IP Camera变得网络安全起来

    IP Camerars现在已经越来越便宜了,很多人都可以买得起,并且大家也乐意去购买,因为它们的确是用来监控你在高房价的中国购买的爱巢的非常便利的设备.当然,配套的监控应用也层出不穷,从通用的家庭安全 ...

  10. 重新想象 Windows 8.1 Store Apps (81) - 控件增强: 加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 WebView 中的内容, 为 WebView 截图

    原文:重新想象 Windows 8.1 Store Apps (81) - 控件增强: 加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 Web ...