1 HTTP概念

把握三个点:
1 HTTP协议(超文本传输协议) HTTP是一个基于TCP/IP通信协议来传递数据,默认端口80
2 HTTP是无连接(限制每次连接只处理一个请求),无状态的(对于事务处理没有记忆能力)
3 HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。

2 HTTP协议结构

HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。流程大致 : web Browser -- HTTP Protocol -- HTTP Server -- CGI Program -- Database

  客户端 c:request
请求行 request line 请求方法 url 协议版本
请求头 header 头部字段名 : 值 请求主体
例如
GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi 服务端 s:response
状态行 HTTP/1.1 200 OK 协议 状态码 注释
消息报头 Date Content-Type content-Lnegth 响应正文 content
例如:
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

3 HTTP协议请求方式

PUT   创建资源
从客户端向服务器传送的数据取代指定的文档的内容。
POST 更新资源
post请求有消息体,可以携带大量数据,数据放在消息体中
GET 获取资源
get请求无消息体,只能携带少量数据,数据放在url中
HEAD 获取报头资源
OPTIONS 允许客户端查看服务器的性能。
DELETE 删除指定页面资源
TRACE 回显服务器收到的请求,主要用于测试或诊断
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

4 HTTP响应头信息

Allow   服务器支持的方法
content-encoding 文档编码方法
content-length 内容长度
content-type 文档所属类型
date 当前的时间
location 客户端去哪提取文档
reflesh 浏览器应在多少时间刷新文档
server 服务器名字
set-cookie 设置页面关联的cookie
last-modified 文档最后的改动时间
Host 域名
Date 时间
User-Agent 浏览器版本

5 HTTP状态码

5 种类型
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步寻找资源
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误
常见的http状态码
200- 请求成功
301-资源被永久转移到其他URL
404 请求资源页面不在
500 内部服务器错误

6 HTTP对象HttpRequest

HttpRequest代表来自客户端的Http请求

原理:request与response是页面发生请求时,Django内置模块把data数据包装成HttpRequest对象,然后Django加载合适的view方法,将HttpRequest对象作为第一个参数传给view方法,则其返回的结果就是HttpResponse对象.

HttpRequest属性列表:

path      请求页面的全路径,不包括域名—例如, "/django/student/"
method 请求类型,大写表示, GET,POST 等
GET 包含所有HTTP GET参数的Queryset对象,获取通过找到key获取value
POST 包含所有HTTP POST参数的Queryset对象,获取通过找到key获取value
COOKIES 包含所有cookies的Python字典对象,键值对Keys和values都是字符串
META 包含所有可用HTTP头部信息的字典(端口,主机名,主机头信息等)
FILES 包含所有上传文件的Queryset对象,对应 <input type="file" name="" />标签中name属性的值
注意:只有在请求方法是POST,并且在<form>有enctype="multipart/form-data"属性时FILES才拥有 数据。否则,FILES 为空 user 是一个django.contrib.auth.models.User 对象,代表当前登录的用户,需要引入使用
from django.contrib.auth import User 实例化 user = User() session 唯一可读写的属性,代表当前会话的字典对象。只有激活Django中的session支持时该属性才可用
当服务器session存储数据时,可以在request中调用 request.session['key']

7 HTTP对象HttpResponse

HttpResponse代表来自服务端的Http响应
HttpResquest是由Django自动创建,但是HttpResponse则必须由我们自己创建,每个view方法必须返回一个HttpResponse对象 from django.http.response import HttpResponse HttpResponse常见的方法 HttpResponse.has_header(header) 判断响应头是否有给定的名称,返回True or False,不区分大小写
HttpResponse.set_cookie() 通知客户端设置cookie信息,一般存储sessionid+value用于session取值
HttpResponse.delete_cookie 清除cookie信息
HttpResponse.write(content) 写入content至报文中
HttpResponse.flush() 将缓存区的内容写入报文
HttpResponse.tell() 移动文件中的操作指针 HttpResponse 子类
class HttpResponseRedirect 资源重定向
class HttpResponseNotFound 资源未找到 404
class HttpResponseBadRequest 错误请求 400
class HttpResponseForbidden 无权限访问 403
class HttpResponseServerError 服务器错误 500

浅谈HTTP协议的更多相关文章

  1. 【转】 浅谈Radius协议

    浅谈Radius协议 2013-12-03 16:06 5791人阅读 评论(0) 收藏 举报  分类: Radius协议分析(6)  从事Radius协议开发有段时间了,小弟不怕才疏学浅,卖弄一下, ...

  2. 转:浅谈Radius协议 -来自CSDN:http://blog.csdn.net/wangpengqi/article/details/17097221

    浅谈Radius协议 2013-12-03 16:06 5791人阅读 评论(0) 收藏 举报  分类: Radius协议分析(6)  从事Radius协议开发有段时间了,小弟不怕才疏学浅,卖弄一下, ...

  3. 浅谈HTTP协议(下)

    下面来讲响应消息.响应消息也分为响应起始行.响应头部.CRLF.响应主体. 响应起始行包括协议版本.响应状态码.原因短句.这里的重点就是响应状态码,它一共分为5类,状态码准确的说是一个三位数. 1xx ...

  4. 浅谈ARP协议以及应用

    0. 前言 本章主要简单的介绍ARP的协议格式,主机如何发送和处理ARP报文,以及免费ARP. 1. ARP协议原理 ARP,全称Address Resolution Protocol,地址解析协议, ...

  5. 浅谈HTTP协议(上)

    今天讨论一下HTTP协议.一个做前端的,如果连HTTP协议都不了解,那实在是太不合格了. 首先,什么是HTTP?Hyper Text Transfer Protocol(超文本传输协议),用在浏览器和 ...

  6. 从日常开发说起,浅谈HTTP协议是做什么的。

    引言 HTTP协议作为Web开发的基础一直被大多数人所熟知,不过相信有很多人只知其一不知其二.比如咱们经常用到的session会话机制是如何实现的,可能很多人都说不出来吧.其实session会话就是H ...

  7. 通过Java代码浅谈HTTP协议

    最近刚看了http协议,想写点东西加深一下理解,如果哪儿写错了,请指正. 1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(W ...

  8. 浅谈HTTP协议与TCP协议

    HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送议. 主要特点 ...

  9. 浅谈Http协议是怎么回事?

    老实说关于http协议这个概念,见到最多的还是各类招聘信息.在平时的工作中,除了了解一些请求,响应,请求头这些概念外,对于http协议也没有太多的关心.因为貌似对平时的工作没有什么影响,所以在写这篇关 ...

随机推荐

  1. 以太坊智能合约虚拟机(EVM)原理与实现

    以太坊 EVM原理与实现 以太坊底层通过EVM模块支持合约的执行与调用,调用时根据合约地址获取到代码,生成环境后载入到EVM中运行.通常智能合约的开发流程是用solidlity编写逻辑代码,再通过编译 ...

  2. linux安装VLAN,系统怎么划分VLAN打标签上交换机

    前几天公司一台物理机需要连接公网,但是公网需要网卡打标签上去. 由于没有做过linux主机划分VLAN的操作,因此去查了一下,需要利用vconfig这个命令. 但是纠结的是,系统源中没有这个包.(很坑 ...

  3. 移动App开发基本技术面

    1.UI布局 1.1.熟悉系统布局基本机制和使用方法 2.界面效果 2.1.熟悉系统提供的所有界面组件 2.2.熟悉各种功能界面效果的实现途径 2,3.动画等特殊UI效果的实现机制 3.网络请求 3. ...

  4. ecshop 修改记录20150710

    ecshop 修改记录20150710 1:去掉头部TITLE部分的ECSHOP演示站 Powered by ecshop 前台部分:在后台商店设置 - 商店标题修改 后者打开includes/lib ...

  5. Python入门指南(超详细)

    Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫.但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑科技.本文主要针对的读者是: 毫无 ...

  6. Rafy 开源贡献中心 - 组织成立,并试运行一月小结

    背景 最近两年,工作中虽然大量使用了 Rafy 框架作为各个产品.项目的开发框架.我是 2015 年的年中加入现在这家公司的,由于我个人工作太忙的缘故,一直没怎么编码,Rafy 框架底层的核心成长也比 ...

  7. Redis案例——商品秒杀,购物车

    秒杀案例: <?php header("content-type:text/html;charset=utf-8"); $redis = new redis(); $resu ...

  8. Python入门、练手、视频资源汇总,拿走别客气!

    摘要:为方便朋友,重新整理汇总,内容包括长期必备.入门教程.练手项目.学习视频. 一.长期必备. 1. StackOverflow,是疑难解答.bug排除必备网站,任何编程问题请第一时间到此网站查找. ...

  9. Flask入门之Bootstrap介绍使用和Flask-Nav快速导航栏

    一.Bootstrap Bootstrap,来自 Twitter,是目前最受欢迎的前端框架. Python中,同样可以使用Bootstrap. 1. 导入Bootstrap库 from flask_b ...

  10. java中new关键字和newInstance()方法的区别

    1> new是一个关键字,可以说是一个指令: newInstance()是一个方法,Class对象的一个方法. 2> new主要作用是在内存中生成一个实例,而这个类可以没有提前加载到内从中 ...