重修课程day59(django之http)

一 http协议介绍

 http协议(Hyper Text Transfer Protocol):超文本传输协议,是基于应用层的面向对象协议,靠tcp协议和IP来传输数据,请求和响应是http协议的基本概念。

 http协议工作于客户端与服务端架构之上,浏览器作为http客户端通过url向HTTP服务端发送所有请求。

二 http特点

 1 简单快速:浏览器向服务端发送请求时,只需要传送请求的方法和路径。

  请求方法:GET,POST,HEAD,不同方法有着不同的联系类型。

 2 灵活:http传输可以是任意的数据类型,由Content_Type控制。

 3 无连接:每次只限制一次请求,服务器一处理玩请求并受到客户端的应答后就断开链接。这样就可以节省传输时间。

 4 无状态:对于事物的处理没有记忆的能力。

三 http请求协议

 什么叫做请求协议:浏览器请求服务端的数据格式,也叫做请求格式

 请求的格式:

请求首行;        // 请求方式 请求路径 协议和版本,例如:GET /index.html HTTP/1.1
请求头信息;      // 请求头名称:请求头内容,即为key:value格式,例如:Host:localhost
空行;           // 用来与请求体分隔开
请求体。         // GET没有请求体,只有POST有请求体。

 GET请求:

GET /562f25980001b1b106000338.jpg HTTP/1.1
Host    img.mukewang.com
User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept    image/webp,image/*,*/*;q=0.8
Referer    http://www.imooc.com/
Accept-Encoding    gzip, deflate, sdch
Accept-Language    zh-CN,zh;q=0.8

 http默认的请求的方法是GET,数据跟着url后面,由?分割开url和数据,多个参数之间是由&符号分隔开,空格转为+号,文字就会直接用BASE64加密,没有请求体数据,大小有限制,并且请求的数据会暴露在地址栏中。 

 GET常用的操作:在地址栏直接给出url,点击页面的一次超链接,还有form表单默认是GET请求,但是可以设置为POST请求。

POST请求:

POST / HTTP1.1
Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley

 POST请求方法:数据放在请求体里面的,请求的数据大小没有限制,对于GET请求来说,POST请求数据比较安全。

四 http响应协议

 服务器接收到客户端请求后会返回一个http的响应消息。

 响应格式:http响应也是有四个部分组成,分别是:响应首行(状态码),响应头,空行和响应体。

 实例:

HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8

<html>
      <head></head>
      <body>
            <!--body goes here-->
      </body>
</html>
第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。

第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)
第二部分:消息报头,用来说明客户端要使用的一些附加信息

第二行和第三行为消息报头,
Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8
第三部分:空行,消息报头后面的空行是必须的
第四部分:响应正文,服务器返回给客户端的文本信息。

空行后面的html部分为响应正文。

 状态码响应的含义:

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求

常见状态码:
OK                        //客户端请求成功
Bad Request               //客户端请求有语法错误,不能被服务器所理解
Unauthorized              //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
Forbidden                 //服务器收到请求,但是拒绝提供服务
Not Found                 //请求资源不存在,eg:输入了错误的URL
Internal Server Error     //服务器发生不可预期的错误
Server Unavailable        //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

 request:请求头   response:响应头。

User_Aaent:判断是否是浏览器发送的请求。

cookie:做验证防护

host:请求的数据

referer:防盗链相关的问题,本次跳转的来源

accept:接收数据

1、Host

请求的web服务器域名地址

2、User-Agent

HTTP客户端运行的浏览器类型的详细信息。通过该头部信息,web服务器可以判断出http请求的客户端的浏览器的类型。

3、Accept

指定客户端能够接收的内容类型,内容类型的先后次序表示客户都接收的先后次序

4、Accept-Lanuage

指定HTTP客户端浏览器用来展示返回信息优先选择的语言

5、Accept-Encoding

指定客户端浏览器可以支持的web服务器返回内容压缩编码类型。表示允许服务器在将输出内容发送到客户端以前进行压缩,以节约带宽。
而这里设置的就是客户端浏览器所能够支持的返回压缩格式。

6、Accept-Charset

HTTP客户端浏览器可以接受的字符编码集

7、Content-Type

显示此HTTP请求提交的内容类型。一般只有post提交时才需要设置该属性

有关Content-Type属性值有如下两种编码类型:

(1)“application/x-www-form-urlencoded”: 表单数据向服务器提交时所采用的编码类型,默认的缺省值就是“application/x-www-form-urlencoded”。
     然而,在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低。

(2)“multipart/form-data”: 在文件上载时,所使用的编码类型应当是“multipart/form-data”,它既可以发送文本数据,也支持二进制数据上载。

当提交为表单数据时,可以使用“application/x-www-form-urlencoded”;当提交的是文件时,就需要使用“multipart/form-data”编码类型。

 

时间: 2024-11-09 04:49:31

重修课程day59(django之http)的相关文章

重修课程day62(django之中间件)

中间件: class MiddleWare2(MiddlewareMixin): def process_request(self,request): print("MW2 request...........") # return HttpResponse("666!") def process_view(self, request, callback, callback_args, callback_kwargs): # print("callback

重修课程day57(Django的开始)

一 浏览器相关知识 http:只有依赖一回,属于短链接,不会报错客户端的信息. 浏览器相当于一个客户端,客户端的链接 服务端:socket服务端,起服务监听客户端的请求. import socket sk=socket.socket() sk.bind(('192.168.11.38',8888)) sk.listen(5) def index(): with open('轮播网页.html',encoding='utf-8')as f: ret=f.read() return ret def

重修课程day61(django之补充)

一 QuerySet类型 QuerySet类型:只和orm有关,如果一涉及数据库,就会有QuerySet类型的出现. QuerySet切片操作:QuerySet是支持切片操作的,不过不能放负数.查询集的切片会返回一个新的查询集,不会执行查询. Entry.objects.all()[:5] # (LIMIT 5) Entry.objects.all()[5:10] # (OFFSET 5 LIMIT 5) QuerySet遍历操作: # for book in bookList: # print

重修课程day45(mysql之练习题二)

准备表: create table class(cid int primary key auto_increment, caption char(5) not null unique); INSERT into class(caption)values('三年二班'),('一年三班'),('三年一班'); CREATE table student(sid int primary key auto_increment, sname char(6) not null, gender enum('男'

重修课程day7(python基础4之基础补充)

一 bit,和bytes的关系 bit:就是计算机的最小的表示单位. bytes:就是计算机的最小的储存单位. 1  字节(bytes) = 8 位(bit) 格式: print(bytes('字符',encoding='utf-8')) 文件默认读取文件 二 strip的其他功能 strip去掉两边的空格,换行符,制表符等等,还可以指定删除字符 a=' dsad ' print(a.strip()) b='\ndsfsadagh\t' print(b.strip()) print(123) c

重修课程day1(python基础1)

一 什么是计算机 1 计算机就是由一堆硬件组成的一个机器. 2 硬件的分类: CPU:犹如人类的大脑,运行着需要运行的程序. 内存:将 CPU要运行的内容从硬盘中读取出来,然后CPU在内存里拿内容,只是一个短暂性的存储,加入突然关机,数据会丢失. 硬盘:硬盘相当于人的笔记本,长期可以存储数据,永久性的存储.关机数据也不会丢失. 他们三者之间是由操作系统来操作的. 3 什么使操作系统:操作系统本身就是一个软件,而它是建立在硬件之上,他控制着每一硬件的运行,是硬件的运行有序化. 4 什么是应用程序:

重修课程day24(面向对象5之封装)

type:是所有类的类型,所有类的类型默认是type. 一 封装 1 什么叫做封装:就是将自己想要隐藏起来的内容给隐藏起来. 封装的原则:1.1将不需要对外提供的内容隐藏起来:1,2将属性隐藏起来,提供公共方法对其访问. 2 私有属性:self.__属性名 3 私有的静态属性:__静态属性名 4 私有方法:def  __函数名(self): # class Teacher: # __zhiwei='laoshi' #创建私有静态属性 # def __init__(self,name,pwd):

重修课程day22(面向对象三之继承和派生)

面向对象的三大特性:封装,继承和多态 一 继承 1 什么是继承:1.1 什么是什么的关系.一个类是另一个类的子类. 1.2 继承是一种创新类的方式.新建的类可以继承一个或多个父类.父类又称为基类或超类,新建的类又称为派生类或子类 继承一个父类叫做单继承:继承多个父类叫做多继承. 2 继承的好处:减少代码的冗余,增强了代码的重用性. 二 继承的用法 super:调用父类的功能和方法 格式一:在子类的内部调用父类的属性和方法 class 父类名: def  属性(self): 功能 class 子类

重修课程day6(python基础4之集合和文件操作)

一 字典属性方法补充 1 clear  :清空 2 Cory:拷贝 3 fromkeys:生成一个字典,类下面的一个属性方法 4 pop  :删除 5 popitem  : 删除整个元素 6 setdefault:只添加不修改 7 update :存在的话跟新,没有就会添加 二 集合以及集合的功能 集合是一个不存在重复的值,而且还是无序的. 1 add :添加不可能重复 2 clear :清空 3 copy :拷贝 4 difference :差集只存在一个集合的 5 difference_up