HTTP 协议(详解)

HTTP协议简介:HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(www.world wide web)服务器与本地浏览器之间传输文本的传输协议。

http请求协议与相应协议HTTP协议包含浏览器发送数据到服务器需要遵循的请求协议与服务器发送数据到浏览器需要遵循的请求协议。用于HTTP协议交互的信被称为报文。请求端的HTTP报文做请求报文,服务端做响应报文。HTTP协议特性:(1)基于TCP/IPHTTP协议是基于TCP/IP协议之上的应用层协议。(2)基于请求-响应模式HTTP协议规定:请求从客户端发出,最后服务器端响应请求并返回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有收到请求之前不会发送响应。HTTP协议是一种无状态短链接协议。是基于TCP/IP协议的应用层协议。一次请求一次响应。

 

请求协议:

请求格式:

  

请求协议包括:请求首行:请求方式 url  请求协议版本号请求头  : key:value请求体  :里面放数据。

总结:
a.请求协议由请求首行和请求头、请求体组成。
b.请求首行是由:请求方式(GET/POST) HTTP协议(HTTP/1.1) 请求IP地址
c.请求首行与请求头之间用一个\r\n隔开,请求头和请求体之间用两个(\r\n\r\n)隔开(每个请求头之间用一个\r\n隔开)
d.Cookie:也放在请求头中。

如果要保持连接,设置成长连接,可以加一个请求头(服务器客户端都要设置):Connection:keep-alive 服务器和客户端都要设置

 

请求方式: get与post请求

 
在服务端的存放位置:get 提交的数据会放在url(路径)之后,以?分割url和传输数据,参数之间以&相连,(一般服务端收到数据是在请求首行中。)post提交的数据会放在HTTP的请求体当中。

小结:GET请求的数据是放在请求首行中的:跟在请求方式后面。 所以请求首航:GET/POST 请求路径 /r/n请求地址 如果是在form表单中发送了GET请求的话,所填的数据会以xx%&xx=xx的格式挂在URL之后的。POST请求的数据是放在请求体中的:储存格式是以xx=xx%&xx=xx的格式储存的。

 

 

 

响应协议:

相应协议包括:相应首行:  协议版本(HTTP://1.1)  状态码(200)   OK(状态码的原因短句)\r\n响应头:Content-Length: 363Content-Type: text/html。。。 响应体:服务端发给客户端的数据。    

响应状态码

状态码的值是当客户端向服务器端发送请求时,返回的请求结果。借助状态码,用户可以知道服务器端是否正常请求还是出现了状态吗200 ok ,以3位数字和原因组成。

 

 

代码演示:

 

 

 

 

 

wsgiref的作用

WSGI(Web Server Gateway Interface):
wsgiref模块,是python基于WSGI协议开发的服务模块。最简单的Web应用,就是先把HTML用文件保存好。
用一个现成的HTTP服务器软件,接受用户请求,从文件中读取HTML,返回给客户端。但是,接收HTML请求,解析HTML请求,发送HTML请求都比较费时,所以这些都可以交给基于WSGI协议的wsgiref模块来完成。
我们只需要专注于用python生成HTML文档。

 

 

from wsgiref.simple_server import make_serverdef application(environ,start_response):start_response('200 OK',([('Content-Type','text/html')]))return [b"<a href='http://www.baidu.com'>baidu</a>"]         // 给客户端返回的数据// 接受请求的端口和IP地址,默认为本机地址,如果收到客户端请求,执行application函数
httpd = make_server('',8000,application)// 夯住,等待客户端发送请求
httpd.serve_forever()如果打印environ:
ctrl+f:"PATH_INFO"
打印请求路径:path=environ.get('PATH_INFO')print(path)
//默认是‘/’根路径。这样就可以在application函数中判断,如果path==‘/login/’,就给客户端返回一段login.html字符串,
如果path=='/index/',就给他返回首页的index.html字符串.**********************定义路径*******************************
urlpatterns = [('/login/',login),('/index/',index),('/reg/',reg)
]
可以定义一个列表,列表中写路径与函数的对应关系,走到对应的路径,执行对应的函数。
函数可以定义。
// 获取用户访问的url
current_path = environ.get('PATH_INFO')func = None
for key,item in urlpatterns:if key == 'current_path':func = itembreak//匹配上URL,执行对应函数,返回相应的html页面,否则返回404没有找的页面
if func:ret = func()return [ret]
else:return [b"<h1>404</h1>"]//优化代码,可以将所有的函数放到views文件中。//url也可以放到urls文件中。//在创建一个templates文件夹单存html文件。

 

 

 

 

 

转载于:https://www.cnblogs.com/zsdbk/p/9206497.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React Native集成Redux框架讲解与应用

学过React Native的都知道&#xff0c;RN的UI是根据相应组件的state进行render的&#xff0c;而页面又是由大大小小的组件构成&#xff0c;导致每个组件都必须维护自身的一套状态&#xff0c;因此当页面复杂化的时候&#xff0c;管理state会相当吃力的。而redux提供了一套机制来…

学成在线--7.CMS页面管理开发(异常处理)

文章目录1.异常处理的问题分析2.异常处理流程3.可预知异常处理1.自定义异常类2.异常抛出类3.异常捕获类4.异常处理测试1&#xff09;定义错误代码2&#xff09;异常处理测试4.不可预知异常处理1.定义异常捕获方法1&#xff09;异常抛出测试2&#xff09;异常捕获方法1.异常处理…

Django(6)

为什么不用_set related_name和related_query_name的区别related_name将成为相关对象的属性&#xff0c;允许您使用外键对模型进行“倒退”。例如&#xff0c;如果ModelA有像下面这样的字段&#xff0c;那么model_b ForeignKeyField(ModelB, related_namemodel_as)这将使您能够…

P5 RV1126编码测试Demo

目录 前言 01 测试Demo大致流程图 02 代码分析 2.1 VI设备初始化 2.2 使能通道 —— RK_MPI_VI_EnableChn 2.3 VI 和 VENC绑定 2.4 创建 编码线程 前言 从本章开始我们将要学习嵌入式音视频的学习了 &#xff0c;使用的瑞芯微的开发板 &#x1f3ac; 个人主页&#xff1a…

MP算法和OMP算法及其思想

主要介绍MP(Matching Pursuits)算法和OMP(Orthogonal Matching Pursuit)算法[1]&#xff0c;这两个算法虽然在90年代初就提出来了&#xff0c;但作为经典的算法&#xff0c;国内文献(可能有我没有搜索到)都仅描述了算法步骤和简单的应用&#xff0c;并未对其进行详尽的分析&…

SpringMVC详细示例实战教程

一、SpringMVC基础入门&#xff0c;创建一个HelloWorld程序 1.首先&#xff0c;导入SpringMVC需要的jar包。 2.添加Web.xml配置文件中关于SpringMVC的配置 123456789101112131415<!--configure the setting of springmvcDispatcherServlet and configure the mapping-->&…

学成在线--8.Freemarker入门教程

文章目录1.FreeMarker介绍1&#xff09;常用的java模板引擎还有哪些&#xff1f;2&#xff09;freemarker是一个用Java开发的模板引擎3&#xff09;模板数据模型输出2.FreeMarker快速入门1&#xff09;创建测试工程2&#xff09;配置文件3&#xff09;创建模型类4&#xff09;创…

if...elif...else...fi和case...esac的脚本条件判断式

注意1&#xff1a; if 表达式和case 表达式的区别及什么时候使用哪个要有明确的区分&#xff1f; 『 if .... then .... fi 』对于变量的判断是以『比对』的方式来分辨的&#xff0c; 如果符合状态就进行某些行为&#xff0c;并且透过较多层次 (就是elif ) 的方式来进行多个变量…

安卓自定义View进阶-分类与流程

自定义View绘制流程函数调用链(简化版) 一.自定义View分类 我将自定义View分为了两类(sloop个人分类法&#xff0c;非官方)&#xff1a; 1.自定义ViewGroup 自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件&#xff0c;大多继承自ViewGroup或各种Layout&…

【笔试记录】2021/3/13美团

2021/3/13美团笔试 1.旋转二维数组 m, n map(int, input().split()) a [] for _ in range(m):a.append(list(map(int, input().split()))) for j in range(n):for k in range(m):print(a[k][j], end )print(end\n)输入输出 2.找出输入字符串中的所有数字 s input() n …

学成在线--9.页面静态化

文章目录一.页面静态化流程二.数据模型1.轮播图DataUrl接口1&#xff09;需求分析2&#xff09;接口定义3&#xff09;Dao4&#xff09;Service5&#xff09;Controller6&#xff09;测试2.远程请求接口1&#xff09;添加依赖2&#xff09;配置RestTemplate3&#xff09;测试Re…

数据库MySQL/mariadb知识点——日志记录(2)二进制日志

二进制日志 记录已提交事务导致数据改变或潜在导致数据改变的SQL语句&#xff0c;通过“重放”日志文件中的事件来生成数据副本&#xff0c;不依赖存储引擎类型。 开启二进制日志&#xff0c;默认是关闭的&#xff0c;二进制日志和数据分开存放 开启记录二进制文件的功能&#…

【面试记录】Python常见面试200题及答案总结

Python常见面试200题及答案总结 /待完善/ 1. 列出5个常用python标准库&#xff1f; os&#xff1a;提供了不少与操作系统相关联的函数&#xff0c;提供了一种可移植的使用操作系统功能的方法。使用os模块中提供的接口&#xff0c;可实现跨平台访问。但是&#xff0c;并不是所…

Linux负载均衡软件LVS之一(概念篇)

2019独角兽企业重金招聘Python工程师标准>>> 一、 LVS简介 LVS是Linux Virtual Server的简称&#xff0c;也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目&#xff0c;它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分…

学成在线--10.页面预览

文章目录一.需求分析二. 搭建环境1.在cms服务中集成freemarker&#xff1a;2.在application.yml配置freemarker三.Service四.Controller五.页面预览测试-- 配置Nginx代理六.页面预览测试-- 添加“页面预览”链接一.需求分析 页面在发布前增加页面预览的步骤&#xff0c;方便用…

【代码刷题】排序算法总结(python实现)

排序算法总结&#xff08;Python实现&#xff09;算法介绍算法分类相关概念1. 冒泡排序&#xff08;Bubble Sort&#xff09;1.1 思想1.2 python实现1.3 复杂度1.4 稳定性2. 快速排序&#xff08;Quick Sort&#xff09;2.1 思想&#xff08;伪代码&#xff09;2.2 python实现2…

学成在线--11.RabbitMQ快速入门

文章目录一.RabbitMQ简介二.相关知识1.AMQP2.JMS是什么 &#xff1f;三.RabbitMQ的工作原理四.Hello World1.创建Maven工程2.生产者3.消费者五.总结一.RabbitMQ简介 MQ全称为Message Queue&#xff0c;即消息队列&#xff0c; RabbitMQ是由erlang语言开发&#xff0c;基于AMQP…

maven工程建立和SSM(springMVC+spring+mybatis)整合

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.环境&#xff1a; maven 版本&#xff1a;3.5.1 ecelipse mars.2 JDK : jdk1.8.0_45 tomcat : apache-tomcat-8.0.0-RC1 2. 建…

Java——网络编程(实现基于命令行的多人聊天室)

2019独角兽企业重金招聘Python工程师标准>>> 目录&#xff1a; 1.ISO和TCP/IP分层模型 2.IP协议 3.TCP/UDP协议 4.基于TCP的网络编程 5.基于UDP的网络编程 6.基于TCP的多线程的聊天室的实现 1.ISO和TCP/IP分层模型&#xff1a; OSI分层模型&#xff08;Open System …

一网打尽中文编码转换---6种编码30个方向的转换

一网打尽中文编码转换——6种编码30个方向的转换 1.问题提出 在学编程序时&#xff0c;曾经有人问过“你可以编一个记事本程序吗?”当时很不屑一顾&#xff0c;但是随着学习MFC的深入&#xff0c;了解到记事本程序也并非易事&#xff0c;难点就是四种编码之间的转换。 对于编…