html和http协议一样吗,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.1Host: 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 200OK

Server: nginx

Content-Type: text/html; charset=utf-8Content-Length: 15597Connection: 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

搜索框的部分是一个

,其html为(丢掉不相关的部分)

可以看到这个

属性 method="get" , 它指示Request使用GET方法,  中的参数会被放到URI的  ?query  部分.

[??]

那如果

的 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"指的 "@"

可以看到

中的数据放到了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.

--------------

参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值