本文介绍: 统一资源定位符是对可以互联网上得到的资源位置访问方法的一种简洁表示,是互联网标准资源的地址互联网上的每个文件都有一个唯一的URL,它包含信息指出文件位置以及浏览器应该怎么处理格式协议: //IP:端口(80)/路径http协议,如果不写端口号默认端口是80?之前写的是请求路径,?后面写的请求数据部分补充:post请求既能携带地址栏中的数据,也能携带请求体中的数据get请求一般都携带地址栏中的数据

【1】Web应用

基于socket一个服务

import socket

def server_run():
    soc = socket.socket()
    soc.bind(('127.0.0.1', 8008))
    soc.listen(5)
    while True:
        conn, addr = soc.accept()
        recv_data = conn.recv(1024)
        print(recv_data)
        # 1 直接在send里写,发送给客户端  http响应格式
        # conn.send(b'HTTP/1.1 200 OKrnrn&lt;h1&gt;hello web&lt;/h1&gt;&lt;img src="https://img2.woyaogexing.com/2022/12/24/a22973058eab2aafa11248a8b6031f5e.jpg"&gt;</img&gt;')
        #2 打开一个html文件,发送给客户端
        # with open('index.html','r',encoding='utf-8') as f:
        #     data=f.read()
        # conn.send(('HTTP/1.1 200 OKrnrn%s'%data).encode('utf-8'))
        # 3 动态网页字符串替换
        import time
        now=time. ("%Y-%m-%d %H:%M:%S", time.localtime())
        print(now)
        with open('index.html','r',encoding='utf-8') as f:
            data=f.read()
        data=data.replace('@@',now)
        conn.send(('HTTP/1.1 200 OKrnrn%s'%data).encode('utf-8'))
        conn.close()

if __name__ == '__main__':
    server_run()

【2】HTTP协议

        【2.1】http请求协议与响应协议

                请求协议

请求协议:

         请求首行 ——》 请求方式——》 请求地址——-》请求协议/版本号    rn

        请求头 ——-》keyvalue格式   rn    rnrn

        请求体:get请求一般没有请求体,post请求有请求体

                响应协议

响应协议:

        响应首行 ———》HTTP/1.1  200 OK  rn        # 协议版本号 响应状态码  状态码解释

        响应头:keyvalue格式,cookie带在响应头中,浏览器会把cookie存到浏览器cookie

        响应体:一般为html标签,一般在浏览器看到的都是响应体内容     

        【2.2】URL简介统一资源定位

统一资源定位符是对可以互联网上得到的资源的位置访问方法的一种简洁的表示,是互联网标准资源的地址互联网上的每个文件都有一个唯一的URL,它包含信息指出文件的位置以及浏览器应该怎么处理


格式:

        协议: //IP:端口(80)/路径name=lqz&amp;age=18 

 

http协议,如果不写端口号默认端口是80

 

?之前写的是请求路径,?后面写的请求数据部分

 

 补充:

        post请求既能携带地址栏中的数据,也能携带请求体中的数据

        get请求一般都携带地址栏中的数据

补充

请求一个地址https://www.cnblogs.com/liuqingzheng/articles

        携带数据到后端的三种方式

                方式一、将数据携带在地址栏中 ——- 域名+地址+参数

                        https://www.cnblogs.com/liuqingzheng/articles?a=1&amp;b=2

                取值request.GET    或者   request.get_full_path


                方式二、将数据携带在请求体中 —- http的请求体 —— 有多种编码格式

                        编码格式:

                                1、json序列化

                                2、urlencodeform表单默认编码格式

                                3、formdata:传输文件使用编码格式

                  取值request.POST      或者    request.body


                方式三、将数据携带在请求头中

                        通过 request.META ———》取出请求头


    $.ajax({
        path:/login/?name=lqz,
        data:{}
    })----->写成这样---》最终它会变成一个http请求,写的path实际是请求路径,写的data就是请求体

        【2.3】HTTP协议补充

 HTTP协议0.9版本

        客户端 ———- 服务

 

建立链接 —- —— 三次握手

客户端给服务发送消息  ——– 借助tcp通道

服务端给客户端发送消息 ——— 借助tcp通道

断开链接 ———— 四次挥手

 


HTTP协议1.1版本

        长连接

                客户端同时发起两个http请求

客户端  ———》 服务

建立链接 —- —— 三次握手

一次发送请求:

        客户端给服务端发送消息  ——– 借助tcp通道

        服务端给客户端发送消息 ——— 借助tcp通道

第二次发送请求:

        客户端给服务端发送消息  ——– 借助tcp通道

        服务端给客户端发送消息 ——— 借助tcp通道

断开链接 ———— 四次挥手


HTTP协议2.0版本   ——–》 多路复用

客户端同时发送5个http请求

客户端 ——–》 服务端

建立tcp链接 ——-》三次握手

tcp流式协议 ——– 》一次带多条数据(比如5条http请求数据)

tcp响应 ——》一次性将5条请求数据响应回来

 

断开链接 ———-》四次挥手

【3】Web框架

       1、概念

Web框架(Web framework)是一种开发框架用来支持动态网站网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站方式,也为web行为提供了一套通用的方法,浏览器服务器的是基于HTTP协议进行通信的,大大提高了开发的效率

       2、wsgi协议

 客户端浏览器和         ———————->             python web框架之间通信需要遵循这个协议

发出来的是http请求    符合wsgi协议的web服务器         djangoflask  requset response


基于wsgi协议的web服务器

        1、wsgirefdjango框架默认使用wsgiref —- 特点:性能低,并发量低,测试使用

        2、uwsgi使用C语言编写

        3、gunicorn:使用Python语言编写


wsgiref协议:web服务器后面的python框架一定是一个调用对象,必须接收两个参数(environstart_response) —— environ接收客户端发来的所有请求

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

原文地址:https://blog.csdn.net/m0_69962105/article/details/134674783

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_27880.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注