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://www.mzph.cn/news/181476.shtml

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

相关文章

500元价位开放式耳机哪款好用、百元价位开放式耳机推荐

经常佩戴入耳式耳机的朋友应该都遇到过耳朵肿胀的感觉&#xff0c;这个时候&#xff0c;就是耳朵在告诉你&#xff0c;该休息一会了。如果耳朵里经常塞着耳机听歌&#xff0c;时间久了很容易引起听力衰退等问题&#xff0c;这是不可逆的伤害。各位朋友如果和我一样每天都戴着耳…

1120:最值交换

题目描述 有一个长度为n的整数序列。请写一个程序&#xff0c;先把序列中的最小值与第一个数交换&#xff0c;再把最大值与最后一个数交换。输出转换好的序列。 分别编写两个函数MinIndex()和MaxIndex()来计算最小值下标和最大值下标。 int MinIndex(int a[], int n); //函数返…

大数据学习(25)-hive核心总结

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…

如何在centos服务器上安装docker保姆教程

在CentOS 7上安装Docker 更新系统 sudo yum update 安装必要的软件包 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 添加Docker仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo安装Docker引擎 sudo…

封装websocket并在vuejs中调用

1、创建JS文件ce-websocket-util.js class CeWebsocketUtil {websocket null;reConnectTimes 0; // 失败后重新连接次数wsInterVal null; // 重新连接定时器maxReConnectTimes 10; // 最大连接次数,默认10次reIntervalTime 60 * 1000; // 重连间隔时间&#xff0c;默认1m…

Java CopyOnWriteArrayList

在 Java 的集合中, List 是一个很高频使用的集合中, 但是平时使用的 ArrayList, LinkedList 都是线程不安全的。 线程可见性不支持, 内部的 fast-fail 机制等都是表明他们不适合高频发的场景使用。如果我们需要一个线程安全的列表集合 使用古老的集合类 Vector通过 Collections…

C++基础 -12- 拷贝构造(浅拷贝)

系统会自动生成浅拷贝&#xff0c;就相当于直接赋值 #include "iostream"using namespace std;class base { public:base(int a, int b) : a(a), b(b){}int a;int b; }; int main() {base newbase1(10, 20);base newbase2 newbase1;cout << newbase1.a <…

另类解决方案Apache(httpd) 报错You don‘t have permission to access xxx /on this server

在一个Kylix系统&#xff08;应该是Redhat/Centos改版&#xff09;的httpd服务器的文档目录下新增加了一个文件&#xff0c;权限也都设置成了644&#xff0c;结果从浏览器访问时&#xff0c;报错&#xff1a;Apache(httpd) 报错You don’t have permission to access /on this …

数据库的增删查改(CRUD)基础版

CRUD: create增加、retrieve查询、update更新、delete删除 注意一点&#xff1a;MySQL对大小写是不敏感的 目录 新增&#xff08;create&#xff09; 全列插入 指定列插入 多行插入 查询&#xff08;Retrieve&#xff09; 列查询 全列查询 指定列查询 表达式查询 …

【SpringBoot】调用外部接口

文章目录 原始httpClient请求使用RestTemplate方法Get请求Post 请求使用Feign进行消费 原始httpClient请求 /** description get方式获取入参&#xff0c;插入数据并发起流程* author lyx* params documentId* return String*///RequestMapping("/submit/{documentId}&quo…

wsl 命令详解

WSL 简介 WSL全称 Windows Subsystem for Linux &#xff0c;是微软开发的一个运行在Windows上的兼容层&#xff0c;它允许开发人员和用户直接在Windows上运行原生Linux二进制文件&#xff0c;而无需配置或修改系统。 WSL命令是用于管理和操作WSL子系统的工具。 常用WSL命令…

Unity优化——脚本优化策略4

大家好&#xff0c;这里是七七&#xff0c;今天这期是脚本优化的最后一期了。下期的主题是批处理的优势&#xff0c;感兴趣的小伙伴们可以收藏本专题&#xff0c;七七会持续更新。 话不多说&#xff0c;开始今天的内容。 一、最小化反序列化行为 Unity的序列化系统主要用于场…

系统设计概念:生产 Web 应用的架构

在你使用的每个完美应用程序背后&#xff0c;都有一整套的架构、测试、监控和安全措施。今天&#xff0c;让我们来看看一个生产就绪应用程序的非常高层次的架构。 CI/CD 管道 我们的第一个关键领域是持续集成和持续部署——CI/CD 管道。 这确保我们的代码从存储库经过一系列测试…

Java核心知识点整理大全22-笔记

目录 19.1.14. CAP 一致性&#xff08;C&#xff09;&#xff1a; 可用性&#xff08;A&#xff09;&#xff1a; 分区容忍性&#xff08;P&#xff09;&#xff1a; 20. 一致性算法 20.1.1. Paxos Paxos 三种角色&#xff1a;Proposer&#xff0c;Acceptor&#xff0c;L…

Akamai + Linode , 为您提供两全其美的 IaaS 云解决方案

进军全球市场&#xff0c;海外扩张布局 面对超大规模云、“替代云”服务 出海企业难免陷入“两难”境地 前者成熟昂贵&#xff0c;后者稳定难保…… 多云战略趋势下&#xff0c;Akamai 能够为您免除这种烦恼&#xff0c;通过收购“替代云”服务的先行者 Linode&#xff0c;我…

YOLOv8独家原创改进:自研独家创新MSAM注意力,通道注意力升级,魔改CBAM

💡💡💡本文自研创新改进:MSAM(CBAM升级版):通道注意力具备多尺度性能,多分支深度卷积更好的提取多尺度特征,最后高效结合空间注意力 1)作为注意力MSAM使用; 推荐指数:五星 MSCA | 亲测在多个数据集能够实现涨点,对标CBAM。 在道路缺陷检测任务中,原始ma…

VMware通过ISO镜像安装window2016虚拟机

1.点文件->新建虚拟机 2.进入到下边页面 3.根据你的服务器硬件选择硬件兼容性 4.选择2016版本的windows(注&#xff1a;没有该版本的话选择最高版本) 5.根据你的需求选择引导设备( 启动过程&#xff1a; BIOS&#xff1a; 在计算机启动时&#xff0c;BIOS负责进行自检&#…

华天动力-OA8000 MyHttpServlet 文件上传漏洞复现

0x01 产品简介 华天动力OA是一款将先进的管理思想、 管理模式和软件技术、网络技术相结合&#xff0c;为用户提供了低成本、 高效能的协同办公和管理平台。 0x02 漏洞概述 华天动力OA MyHttpServlet 存在任意文件上传漏洞&#xff0c;未经身份认证的攻击者可上传恶意的raq文件…

【C 语言经典100例】C 练习实例15

题目&#xff1a;利用条件运算符的嵌套来完成此题&#xff1a;学习成绩>90分的同学用A表示&#xff0c;60-89分之间的用B表示&#xff0c;60分以下的用C表示。 程序分析&#xff1a;(a>b)?a:b这是条件运算符的基本例子。 #include<stdio.h> int main() {int sco…

Kanna库代码示例

编写一个使用Kanna库的网络爬虫程序。以下是代码的详细解释&#xff1a; swift import Kanna // 创建一个对象 let proxy Proxy(host: ") // 创建一个Kanna对象 let kanna Kanna(proxy: proxy) // 创建一个请求对象 let request Request(url: "") // 使用…