http协议简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本的传送协议。

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

http协议特性

(1) 基于TCP/IP

http协议是基于TCP/IP协议之上的应用层协议。

(2) 基于请求-响应模式

HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并 返回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有 接收到请求之前不会发送响应

(3) 无状态保存

HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议 自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个 级别,协议对于发送过的请求或响应都不做持久化处理。

使用HTTP协议,每当有新的请求发送时,就会有对应的新响应产 生。协议本身并不保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把HTTP协议设计成 如此简单的。可是,随着Web的不断发展,因无状态而导致业务处理变得棘手 的情况增多了。比如,用户登录到一家购物网站,即使他跳转到该站的 其他页面后,也需要能继续保持登录状态。针对这个实例,网站为了能 够掌握是谁送出的请求,需要保存用户的状态。HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能, 于是引入了Cookie技术。有了Cookie再用HTTP协议通信,就可以管 理状态了。有关Cookie的详细内容稍后讲解。

无连接

无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

http请求协议与响应协议

http协议包含由浏览器发送数据到服务器需要遵循的请求协议与服务器发送数据到浏览器需要遵循的请求协议。用于HTTP协议交互的信被为HTTP报文。请求端(客户端)的HTTP报文 做请求报文,响应端(服务器端)的 做响应报文。HTTP报文本身是由多行数据构成的字 文本。

请求协议

请求格式

请求方式 : get 与 post 请求

  GET提交的数据会放在URL 之后 , 以?分割URL和传输数据 , 参数之间以&相连 , 如EditBook?name=test1&id=123456

  post 方法是把提交的数据放在HTTP包的请求体中 ,

  GET提交的数据大小有限制(因为浏览器对URL的长度有限制) ,

  POST方法提交的数据没有限制

  GET与POST请求在服务器获取请求数据方式不同 .

响应协议

响应格式

web框架

web框架

Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法。web框架已经实现了很多功能,开发人员使用框架提供的方法并且完成自己的业务逻辑,就能快速开发web应用了。浏览器和服务器的是基于HTTP协议进行通信的。也可以说web框架就是在以上十几行代码基础张扩展出来的,有很多简单方便使用的方法,大大提高了开发的效率。

wsgiref模块

最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回。

如果要动态生成HTML,就需要把上述步骤自己来实现。不过,接受HTTP请求、解析HTTP请求、发送HTTP响应都是苦力活,如果我们自己来写这些底层代码,还没开始写动态HTML呢,就得花个把月去读HTTP规范。

正确的做法是底层代码由专门的服务器软件实现,我们用Python专注于生成HTML文档。因为我们不希望接触到TCP连接、HTTP原始请求和响应格式,所以,需要一个统一的接口协议来实现这样的服务器软件,让我们专心用Python编写Web业务。这个接口就是WSGI:Web Server Gateway Interface。而wsgiref模块就是python基于wsgi协议开发的服务模块。

  1. from wsgiref.simple_server import make_server
  2.  
  3. def application(environ, start_response):
  4. start_response('200 OK', [('Content-Type', 'text/html')])
  5. return [b'<h1>Hello, web!</h1>']
  6.  
  7. httpd = make_server('', 8080, application)
  8.  
  9. print('Serving HTTP on port 8000...')
  10. # 开始监听HTTP请求:
  11. httpd.serve_forever()

DIY一个web框架

models.py

  1. import pymysql
  2. #连接数据库
  3. conn = pymysql.connect(host='127.0.0.1',port= 3306,user = 'root',passwd='',db='web') #db:库名
  4. #创建游标
  5. cur = conn.cursor()
  6.  
  7. sql='''
  8. create table userinfo(
  9. id INT PRIMARY KEY ,
  10. name VARCHAR(32) ,
  11. password VARCHAR(32)
  12. )
  13.  
  14. '''
  15.  
  16. cur.execute(sql)
  17.  
  18. #提交
  19. conn.commit()
  20. #关闭指针对象
  21. cur.close()
  22. #关闭连接对象
  23. conn.close()
  24. 复制代码

启动文件manage.py

  1. from wsgiref.simple_server import make_server
  2.  
  3. from app01.views import *
  4. import urls
  5.  
  6. def routers():
  7.  
  8. URLpattern=urls.URLpattern
  9. return URLpattern
  10.  
  11. def applications(environ,start_response):
  12.  
  13. path=environ.get("PATH_INFO")
  14. start_response('200 OK', [('Content-Type', 'text/html'),('Charset', 'utf8')])
  15. urlpattern=routers()
  16. func=None
  17. for item in urlpattern:
  18. if path==item[0]:
  19. func=item[1]
  20. break
  21. if func:
  22. return [func(environ)]
  23. else:
  24. return [b"<h1>404!<h1>"]
  25.  
  26. if __name__ == '__main__':
  27.  
  28. server=make_server("",8889,applications)
  29. print("server is working...")
  30. server.serve_forever()

urls.py

  1. from app01.views import *
  2.  
  3. URLpattern = (
  4. ("/login/", login),
  5. )

views

  1. import pymysql
  2.  
  3. from urllib.parse import parse_qs
  4.  
  5. def login(request):
  6.  
  7. if request.get("REQUEST_METHOD")=="POST":
  8.  
  9. try:
  10. request_body_size = int(request.get('CONTENT_LENGTH', 0))
  11. except (ValueError):
  12. request_body_size = 0
  13.  
  14. request_body = request['wsgi.input'].read(request_body_size)
  15. data = parse_qs(request_body)
  16.  
  17. user=data.get(b"user")[0].decode("utf8")
  18. pwd=data.get(b"pwd")[0].decode("utf8")
  19.  
  20. #连接数据库
  21. conn = pymysql.connect(host='127.0.0.1',port= 3306,user = 'root',passwd='',db='web') # db:库名
  22. #创建游标
  23. cur = conn.cursor()
  24. SQL="select * from userinfo WHERE NAME ='%s' AND PASSWORD ='%s'"%(user,pwd)
  25. cur.execute(SQL)
  26.  
  27. if cur.fetchone():
  28.  
  29. f=open("templates/backend.html","rb")
  30. data=f.read()
  31. data=data.decode("utf8")
  32. return data.encode("utf8")
  33.  
  34. else:
  35. print("OK456")
  36. return b"user or pwd is wrong"
  37.  
  38. else:
  39. f = open("templates/login.html", "rb")
  40. data = f.read()
  41. f.close()
  42. return data

login.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8.  
  9. <h4>登录页面</h4>
  10. <form action="" method="post">
  11. 用户名 <input type="text" name="user">
  12. 密码 <input type="text" name="pwd">
  13. <input type="submit">
  14. </form>
  15.  
  16. </body>
  17. </html>

backend.html

  1. 复制代码
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>Title</title>
  7. </head>
  8. <body>
  9. <h4>welcome to oldboy!</h4>
  10. </body>
  11. </html>

http协议及web框架的更多相关文章

  1. HTTP协议与WEB框架简介

    HTTP协议与WEB框架简介 一.HTTP协议 HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wid ...

  2. Django框架01 / http协议、web框架本质

    Django框架01 / http协议.web框架本质 目录 Django框架01 / http协议.web框架本质 1.http协议 1.1 http协议简介 1.2 什么是http协议 1.3 H ...

  3. python 全栈开发,Day66(web应用,http协议简介,web框架)

    一.web应用 web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件.应用程序有两种模式C/S.B/S.C/S是客户端 ...

  4. Django准备知识-web应用、http协议、web框架、Django简介

    一.web应用 Web应用程序是一种可以通过web访问的应用程序(web应用本质是基于socket实现的应用程序),程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件 ...

  5. web应用,http协议简介,web框架

    一.web应用 web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件.应用程序有两种模式C/S.B/S.C/S是客户端 ...

  6. day48:django前戏之HTTP协议&自定义web框架

    目录 1.HTTP协议 1.HTTP协议简介 2.HTTP协议概述 3.HTTP协议工作原理 4.HTTP协议请求方法 5.HTTP协议状态码 6.URL 7.HTTP请求格式 8.HTTP响应格式 ...

  7. web应用、HTTP协议及web框架简介

    1. web应用 1.1 web应用程序 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件 B/S模式(浏览器/服 ...

  8. 使用Python开发轻量级的Web框架以及基于WSGI的服务器来实现一个网站页面

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目说明 二丶数据准备 三丶使用网络TCP开发一个基于WSGI协议的Web服务器 四丶使用python3开发一个轻量级的 ...

  9. 一文读懂Python web框架和web服务器之间的关系

    我们都知道 Python 作为一门强大的语言,能够适应快速原型和较大项目的制作,因此被广泛用于 web 应用程序的开发中. 在面试的过程中,大家或多或少都被问到过这样一个问题:一个请求从浏览器发出到数 ...

随机推荐

  1. 动态样式语言Sass&Less介绍与区别

    一. Sass/Scss&Less是什么? Sass (Syntactically Awesome Stylesheets)是一种动态样式语言,语法跟css一样(但多了些功能),比css好写, ...

  2. Django项目部署(阿里云)(1)--基本功能实现

    新博客地址:http://muker.net/django-server.html 手头需要部署一个Django项目,前面的博客也因为偷懒也没有部署,这里记录一下部署过程.ps:其实网上比较靠谱的说明 ...

  3. Srping框架中使用@query注解实现复杂查询

    [自己项目代码] @Query("select bean from User bean where bean.org.id=?1 and bean.group.id=?2") pu ...

  4. 重温CLR(十三) 定制特性

    利用定制特性,可宣告式为自己的代码构造添加注解来实现特殊功能.定制特性允许为几乎每一个元数据表记录项定义和应用信息.这种可扩展的元数据信息能在运行时查询,从而动态改变代码的执行方式.使用各种.NET技 ...

  5. 《DSP using MATLAB》示例 Example 6.11

    上代码: % x = -7:7 y = OnesComplement(x, 4) 函数OnesComplement代码: function [y] = OnesComplement(x, B); % ...

  6. LeetCode 819. Most Common Word

    原题链接在这里:https://leetcode.com/problems/most-common-word/description/ 题目: Given a paragraph and a list ...

  7. 【Netty】netty学习之nio网络编程的模型

    [一]NIO服务器编程结构 [二]Netty3.x服务端线程模型

  8. MyBatis之一对多映射查询sql配置文件。

    学生---文章的模型一对多模型 学生student.java类 package com.bjsxt.sxf.po; import java.util.Date; import java.util.Li ...

  9. [LeetCode系列]子集枚举问题[有重复元素]

    给定一组数(未排序, 可能有重复元素), 求出所有可能的组合. 算法和无重复元素的相似. 唯一需要注意的是, 如果当前的数字和之前的相同, 算法就只会在结尾数字是此数字的组合后加上此数字. 比如现在是 ...

  10. ASP.NET比较常用的26个性能优化技巧

    1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接池( ...