【一】前后端介绍
1.前端:通俗的说就是用户所看到的页面,通过浏览器渲染出来的页面
2.后端:就是对数据进行逻辑校验和加密等操作,用户看不到的操作
【二】浏览器访问地址全流程
1.输入网址--》https://www.baidu.com/域名
2.解析域名----》变成一串数字:端口号,IP地址+端口号,会标记一个独一无二的接入网络的应用程序
3.用IP地址+端口号与服务器(通过三次握手)建立TCP连接
4.服务端接收请求,响应请求发送数据给客户端
5.客户端(前端)得到响应数据后,对页面进行渲染后,与服务器断开本次请求连接
断开的连接不是指TCP的连接
本次的请求被断开
"""注意:用户所看到的界面都加载好了,浏览器(客户端)通常会继续与服务器保持连接(如果连接是持久的),以便处理后续的用户交互(如点击按钮、提交表单等),这些交互通常会触发新的HTTP请求。由于每个HTTP请求都是独立的,并且一旦其响应被接收和处理,该请求就被认为是"完成"的。所以要断开这次请求连接但是tcp链接是没有断开的"""
【三】学习http协议前须知
1.Mac地址---》网卡地址
2.广播---》在同一个局域网内有一台主机发送消息,一个局域网内的主机都能收到
3.ethernet---》以太网协议,Ethernet(以太网)是一种广泛应用于局域网(LAN)的计算机通信技术,它采用了一系列标准和规范,确保不同设备之间的有效通信
4.IP---》每台计算机接入互联网的地址
5.port---》标识每台计算机上的应用程序
6.HTTP协议---》超文本传输协议,是一个应用层协议,用于在万维网上传输超文本和其他数据。规定客户端怎么与服务器交换信息和提供服务
7.internet--->互联网,多个局域网通过路由器连接在一起组成互联网
【四】HTTP协议(重点)
1.自己写的服务器和浏览器无法交互,是由于我们的服务器没有遵守HTTP协议去传输数据
2.HTTP协议特点
1.无状态---》服务器不会记住请求的任何信息,而且每个请求都是独立的,服务器只会对当前的请求进行响应,服务端无法区分多次请求的客户端是否同一个客户端。
2.是一种应用层协议
3.是基于响应和请求的协议---》所有请求都是客户端发起,服务端响应
4.短连接
就是每个请求都是独立的,请求得到响应完成后,就会断开请求连接
5.持久连接
都是在不断的交换数据,TCP连接是没有断开的
【五】HTTP请求和响应格式
(1)请求格式
客户端给服务端发送消息应该遵循的数据格式
请求首行(请求方法 请求路径 协议版本)
请求头(一大堆k:v键值对)
(换行不能省略)
请求体(携带敏感数据:密码 身份照号...) 不是一直都有
"""
请求方法 请求路径 http协议版本 <---- http响应的一行内容,也叫请求行
请求头选项1: 选项值
请求头选项2: 选项值
....
请求头选项n: 选项值
请求体(可以有多行,前后必有空行)
eg:
1.发送get请求
GET /get HTTP/1.1
Host: httpbin.org
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
2.发送post请求
POST /post HTTP/1.1
Host: httpbin.org
Content-Type: application/json
Content-Length: 44
{"name": "xiaoming", "age": 16,"pwd": "123"}
"""
复制代码
(2) 响应格式
服务端给客户端发送消息应该遵循的数据格式
响应首行(响应状态码 协议版本)
响应头(一大堆k:v键值对)
(换行不能省略)
响应体(给浏览器展示给用户看的页面内容)
"""
响应状态码 响应文本提示 协议版本 <----- http响应的第一行内容,响应行
响应头选项1: 选项值
响应头选项2: 选项值
....
响应头选项n: 选项值
(换行不能省略)
响应体(服务端返回的正文信息,前后必有空行)
"""
(1)请求方法
请求方法 |
描述 |
GET |
表示客户端希望从服务器中获取 或下载资源信息 |
POST |
表示客户端希望上传 文件或通过请求在服务器创建资源信息。 |
PUT |
表示客户端希望修改或更新服务器资源(表示修改全部资源信息,例如数据表的一整个记录) |
PATCH |
表示客户端希望修改或更新服务器资源(表示修改部分资源信息,例如数据表的一个记录里面某个属性值) |
DELETE |
表示客户端希望删除或废弃服务器资源 |
OPTION |
表示客户端希望获取服务器所支持的请求方法列表 |
HEAD |
表示客户端希望获取服务器支持的跨域地址列表 |
(2)请求头
复制代码
对客户端的一些说明
选项 |
描述 |
Host |
指定客户端请求的服务器的域名和端口号。 |
Content-Type |
告诉服务器,客户端请求携带的请求体数据的媒体类型信息(MIME类型) |
User-Agent |
告知服务器HTTP 客户端网络代理程序的版本信息,一般就是浏览器的版本信息。 |
Authorization |
告知服务器客户端的Web认证信息。 |
Content-Length |
HTTP报文中请求体的大小,以字节为单位。 |
Referer |
告诉服务器该网页是从哪个页面链接过来。也就是上一页页面的地址。 |
Accept |
指定客户端能够接收并理解的媒体类型类型(MIME类型),用于表达希望服务端的返回资源格式。 |
Accept-Encoding |
指定浏览器可以支持的web服务器返回内容压缩编码类型。 |
Pragma |
指定服务端控制缓存行为。http/1.0以前的字段。 |
Cache-Control |
指定服务端控制缓存行为。http/1.1以后的字段。 |
Upgrade |
向服务器请求在当前http协议的基础上升级采用新的某种传输协议以便服务器进行转换 |
Connection |
指定本次http通信结束以后,是否关闭TCP网络连接。如果设置持久连接,则可以在一次会话中,可以使用同一个TCP连接,进行多次的HTTP通信,提高效率。 |
(3)常见的MIME格式
描述 |
别名 |
HTML网页 |
|
json文本 |
text/json |
纯文本,普通文本 |
|
xml文档 |
|
js脚本 |
text/javascript |
css样式 |
|
png格式图片 |
|
jpg格式图片 |
|
gif格式图片 |
|
gzip格式压缩包 |
|
doc文档 |
|
docx文档 |
|
xls文档 |
|
xlsx文档 |
|
pdf文档 |
|
mp3音频 |
|
mp4视频 |
|
(4)响应状态码
状态码类型 |
描述 |
1xx |
告诉客户端,本次请求,服务端还在持续处理中,并没有结束。 |
2xx |
告诉客户端,本次请求,服务端已经接收并成功受理了。 |
3xx |
告诉客户端,服务端位置发生改变,希望客户端重定向访问跳转新的服务器地址进行请求 |
4xx |
告诉客户端 ,本次请求有误,服务器无法处理。 |
5xx |
告诉客户端,本次请求服务端在处理过程中服务端出错了。 |
常见状态码
状态码 |
响应信息 |
描述 |
101 |
Switching Protocols |
服务器已经理解了客户端的请求,并将通过Upgrade消息头通知客户端采用升级协议来完成请求。 |
200 |
OK |
请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态。常用于GET,PUT或PATCH |
201 |
Created |
请求已成功,请求的资源已经创建成功或更新完成,常用于POST,PUT或PATCH |
204 |
No Content |
请求已成功,但是没有任何内容返回。常用于DEELTE |
301 |
Moved Permanently |
永久重定向,表示当前客户端请求的资源地址已经永久发生改变。 |
302 |
Move Temporarily |
临时重定向,表示当前客户端请求的资源地址还存在,但是访问客户端达不到访问资源的条件,所以暂时无法访问。 |
304 |
Not Modified |
表示本次客户端请求的资源,并非来自服务端,而是本地缓存。如果web项目有做了客户端缓存,一般静态文件都会出现304 |
305 |
Use Proxy |
被请求的资源必须通过指定的代理才能被访问。 |
307 |
Temporary Redirect |
请求的资源临时从不同的URI 响应请求。 |
400 |
Bad Request |
本次请求,报文语义有误或请求参数有误,当前请求无法被服务器理解。 |
401 |
Unauthorized |
本次请求,需要需要用户验证,但用户并没有提供认证。 |
403 |
Forbidden |
服务器已经理解请求,但是拒绝执行它。一般是因为没有权限导致的。 |
404 |
Not Found |
请求失败,请求所希望得到的资源未被在服务器上发现,请求路径不存在。 |
405 |
Method Not Allowed |
请求行中指定的请求方法不能被用于请求相应的资源。使用了错误的请求方法。 |
500 |
Internal Server Error |
服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。就是服务端的代码报错了。 |
502 |
Bad Gateway |
网关宕机,作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。一般就是大量访问请求导致服务器瘫痪或宕机了。 |
503 |
Service Unavailable |
网关过载,由于临时的服务器维护或者过载,服务器当前无法处理请求。 |
504 |
Gateway Timeout |
网关超时,作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器或者辅助服务器(例如DNS)收到响应。 |
507 |
Insufficient Storage |
服务器无法存储完成请求所必须的内容。 |
【六】服务器模板
import socket
server=socket.socket()
server.bind(("127.0.0.1",8810))
server.listen(5)
sock,addr=server.accept()
while True:
data=sock.recv(1024)
data_str=data.decode()
print(data_str)
# 响应行
respoonse_line="HTTP/1.1 200 OK\r\n"
# 响应头
response_header = "Server:Python20ws/21.1\r\n"
# 空行
response_blank = "\r\n"
# 响应主体
response_body = "<html><h1>HelloWorld!<h1/><html/>"
data1=respoonse_line+response_header+response_blank+response_body
sock.send(data1.encode())