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: 1

name=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_server

def 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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c语言,输入整数n(行数,本例为4),按照如下规则打印数字图片 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16

c语言&#xff0c;输入整数n(行数&#xff0c;本例为4&#xff09;&#xff0c;按照如下规则打印数字图片 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 以下是使用C语言编写的程序&#xff0c;根据输入的行数打印数字图片的规则&#xff1a; #include <stdio.h>int main() …

lack——主页前后端开发优化(精华:java多线程实现数据插入)

lack——主页前后端开发优化 前端开发主页 最容易的方式&#xff1a;list列表<template><van-cardv-for"user in props.userList":desc"user.profile":title"${user.username} (${user.planetCode})":thumb"user.avatarUrl"…

静态方法和属性的经典使用-单例设计模式

单例设计模式 一、设计模式二、单例模式1、饿汉式2、懒汉式3、区别 单例设计模式是静态方法和属性的经典使用。 一、设计模式 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式就像是经典的棋谱&#xff0c;不同的棋局&…

基于隐马尔可夫模型的一种流水印

文章信息 论文题目&#xff1a;An Invisible Flow Watermarking for Traffic Tracking: A Hidden Markov Model Approach 期刊&#xff08;会议&#xff09;&#xff1a;ICC 2019 - 2019 IEEE International Conference on Communications (ICC) 时间&#xff1a;2019 级别&am…

linux调用github代码文件

一&#xff0c;建库 默认建好库 默认linux已安装好git 二&#xff0c;生成SSH公钥 1&#xff0c;选这 2进教程&#xff0c;看怎么生成公钥的 根据下图教程&#xff0c;得到key&#xff0c;添加到github中&#xff01;具体教程&#xff0c;进github看 三。调用 gitssh链…

深度学习实战61-基于知识图谱与BiLSTM网络实现疾病相关智能问答系统,并支持数据扩展

大家好,我是微学AI,今天给大家介绍一下深度学习实战61-深度学习在医疗领域的应用:疾病相关智能问答系统,并支持数据扩展。本文将详细介绍如何使用Py2neo这个Python库来构建一个医疗领域知识图谱,并将数据导入Neo4j图数据库。我们将提供一些医疗领域的数据样例,并展示如何…

解决electron-build打包后运行app报错:cannot find module xxx

现象&#xff1a; 关于这个问题查了很多资料&#xff0c;也问了chatgpt都没有找到答案。 最后只能靠自己了。 于是冷静下来回想一下细节。突然发现了一个特别点。 eletron-builder打包时&#xff0c;强制要求eletron-builder和eletron必须都放在devDependencies 否则&#…

Spring的创建

文章目录 前言 一、创建一个Maven项目 二、添加spring框架支持 2.1在项目的pom.xml添加spring框架支持&#xff0c;xml配置如下  2.2添加包 总结 前言 我们通常所说的 Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是⼀个开源框架&a…

Win10电脑用U盘重装系统的步骤

在Win10电脑中&#xff0c;用户遇到了无法解决的系统问题&#xff0c;用户这时候就可以考虑重装Win10系统&#xff0c;这样即可轻松解决问题&#xff0c;从而满足自己的操作需求。接下来小编给大家详细介绍关于Win10电脑中用U盘重装系统的教程步骤。 准备工作 1. 一台正常联网可…

户外园林气象环境RTU采集主机监测的具体使用

户外园林是人们休闲、娱乐和放松心情的场所&#xff0c;良好的气象环境对于提供舒适的户外体验至关重要。为了有效监测和管理园林的气象环境&#xff0c;户外园林气象环境RTU&#xff08;Remote Terminal Unit&#xff09;采集主机应运而生。本文将详细介绍户外园林气象环境RTU…

Python财经股票数据保存表格文件 <雪球网>

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: Python 3.10 解释器 Pycharm 编辑器 &#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程&#xff0c;尽在下方&#xff0c;赶紧点击了解吧~ python源码、视频教程、插件安装教程、资料我都准备好了&…

基于STC12C5A60S2系列1T 8051单片机的IIC总线器件24C02记录单片机上电次数应用

基于STC12C5A60S2系列1T 8051单片机的IIC总线器件24C02记录单片机上电次数应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD1602简单介绍IIC通信简单介…

智慧农田可视化大数据综合管理平台方案,EasyCVR助力农业高质量发展

一、背景需求 我国是农业大国&#xff0c;农业耕地面积达到20亿亩。随着物联网、大数据、人工智能等新一代信息技术与农业农村加速融合&#xff0c;以及国家对农业的重视&#xff0c;智慧农业对于我国农业现代化建设和实施乡村振兴战略具有重大引领与推动作用。在传统农田生产…

【Java】使用 IDEA 快速生成 SpringBoot 模块

项目目录下新建 module 模块 在 pom.xml 更改为 spring initializr 配置之后的 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchem…

修复debain/ Ubuntu 中的“密钥存储在旧版 trust.gpg 密钥环中”问题

如果您在 Ubuntu 22.04 及更高版本中使用 PPA 或添加外部存储库&#xff0c;您很可能会看到如下消息&#xff1a; W: https://packagecloud.io/slacktechnologies/slack/debian/dists/jessie/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg),…

re:Invent 2023 开发者指南来了!@开发者们,Let‘s 构!

开发者们看过来! 云计算领域的风向标、科技界的年度重磅盛会 2023 亚马逊云科技 re:Invent 将于 11 月 27 日在美国拉斯维加斯盛大启幕! 学习、互动、交流、比拼…… 作为世界开发者的年度技术狂欢盛宴 美国现场或国内互动将有哪些精彩环节? 开发者们&#xff0c;Lets …

C语言数据结构-----栈和队列练习题(分析+代码)

前言 前面的博客写了如何实现栈和队列&#xff0c;下来我们来看一下队列和栈的相关习题。 链接: 栈和队列的实现 文章目录 前言1.用栈实现括号匹配2.用队列实现栈3.用栈实现队列4.设计循环队列 1.用栈实现括号匹配 此题最重要的就是数量匹配和顺序匹配。 用栈可以完美的做到…

性能优化中使用Profiler进行内存泄露的排查及解决方式

文章目录 一、前言二、内存泄露的排查方式三、参考链接 一、前言 对于常规意义上的线程使用要及时关闭&#xff0c;数据库用完要及时关闭&#xff0c;数据用完要及时清空等等这里不再赘述&#xff0c;但是在开发中总会有不熟悉的api&#xff0c;开发进度过快&#xff0c;开发人…

[⑥ADRV902x]: 软件系统初始化流程学习

前言 本篇博客主要记录ADRV902x参考软件中对ADRV902x系统的初始化流程&#xff0c;使用API函数来实现transceiver的配置&#xff0c;校准和控制等。官方将整个系统初始化称之为multichip synchronization initialization (MCS) sequence&#xff0c;主要分成PreMcsInit&#x…

CMA认证是什么?CMA软件测试报告如何获取?

资格证书在各行各业都是一种专业性象征&#xff0c;如第三方检测机构的CMA认证&#xff0c;在相应的检测报告上加盖CMA章可获得国家以及行业认可&#xff0c;还是享受税收优惠的有力证明材料。 一、CMA认证是什么?   CMA是中国计量认证的简称&#xff0c;由省级以上人民政府…