django 大回顾

https://www.cnblogs.com/liuqingzheng/p/17120548.html

1 Web应用

##### cs/bs 架构

# c/s  mysql  c和s装在同一台机器上
	-c链接s: cmd窗口中   mysql -h 127.0.0.1 -P 3306 -uroot -p密码
    -网络协议:一般情况,都是软件自定制协议---》基本都是基于TCP
# b/s 浏览器--服务端 
	-咱们写的django,运行后----》s 服务端
    -客户端链接----》浏览器 
    -网络协议:所有全是  http协议---》基于TCP
    	-如果不是http协议,浏览器识别不了

# bs本质就是cs

# bs好处---》软件更新了---》只需要后端更新--》前端是浏览器,不需要变---》直接访问,看到的就是最新的


###### 基于SOCKET写一个web应用#######
-我们学习bs架构软件开发---》我们开发 s端
-使用socket 写一个 s端---》浏览器就可以访问了



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 OK\r\n\r\n<h1>hello web</h1><img src="https://img2.woyaogexing.com/2022/12/24/a22973058eab2aafa11248a8b6031f5e.jpg"></img>')
        #2 打开一个html文件,发送给客户端
        # with open('index.html','r',encoding='utf-8') as f:
        #     data=f.read()
        # conn.send(('HTTP/1.1 200 OK\r\n\r\n%s'%data).encode('utf-8'))
        # 3 动态网页,字符串替换
        import time
        now=time.strftime("%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 OK\r\n\r\n%s'%data).encode('utf-8'))
        conn.close()

if __name__ == '__main__':
    server_run()

2 http协议

#1 是什么?
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)
# 2 作用是?
服务器与本地浏览器之间传输超文本的传送协议

# 3 特点是什么?
	-1基于TCP协议之上的【应用层】协议----》它是可靠传输
    -2 基于请求-响应模式: 必须客户端主动发起--》服务端才有响应
    	-如果实时跟服务端通信---》每隔2s发送一次请求--》轮询---》实现实时聊天
        -web版微信
        -实时通信---》使用轮询, webscoket 协议
        
        
   -3 无状态保存  
		-发送多次请求,对于服务端来讲,都是新的
    	-cookie,session做会话保持
        
   -4 无连接  客户端不会一直跟服务端链接
		基于tcp---》有链接
 
# 4 http请求协议与响应协议
	-请求协议
    	-请求首行---》请求方式--》请求地址--》请求协议版本号 1.1  \r\n
        -请求头:key-value形式 \r\n   \r\n\r\n
        -请求体:get请求一般没有请求体,post请求有请求体
        
    -响应协议 
    	-响应首行:HTTP/1.1 200 OK\r\n   --协议版本---响应状态码--》响应描述符
        -响应头:响应头有什么
        -响应体:一般给个html标签
        	浏览器中看到的页面,都是响应体的内容
    
    
'''
# 请求首行
GET / HTTP/1.1\r\n

# 请求头
Host: 127.0.0.1:8008\r\n
Connection: keep-alive\r\n
sec-ch-ua: "Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"\r\nsec-ch-ua-mobile: ?0\r\nsec-ch-ua-platform: "Windows"\r\nUpgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\r\n
Sec-Fetch-Site: none\r\nSec-Fetch-Mode: navigate\r\n
Sec-Fetch-User: ?1\r\n
Sec-Fetch-Dest: document\r\n
Accept-Encoding: gzip, deflate, br\r\nAccept-Language: zh-CN,zh;q=0.9\r\n
Cookie: csrftoken=0Eq1YnctKcjVroVgrU0MtwZ7hTMsEAkUUqf9nSyKBJsOtowSZbO4Cb99eCk4y0LH\r\n\r\n
# 请求体


'''

# 0 把mysql 全都卸载---》5.7版本---》把5.6卸载
	https://zhuanlan.zhihu.com/p/571585588
    

    
# 1 搜http 有哪些主要版本,版本区别是什么
	0.9
    """
    最初版本的HTTP协议,只支持GET方法,并且没有请求头和响应头的概念,只能传输纯文本。于1991年发布,由Tim Berners-Lee创建,被认为是HTTP的起源。该版本只支持GET请求,并且响应只能是HTML文本。
    """
    1.0
    """
    在HTTP/0.9的基础上增加了请求头和响应头的概念,并支持多种HTTP方法,包括GET、POST、PUT、DELETE等。于1996年发布,该版本的周期大约是6年,在2000年左右被广泛使用。
    """
    1.1
    """
    在HTTP/1.0的基础上进行了扩展和优化,包括持久连接、管线化、分块传输编码等特性,可以更高效地传输数据。于1999年发布,该版本的周期大约是15年,在2014年左右仍然是主流。
    """
    2.0
    """
    在HTTP/1.1的基础上进行了进一步的优化,包括二进制协议、多路复用、服务器推送等特性,能够更快地传输数据。HTTP/2于2015年发布,采用二进制协议,引入了多路复用、服务器推送等特性,进一步提高了性能。该版本的周期约为6年。
    """
    3.0
    """
    :是HTTP协议的最新版本,基于QUIC协议进行了重构,具有更快的传输速度、更低的延迟和更好的安全性。HTTP/3于2020年发布,采用基于UDP的QUIC协议,该版本目前正在逐渐被广泛采用。
    """
    
# 2 常用请求头有哪些,响应头有什么
HTTP Request Header 请求头
HTTP Responses Header 响应头
-Cookie
"""
.什么是Cookie
Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息。
有的接口需要登录之后才会生成Cookie信息,必须要保持登录的状态。
"""

    -contentype
    
    它的作用是:请求的报文格式;
# 3 有哪些常用响应状态码

1××:消息响应
2××:成功响应
3××:重定响应
4××:客户端错误
5××:服务器端错误

500 内部服务器错误
Internal Server Error 500内部服务器错误,服务器遇到未知无法解决的问题。
404 请求错误
Not Found 404 错误请求,因发送的请求语法错误,服务器无法正常读取。
403 禁止访问
Forbidden 403 禁止访问,客户端没有权利访问所请求内容,服务器拒绝本次请求。
400 错误请求
Bad Request 400 错误请求,因发送的请求语法错误,服务器无法正常读取。
401 未经授权
Unauthorized 401 未经授权,需要身份验证后才能获取所请求的内容,类似于403错误.不同点是.401错误后,只要正确输入帐号密码,验证即可通过。
200 请求成功
200 OK 请求成功,表示已经请求成功,默认情况下的状态码为200的响应就可以被缓存了。
502 无效网关
Bad Gateway 502 网关错误,服务器作为网关且从上游服务器获取到了一个无效的HTTP响应。

HTTP Request Header 请求头

Accept:指定客户端能够接收的内容类型。

Accept-Charset:浏览器可以接受的字符编码集。

Accept-Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型。

Accept-Language:浏览器可接受的语言。

Accept-Ranges:可以请求网页实体的一个或者多个子范围字段。

AuthorizationHTTP:授权的授权证书。

Cache-Control:指定请求和响应遵循的缓存机制。

Connection:表示是否需要持久连接。(HTTP 1.1默认进行持久连接)

CookieHTTP:请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。

Content-Length:请求的内容长度。

Content-Type:请求的与实体对应的MIME信息。

Date:请求发送的日期和时间。

Expect:请求的特定的服务器行为。

From:发出请求的用户的Email。

Host:指定请求的服务器的域名和端口号。

If-Match:只有请求内容与实体相匹配才有效。

If-Modified-Since:如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码。

If-None-Match:如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变。

If-Range:如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。

If-Unmodified-Since:只在实体在指定时间之后未被修改才请求成功。

Max-Forwards:限制信息通过代理和网关传送的时间。

Pragma:用来包含实现特定的指令。

Proxy-Authorization:连接到代理的授权证书。

Range:只请求实体的一部分,指定范围。

Referer:先前网页的地址,当前请求网页紧随其后,即来路。

TE:客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息。

Upgrade:向服务器指定某种传输协议以便服务器进行转换(如果支持。

User-AgentUser-Agent:的内容包含发出请求的用户信息。

Via:通知中间网关或代理服务器地址,通信协议。

Warning:关于消息实体的警告信息

HTTP Responses Header 响应头

Accept-Ranges:表明服务器是否支持指定范围请求及哪种类型的分段请求。

Age:从原始服务器到代理缓存形成的估算时间(以秒计,非负)。

Allow:对某网络资源的有效的请求行为,不允许则返回405。

Cache-Control:告诉所有的缓存机制是否可以缓存及哪种类型。

Content-Encodingweb:服务器支持的返回内容压缩编码类型。。

Content-Language:响应体的语言。

Content-Length:响应体的长度。

Content-Location:请求资源可替代的备用的另一地址。

Content-MD5:返回资源的MD5校验值。

Content-Range:在整个返回体中本部分的字节位置。

Content-Type:返回内容的MIME类型。

Date:原始服务器消息发出的时间。

ETag:请求变量的实体标签的当前值。

Expires:响应过期的日期和时间。

Last-Modified:请求资源的最后修改时间。

Location:用来重定向接收方到非请求URL的位置来完成请求或标识新的资源。

Pragma:包括实现特定的指令,它可应用到响应链上的任何接收方。

Proxy-Authenticate:它指出认证方案和可应用到代理的该URL上的参数。

refresh:应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持)

Retry-After:如果实体暂时不可取,通知客户端在指定时间之后再次尝试。

Serverweb:服务器软件名称。

Set-Cookie:设置Http Cookie。

Trailer:指出头域在分块传输编码的尾部存在。

Transfer-Encoding:文件传输编码。

Vary:告诉下游代理是使用缓存响应还是从原始服务器请求。

Via:告知代理客户端响应是通过哪里发送的。

Warning:警告实体可能存在的问题。

WWW-Authenticate:表明客户端请求实体应该使用的授权方案。