概述
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可以带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.
--------------
参考:
最后
以上就是呆萌树叶为你收集整理的html http协议,HTTP协议与HTML form的全部内容,希望文章能够帮你解决html http协议,HTTP协议与HTML form所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复