DJango回顾
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标签
浏览器中看到的页面,都是响应体的内容
作业
三.http有哪些主要版本,版本区别是什么
1.HTTP/0.9:最初版本的HTTP协议,只支持GET方法,并且没有请求头和响应头的概念,只能传输纯文本。于1991年发布,由Tim Berners-Lee创建,被认为是HTTP的起源。该版本只支持GET请求,并且响应只能是HTML文本。
2、HTTP/1.0:在HTTP/0.9的基础上增加了请求头和响应头的概念,并支持多种HTTP方法,包括GET、POST、PUT、DELETE等。于1996年发布,该版本的周期大约是6年,在2000年左右被广泛使用。
3、HTTP/1.1:在HTTP/1.0的基础上进行了扩展和优化,包括持久连接、管线化、分块传输编码等特性,可以更高效地传输数据。于1999年发布,该版本的周期大约是15年,在2014年左右仍然是主流。
4、HTTP/2:在HTTP/1.1的基础上进行了进一步的优化,包括二进制协议、多路复用、服务器推送等特性,能够更快地传输数据。HTTP/2于2015年发布,采用二进制协议,引入了多路复用、服务器推送等特性,进一步提高了性能。该版本的周期约为6年。
5、HTTP/3:是HTTP协议的最新版本,基于QUIC协议进行了重构,具有更快的传输速度、更低的延迟和更好的安全性。HTTP/3于2020年发布,采用基于UDP的QUIC协议,该版本目前正在逐渐被广泛采用。
HTTP协议的不同版本之间主要区别在于协议特性的增加和改进,新版本的协议通常会更加高效、安全和易用。
四、常用请求头有哪些,响应头有什么
请求头:
1-1 Accept
1、 Accept : text/html 浏览器可以接收服务器回发的类型为text/html
2、 Accept: /代表浏览器可以处理所有类型
1-2 Accept-Encoding
1、 Accept-Encoding: gzip,deflate 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)
1-3 Accept-Language
1-4 Connection
1、 Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
2、 Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。
1-5 Host (发送请求时,该报头域是必须)
1、 Host: 请求报头域主要用于指定该请求资源的Internet主机和端口号,通常从HTTP URL中提取出来
1-6 Referer
1、 Referer: 当浏览器向Web服务器发送请求时,一般会带上Refer,告诉服务器从哪个页面链接过来的,服务器可以获得一些信息用于处理
1-7 Cache-Control
1、 Cache-Control :
Cache-Control:private : 默认为private 响应只能够作为私有的缓存,不能再用户间共享
Cache-Control:public** **响应会被缓存,并且在多用户间共享。正常情况, 如果要求HTTP认证,响应会自动设置为 private.
Cache-Control:must-revalidate 响应在特定条件下会被重用,以满足接下来的请求,但是它必须到服务器端去验证它是不是仍然是最新的。
Cache-Control:no-cache 响应不会被缓存,而是实时向服务器端请求资源。
Cache-Control:max-age=10 设置缓存最大的有效时间,但是这个参数定义的是时间大小(比如:60)而不是确定的时间点。单位是[秒 seconds]。
Cache-Control:no-store在任何条件下,响应都不会被缓存,并且不会被写入到客户端的磁盘里,这也是基于安全考虑的某些敏感的响应才会使用这个。
1-8 Cookie
1、 Cookie是用来存储一些用户信息以便让服务器辨别用户身份的(大多数需要登录的网站上面会比较常见)
2、 例子: cookie会存储一些用户的用户名和密码,当用户登录后就会在客户端产生一个cookie来存储相关信息,这样浏览器通过读取cookie的信息去服务器上验证并通过后会判定你是合法用户从而允许查看相应网页。
3、 还有很多信息可以存储是cookie里面,比如sessionid等。
4、 document.cookie = "name='ntt'; path='/frontend';expires='';secure"
1-9 Range(用于断点续传)
响应头:
2-1 Cache-Control
Cache-Control: private
默认为private,响应只能作为私有的缓存,不能再用户间共享
Cache-Control:public
浏览器 和 缓存服务器都可以缓存页面信息
Cache-Control: must-revalidate
对于客户机的每次请求,代理服务器必须想服务器验证缓存是否过时
Cache-Control: no-cache
浏览器和缓存服务器都不应该缓存页面信息
Cache-Control : max-age = 10
通知浏览器10s之内不要烦我,自己从缓冲区中刷新
Cache-Control:no-store
请求和响应的信息都不应该被存储在对方的磁盘系统中
2-2 Content-Type
1、 Content-Type:text/html;charset=UTF-8 : 告诉客户端,资源文件的类型,还有字符编码,客户端通过utf-8对资源进行解码,然后对资源进行html解析
2、通常我们会看到有些网站是乱码的,往往就是服务器端没有返回正确的编码。
2-3 Content-Encoding
1、 Content-Encoding:gzip :告诉客户端,服务端发送的资源是采用gzip编码的,客户端看到这个信息后,应该采用gzip对资源进行解码。
2-4 Date
1、 Date: Tue, 03 Apr 2018 03:52:28 GMT : 这个是服务端发送资源时的服务器时间,GMT是格林尼治所在地的标准时间
2、 http协议中发送的时间都是GMT的,这主要是解决在互联网上,不同时区在相互请求资源的时候,时间混乱问题。
2-5 Server
1、Server:Tengine/1.4.6 : 这个是服务器和相对应的版本,只是告诉客户端服务器信息。
2-6 Transfer-Encoding
1、 Transfer-Encoding:chunked
告诉客户端,服务器发送的资源的方式是分块发送的
一般分块发送的资源都是服务器动态生成的,在发送时还不知道发送资源的大小,所以采用分块发送
每一块都是独立的,独立的块都能标示自己的长度,最后一块是0长度的,当客户端读到这个0长度的块时,就可以确定资源已经传输完了。
2-7 Expires
1、 Expires:Sun, 1 Jan 2000 01:00:00 GMT :
跟缓存有关
告诉客户端在这个时间前,可以直接访问缓存副本,
这个值会存在问题,因为客户端和服务器的时间不一定会都是相同的,如果时间不同就会导致问题
所以这个响应头是没有Cache-Control:max-age=*这个响应头准确的,因为max-age=date中的date是个相对时间
2-8 Last-Modified
1、 Last-Modified: Dec, 26 Dec 2015 17:30:00 GMT
所请求的对象的最后修改日期
按照 RFC 7231 中定义的“超文本传输协议日期”格式来表示)
2-9 Connection
1、 Connection:keep-alive
这个字段作为回应客户端的Connection:keep-alive
告诉客户端服务器的tcp连接也是一个长连接,客户端可以继续使用这个tcp连接发送http请求。
2-10 Refresh
1、 Refresh: 用于重定向,或者当一个新的资源被创建时。默认会在5秒后刷新重定向。
2-11 Access-Control-Allow-Origin
1、 跨域请求配置
2-12 Access-Control-Allow-Methods
1、 Access-Control-Allow-Methods:GET,POST,PUT,DELETE : 允许哪些方法来访问
2-13
1、 Access-Control-Allow-Credentials
Access-Control-Allow-Credentials: true ,允许发送cookie。
Cookie不包括在CORS请求之中。
Cookie可以包含在请求中,一起发给服务器。这个值也只能设为true
如果服务器不要浏览器发送Cookie,删除该字段即可。如果access-control-allow-origin为*,当前字段就不能为true
五、常见的响应状态码
一、1xx 表示【临时响应】并需要请求者继续执行操作的状态代码
100(继续)请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备切换。
二、2xx 表示【成功】处理了请求的状态代码
200(成功)服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。
201(已创建)请求成功并且服务器创建了新的资源。
202(已接受)服务器已接受请求,但尚未处理。
203(非授权信息)服务器已成功处理了请求,但返回的信息可能来自另一来源。
204(无内容)服务器成功处理了请求,但没有返回任何内容。
205(重置内容)服务器成功处理了请求,但没有返回任何内容。
206(部分内容)服务器成功处理了部分 GET 请求。
三、3xx 表示要完成请求,需要进一步操作。通常,这些状态代码用来【重定向】
300(多种选择)针对请求,服务器可执行多种操作。服务器可根据请求者(user agent)选择一项操作,或提供操作列表供请求者选择。
301(永久移动)请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302(临时移动)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303(查看其他位置)请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
304(未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
305(使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。
307(临时重定向)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
四、4xx:表示请求错误。代表了客户端看起来可能发生了错误,妨碍了服务器的处理。
400(错误请求)表示客户端请求的语法错误,服务器无法理解,例如 url 含有非法字符、json 格式有问题。
401(未授权)请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。
402表示保留,将来使用。
403(禁止)表示服务器理解请求客户端的请求,但是拒绝请求。
404(未找到)服务器无法根据客户端的请求找到资源(网页)。
405(方法禁用)禁用请求中指定的方法。
406(不接受)无法使用请求的内容特性响应请求的网页。
407(需要代理授权)此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
408(请求超时)服务器等候请求时发生超时。
409(冲突)服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。
410(已删除)如果请求的资源已永久删除,服务器就会返回此响应。
411(需要有效长度)服务器不接受不含有效内容长度标头字段的请求。
412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。
413(请求实体过大)表示响应实在太大。服务器拒绝处理当前请求,请求超过服务器所能处理和允许的最大值。
414(请求的 URI 过长)请求的 URI(通常为网址)过长,服务器无法处理。
415(不支持的媒体类型)请求的格式不受请求页面的支持。
416(请求范围不符合要求)如果页面无法提供请求的范围,则服务器会返回此状态代码。
417(未满足期望值)在请求头 Expect 指定的预期内容无法被服务器满足(力不从心)。
418表示我是一个茶壶。超文本咖啡馆控制协议,但是并没有被实际的 HTTP 服务器实现。
420表示方法失效
422表示不可处理的实体。请求格式正确,但是由于含有语义错误,无法响应。
五、5xx 表示【服务器】在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错
500(服务器内部错误)服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。
501(尚未实施)服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。
502(错误网关)服务器作为网关或代理,从上游服务器收到无效响应。
503(服务不可用)服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
504(网关超时)服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505(HTTP 版本不受支持)服务器不支持请求中所用的 HTTP 版本。

浙公网安备 33010602011771号