当前位置: 首页 > news >正文

HTTP协议,Web框架回顾

HTTP

请求协议详情
    -请求首行---》请求方式,请求地址,请求协议版本
    -请求头---》key:value形式
        -referer:上一次访问的地址
        -user-agenet:客户端类型
        -name:lqz
        -cookie:只要是当前域【https://www.cnblogs.com/】中有的cookie,当次请求就会携带
    -请求体:get请求一般没有请求体


响应协议详情
    -响应首行:响应协议版本,响应状态码,响应描述
    -响应头:key-value形式    cookie带在响应头中---》浏览器会把它存到浏览器的cookie中
    -响应体:浏览器页面中看到的东西 ---》html标签

补充:
    post 既能带在地址栏中数据,又能带在请求体中数据
    get请求一般都带在地址栏中


补充:


    -请求一个网址:
    https://www.cnblogs.com/liuqingzheng/articles
    域名(https://www.cnblogs.com)+路径(liuqingzheng/articles)


    -携带数据到后端:有哪几种方式?


        1 带在地址栏中 域名+路径+参数


        https://www.cnblogs.com/liuqingzheng/articles?name=xx&age=111
        django从:requets.GET    request.get_full_path


        2 带在请求体中---》http的请求体--》多种编码格式


            -json:后期会使用它多
            -urlencoded:form表单,默认
            -form-data:传文件
            django从:request.POST   request.body
            
       3 带在请求头中


         django中哪里取  request.META--->取出请求头


        -服务端响应给客户端数据
        -响应头中
        -用的最多:响应体
    
    
    $.ajax({
        path:/login/?name=lqz,
        data:{}
    })----->写成这样---》最终它会变成一个http请求,写的path实际是请求路径,写的data就是请求体

HTTP 请求响应流程

HTTP 协议的请求响应流程如下图所示:

客户端向服务器发送请求

当我们在浏览器地址栏中输入网址时,浏览器会向服务器发送 HTTP 请求,请求文本格式如下:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1

其中,第一行请求行包括请求方法、请求 URL 和 HTTP 协议版本信息;第二行起的若干行为请求头(Header),用于告知服务器一些额外的信息,如客户端类型、支持的内容格式、是否支持压缩等。如上面的例子中,请求方法为 GET,请求 URL 为 /index.html,HTTP 版本为 1.1。

服务器处理请求 

当服务器接收到客户端请求后,会按照一定的算法进行处理,生成请求的资源,并将其封装在一个 HTTP 响应报文中返回给客户端。响应报文分为首部和主体两部分,其中首部用于描述响应的各种属性信息,包括响应码、内容类型、过期时间、缓存控制等信息;主体则是响应的实体内容。响应文本格式如下所示:
 

HTTP/1.0 200 OK
Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip
Content-Length: 1234 (Number of bytes in the response body)
Connection: close   // 表示连接关闭<!DOCTYPE html>
<html>
<head><title>Example Website</title>
</head>
<body><h1>Welcome to Example Website!</h1><p>This is an example website created for demonstration purposes.</p>
</body>
</html>

其中,第一行为状态行,指定了 HTTP 响应状态码(200 表示成功)和对应的状态信息(OK);第二行起的若干行为响应头,包括内容类型、内容编码、长度和连接方式等;最后是响应主体,即服务器返回的实体内容。

HTTP 报文结构 

HTTP 报文分为请求报文和响应报文两种类型,它们的格式如下所示:

 请求报文格式

Request-Line
(headers)
CRLF
[message-body]

其中,Request-Line 包括请求方法、请求 URL 和 HTTP 协议版本;headers 为若干个头部信息;CRLF 表示换行符;message-body 为可选项,用于存放请求主体内容。

例如,以下是一个请求报文示例:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1name=John&age=30

 响应报文格式

Status-Line
(headers)
CRLF
[message-body]

其中,Status-Line 包括 HTTP 状态码和状态信息;headers 为若干个头部信息;CRLF 表示换行符;message-body 为可选项,用于存放响应主体内容。

例如,以下是一个响应报文示例:

HTTP/1.0 200 OK
Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip
Content-Length: 1234 (Number of bytes in the response body)
Connection: close   // 表示连接关闭<!DOCTYPE html>
<html>
<head><title>Example Website</title>
</head>
<body><h1>Welcome to Example Website!</h1><p>This is an example website created for demonstration purposes.</p>
</body>
</html>

Web框架

1 web 框架是什么

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

2 python界有个协议  wsgi协议 

客户端浏览器和         ---------------------->      python web框架之间通信需要遵循这个协议    发出来的是http请求    符合wsgi协议的web服务器         django,flask  requset response
    
    
 基于这个协议的web服务器:
        -wsgiref:django框架默认就用它---》性能低,并发量低--》测试阶段使用
        -uwsgi:c语言写的
        -gunicorn:python写的
        
   
协议到底怎么规定的:

web服务器后面的  python框架一定是一个可调用的对象,必须接收两个参数(environ, start_response)--->environ它是个字典----》里面全是http请求的东西
    

3 使用wsgiref写个web服务

from wsgiref.simple_server import make_serverdef mya(environ, start_response):print(environ)start_response('200 OK', [('Content-Type', 'text/html')])if environ.get('PATH_INFO') == '/index':with open('index.html','rb') as f:data=f.read()elif environ.get('PATH_INFO') == '/login':with open('login.html', 'rb') as f:data = f.read()else:data=b'<h1>Hello, web!</h1>'return [data]# 可调用对象---》能加括号执行的对象if __name__ == '__main__':myserver = make_server('', 8011, mya) # 请求来了---》经过wsgiref---》调用后面的可调用对象--》传入两个参数(environ, start_response)print('监听8011')myserver.serve_forever()

相关文章:

HTTP协议,Web框架回顾

HTTP 请求协议详情 -请求首行---》请求方式&#xff0c;请求地址&#xff0c;请求协议版本 -请求头---》key:value形式 -referer&#xff1a;上一次访问的地址 -user-agenet&#xff1a;客户端类型 -name&#xff1a;lqz -cookie&…...

el-checkbox 对勾颜色调整

对勾默认是白色 改的时候一直在试着改color人&#xff0c;其实不对。我用的是element ui 的复选框 /* 对勾颜色调整 */ .el-checkbox__inner::after{/* 是改这里的颜色 */border: 2px solid #1F7DFD; border-left: 0;border-top: 0;}...

系统管理精要:深度探索 Linux 监控与管理利器

前言 系统管理在 Linux 运维中扮演着至关重要的角色&#xff0c;涵盖了系统的配置、监控和维护。了解这些方面的工具和技术对于确保系统稳定运行至关重要。本文将着重介绍系统管理的关键部分&#xff0c;包括配置系统、监控系统状态和系统的日常维护&#xff0c;并以 top 和 vm…...

vue3之echarts渐变柱状图

vue3之echarts渐变柱状图 效果&#xff1a; 核心代码&#xff1a; <template><div class"abnormal"><div class"chart" ref"chartsRef"></div></div> </template><script setup> import * as echa…...

有一种浪漫,叫接触Linux

大家好&#xff0c;我是五月。 嵌入式开发 嵌入式开发产品必须依赖硬件和软件。 硬件一般使用51单片机&#xff0c;STM32、ARM&#xff0c;做成的产品以平板&#xff0c;手机&#xff0c;智能机器人&#xff0c;智能小车居多。 软件用的当然是以linux系统为蓝本&#xff0c…...

构建 App 的方法

目录 构建 App 使用 App 设计工具以交互方式构建 App 使用 MATLAB 函数以编程方式构建 App 构建实时编辑器任务 可以使用 MATLAB 来构建可以集成到各种环境中的交互式用户界面。可以构建两种类型的用户界面&#xff1a; App - 基于用户交互执行操作的自包含界面 实时编辑器…...

laravel实现发送邮件功能

Laravel提供了简单易用的邮件发送功能&#xff0c;使用SMTP、Mailgun、Sendmail等多种驱动程序&#xff0c;以及模板引擎将邮件内容进行渲染。 1.在项目目录.env配置email信息 MAIL_MAILERsmtp MAIL_HOSTsmtp.qq.com MAIL_PORT465 MAIL_FROM_ADDRESSuserqq.com MAIL_USERNAME…...

概要设计检查单、需求规格说明检查单

1、概要设计检查表 2、需求规格说明书检查表 概要&#xff08;结构&#xff09;设计检查表 工程名称 业主单位 承建单位 检查依据 1、设计方案、投标文件&#xff1b;2、合同&#xff1b;3、信息系统相关技术标准及安全规范&#xff1b; 检查类目 检查内容 检查…...

达梦列式存储和clickhouse基准测试

要验证达梦BigTable和ClickHouse的性能差异&#xff0c;您需要进行一系列基准测试。基准测试通常包括多个步骤&#xff0c;如准备测试环境、设计测试案例、执行测试、收集数据和分析结果。以下是您可以遵循的一般步骤&#xff1a; 准备测试环境&#xff1a; 确保两个数据库系统…...

【Web】NewStarCtf Week2 个人复现

目录 ①游戏高手 ②include 0。0 ③ez_sql ④Unserialize&#xff1f; ⑤Upload again! ⑥ R!!C!!E!! ①游戏高手 经典前端js小游戏 检索与分数相关的变量 控制台直接修改分数拿到flag ②include 0。0 禁了base64和rot13 尝试过包含/var/log/apache/access.log,ph…...

Python实现Windows服务自启动、禁用、启动、停止、删除

如果一个程序被服务监管&#xff0c;那么仅仅kill程序是无用的&#xff0c;还要把服务关掉 import win32service import win32serviceutildef EnableService(service_name):try:# 获取服务管理器scm win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ALL_ACC…...

【华为OD题库-043】二维伞的雨滴效应-java

题目 普通的伞在二维平面世界中&#xff0c;左右两侧均有一条边&#xff0c;而两侧伞边最下面各有一个伞坠子&#xff0c;雨滴落到伞面&#xff0c;逐步流到伞坠处&#xff0c;会将伞坠的信息携带并落到地面&#xff0c;随着日积月累&#xff0c;地面会呈现伞坠的信息。 1、为了…...

百度手机浏览器关键词排名优化——提升关键词排名 开源百度小程序源码系统 附带完整的搭建教程

百度作为国内领先的搜索引擎&#xff0c;一直致力于为用户提供最优质的信息服务。在移动互联网时代&#xff0c;手机浏览器成为了用户获取信息的主要渠道。而小程序作为轻量级的应用程序&#xff0c;具有即用即走、无需下载等优势&#xff0c;越来越受到用户的青睐。然而&#…...

Git 的基本概念和使用方式。

Git 是一个开源的分布式版本控制系统&#xff0c;它可以记录代码的修改历史&#xff0c;跟踪文件的版本变化&#xff0c;并支持多人协同开发。Git 的基本概念包括&#xff1a; 1. 仓库&#xff08;Repository&#xff09;&#xff1a;存放代码和版本历史记录的地方。 2. 分支…...

MarkDown学习

MarkDown学习 标题 三级标题 四级标题 字体 加粗&#xff08;两侧加两个星号&#xff09;&#xff1a;Hello&#xff0c;World! 斜体&#xff08;两侧加一个星号&#xff09;&#xff1a;Hello&#xff0c;World! 加粗加斜体&#xff08;两侧加三个星号&#xff09;&#xff1a…...

案例:某电子产品电商平台借助监控易保障网络正常运行

一、背景介绍 某电子产品电商平台是一家专注于电子产品销售的电商平台&#xff0c;拥有庞大的用户群体和丰富的产品线。随着业务规模的不断扩大&#xff0c;网络设备的数量和复杂性也不断增加&#xff0c;网络故障和性能问题时有发生&#xff0c;给平台的稳定运行带来了很大的挑…...

IntelliJ IDEA 中有什么让你相见恨晚的技巧

一、条件断点 循环中经常用到这个技巧&#xff0c;比如&#xff1a;遍历1个大List的过程中&#xff0c;想让断点停在某个特定值。 参考上图&#xff0c;在断点的位置&#xff0c;右击断点旁边的小红点&#xff0c;会出来一个界面&#xff0c;在Condition这里填入断点条件即可&…...

游戏被攻击了怎么办

随着网络技术和网络应用的发展&#xff0c;网络安全问题显得越来越重要&#xff0c;在创造一个和谐共赢的互联网生态环境的路途中总是会遇到各种各样的问题。最常见的当属于DDOS攻击&#xff08;Distributed Denial of Service&#xff09;即分布式阻断服务。由于容易实施、难以…...

MySQL 索引类型

什么是索引&#xff1f; 索引是一种用于提高数据库查询性能的数据结构。它是在表中一个或多个列上创建的&#xff0c;可以加快对这些列的数据检索速度。 索引的作用是通过创建一个额外的数据结构&#xff0c;使得数据库可以更快地定位和访问数据。当执行查询语句时&#xff0c…...

哈希表——闭散列表

该哈希表实现是闭散列实现法。 闭散列表&#xff1a; 闭散列&#xff1a;也叫开放定址法&#xff0c;当发生哈希冲突时&#xff0c;如果哈希表未被装满&#xff0c;说明在哈希表中必然还有空位置&#xff0c;那么可以把key存放到冲突位置中的“下一个” 空位置中去。 那如何寻…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...