【一】前后端介绍

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-LengthHTTP报文中请求体的大小,以字节为单位。
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告诉客户端,本次请求服务端在处理过程中服务端出错了。
常见状态码
状态码响应信息描述
101Switching Protocols服务器已经理解了客户端的请求,并将通过Upgrade消息头通知客户端采用升级协议来完成请求。
200OK请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态。常用于GET,PUT或PATCH
201Created请求已成功,请求的资源已经创建成功或更新完成,常用于POST,PUT或PATCH
204No Content请求已成功,但是没有任何内容返回。常用于DEELTE
301Moved Permanently永久重定向,表示当前客户端请求的资源地址已经永久发生改变。
302Move Temporarily临时重定向,表示当前客户端请求的资源地址还存在,但是访问客户端达不到访问资源的条件,所以暂时无法访问。
304Not Modified表示本次客户端请求的资源,并非来自服务端,而是本地缓存。如果web项目有做了客户端缓存,一般静态文件都会出现304
305Use Proxy被请求的资源必须通过指定的代理才能被访问。
307Temporary Redirect请求的资源临时从不同的URI 响应请求。
400Bad Request本次请求,报文语义有误或请求参数有误,当前请求无法被服务器理解。
401Unauthorized本次请求,需要需要用户验证,但用户并没有提供认证。
403Forbidden服务器已经理解请求,但是拒绝执行它。一般是因为没有权限导致的。
404Not Found请求失败,请求所希望得到的资源未被在服务器上发现,请求路径不存在。
405Method Not Allowed请求行中指定的请求方法不能被用于请求相应的资源。使用了错误的请求方法。
500Internal Server Error服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。就是服务端的代码报错了。
502Bad Gateway网关宕机,作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。一般就是大量访问请求导致服务器瘫痪或宕机了。
503Service Unavailable网关过载,由于临时的服务器维护或者过载,服务器当前无法处理请求。
504Gateway Timeout网关超时,作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器或者辅助服务器(例如DNS)收到响应。
507Insufficient 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())
​

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部