1. 说明HTTP 和 HTTPS的区别
-
安全性:HTTP 是明文传输协议,这意味着在数据传输过程中,信息就像在 “裸奔”,容易被窃取和篡改,安全性堪忧。而 HTTPS 是在 HTTP 基础上加入了 SSL/TLS 协议,通过加密和身份验证机制,如同给数据穿上了一层坚固的 “铠甲”,保证了数据在传输过程中的安全性和完整性。
-
端口号:HTTP 默认使用 80 端口,这是它的 “常规入口”;HTTPS 默认使用 443 端口,可看作是它的 “安全专用通道”。
-
URL 前缀:HTTP 的 URL 以
http://
开头,而 HTTPS 的 URL 以https://
开头,这就像不同的 “门牌号”,一眼就能区分。 -
证书:HTTP 不需要证书,而 HTTPS 需要申请 SSL/TLS 证书,证书可以由权威的 CA 机构颁发,也能自己生成,用于身份验证和密钥交换,好比是进入安全区域的 “通行证”。
-
协议层:HTTP工作在应用层。HTTPS在应用层和传输层之间添加了SSL/TLS加密层。
-
性能:HTTPS因加密/解密和证书验证,性能略低于HTTP,但可通过硬件优化缓解。
import requests
# HTTP 请求
http_response = requests.get('http://example.com')
print(f"HTTP 状态码: {http_response.status_code}")
# HTTPS 请求
https_response = requests.get('https://example.com')
print(f"HTTPS 状态码: {https_response.status_code}")
2. 说明HTTP 协议以及协议头部中表示数据类型的字段
- HTTP 协议:HTTP 是用于传输超文本的应用层协议,它是无状态的,每次请求都是独立的,服务器不会保留之前请求的信息。就像一个健忘的服务员,每次服务都得重新了解需求。它基于请求 - 响应模型,客户端向服务器发送请求,服务器处理请求并返回响应。常见版本:HTTP/1.1(主流),HTTP/2(多路复用),HTTP/3(基于QUIC)。
-
表示数据类型的字段:
Content - Type
字段用于指定请求体或响应体中数据的类型。常见值:text/html
(HTML 文本),application/json
(JSON 数据),application/xml
(XML 数据),image/jpeg
和image/png
(分别对应 JPEG 和 PNG 格式的图片)。
import requests
# 发送 JSON 数据的 POST 请求
data = {'key': 'value'}
headers = {'Content-Type': 'application/json'}
response = requests.post('https://example.com', json=data, headers=headers)
print(response.text)
3. 说明HTTP 的请求方法
-
GET:用于从服务器获取资源,请求参数会附加在 URL 后面,就像在商店橱窗里查看商品信息。
-
POST:用于向服务器提交数据,通常用于表单提交、文件上传等操作,请求参数放在请求体中,好比是向商店下单购买商品。
-
PUT:用于向服务器更新资源,如果资源不存在则创建新资源,类似于替换或新增商品。
-
DELETE:用于从服务器删除指定的资源,就像把商店里的某个商品移除。
-
HEAD:与 GET 方法类似,但只返回响应头,不返回响应体,常用于获取资源的元信息,如同只查看商品的标签而不拿走商品。
-
OPTIONS:用于获取服务器支持的请求方法和其他通信选项,就像询问商店支持哪些付款方式。
-
PATCH:用于对资源进行部分更新,比如只修改商品的某个属性。
import requests
# GET 请求
get_response = requests.get('https://example.com')
print(f"GET 响应: {get_response.text}")
# POST 请求
post_data = {'name': 'John'}
post_response = requests.post('https://example.com', data=post_data)
print(f"POST 响应: {post_response.text}")
4. 使用 Socket 套接字需要传入哪些参数
在 Python 中,使用 socket
模块创建套接字时,socket()
函数需要传入两个参数:地址族(family
)和套接字类型(type
)。地址族指定使用的网络协议族,常见的有 socket.AF_INET
(IPv4 协议)和 socket.AF_INET6
(IPv6 协议);套接字类型指定套接字的类型,常见的有 socket.SOCK_STREAM
(TCP 协议,提供面向连接的、可靠的数据传输)和 socket.SOCK_DGRAM
(UDP 协议,提供无连接的、不可靠的数据传输)。
import socket
# 创建 TCP/IPv4 套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("TCP 套接字创建成功")
# 创建 UDP/IPv4 套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print("UDP 套接字创建成功")
5. 说明HTTP常见请求头
-
User - Agent:用于标识客户端的类型和版本信息,服务器可以根据该信息返回不同的内容,就像告诉商家你是用什么工具来购物的。
-
Accept:指定客户端能够接受的响应内容类型,例如
Accept: text/html,application/json
,表示客户端可以接受 HTML 文本和 JSON 数据。 -
Accept - Language:指定客户端能够接受的语言,例如
Accept - Language: en-US,en;q=0.9
,表示优先接受美式英语,其次是英语。 -
Accept - Encoding:指定客户端能够接受的内容编码方式,例如
Accept - Encoding: gzip, deflate
,表示客户端可以接受 gzip 和 deflate 编码。 -
Content - Type:指定请求体中数据的类型,例如
Content - Type: application/json
。 -
Content - Length:指定请求体的长度,单位为字节。
-
Authorization:用于在请求中包含身份验证信息,例如基本认证的
Authorization: Basic base64(username:password)
。 -
Cookie:用于在请求中携带客户端的 Cookie 信息。
import requests
headers = {
'User-Agent': 'Mozilla/5.0',
'Accept': 'application/json',
'Accept-Language': 'en-US',
'Accept-Encoding': 'gzip, deflate'
}
response = requests.get('https://example.com', headers=headers)
print(response.text)
6. 什么是七层模型
七层模型即开放系统互连参考模型(OSI/RM),它将计算机网络通信分为七个层次,从下到上依次为:
-
物理层:负责传输比特流,处理物理介质上的电气、机械和功能特性,例如电缆、光纤、网卡等,就像搭建网络的 “基础设施”。
-
数据链路层:将比特流封装成帧,提供差错检测和纠正功能,常见的协议有以太网协议,如同给数据加上 “包装” 和 “校验标签”。
-
网络层:负责将帧封装成数据包,进行路由选择和寻址,常见的协议有 IP 协议,类似于为数据规划 “运输路线”。
-
传输层:提供端到端的可靠或不可靠的数据传输,常见的协议有 TCP 和 UDP,就像选择不同的 “运输方式”。
-
会话层:负责建立、管理和终止会话,例如在不同应用程序之间建立会话,好比是安排 “商务会谈”。
-
表示层:负责数据的表示和转换,例如加密、解密、压缩、解压缩等,如同对数据进行 “翻译” 和 “整理”。
-
应用层:为用户提供应用程序接口,例如 HTTP、FTP、SMTP 等协议,是用户直接接触的 “应用窗口”。
import socket
# 创建 TCP 套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost', 8888)
server_socket.bind(server_address)
server_socket.listen(1)
print('等待客户端连接...')
connection, client_address = server_socket.accept()
try:
print(f'连接来自: {client_address}')
data = connection.recv(1024)
print(f'接收到数据: {data.decode()}')
message = 'Hello, client!'
connection.sendall(message.encode())
finally:
connection.close()
7. 说明URL 的形式
URL(统一资源定位符)的一般形式为:协议://用户名:密码@主机名:端口号/路径?查询参数#片段标识符
。协议指定使用的协议,如 http
、https
、ftp
等;用户名和密码是可选部分,用于身份验证;主机名指定服务器的域名或 IP 地址;端口号是可选部分,指定服务器上应用程序监听的端口号,默认情况下,HTTP 使用 80 端口,HTTPS 使用 443 端口;路径指定服务器上资源的路径;查询参数是可选部分,用于向服务器传递额外的参数,多个参数之间用 &
分隔;片段标识符是可选部分,用于指定页面内的锚点。
from urllib.parse import urlparse
url = 'https://user:password@www.example.com:8080/path/to/resource?param1=value1¶m2=value2#section1'
parsed_url = urlparse(url)
print(f"协议: {parsed_url.scheme}")
print(f"主机名: {parsed_url.hostname}")
print(f"端口号: {parsed_url.port}")
print(f"路径: {parsed_url.path}")
print(f"查询参数: {parsed_url.query}")
print(f"片段标识符: {parsed_url.fragment}")
8. 什么是 Flask 蓝图 (Blueprint)
Flask 蓝图是一种组织 Flask 应用程序的方式,它可以将应用程序拆分成多个模块,每个模块可以有自己的路由、视图函数、静态文件和模板等。蓝图的主要作用有:代码组织,将不同功能的代码分离到不同的蓝图中,提高代码的可读性和可维护性;模块化开发,可以独立开发和测试每个蓝图,然后将它们集成到一个 Flask 应用程序中;命名空间,蓝图可以为路由和静态文件提供命名空间,避免命名冲突。
from flask import Flask, Blueprint
# 创建 Flask 应用
app = Flask(__name__)
# 创建蓝图
user_bp = Blueprint('user', __name__)
@user_bp.route('/login')
def login():
return 'Login page'
@user_bp.route('/register')
def register():
return 'Register page'
# 注册蓝图
app.register_blueprint(user_bp, url_prefix='/user')
if __name__ == '__main__':
app.run(debug=True)
9. 说明Flask 和 Django 路由映射的区别
-
语法:Flask 使用装饰器来定义路由,语法简洁灵活,就像直接在函数上贴一个 “路由标签”。而 Django 在
urls.py
文件中使用urlpatterns
列表来定义路由,需要导入视图函数或类,类似于在一个 “路由清单” 中进行配置。 -
路由匹配规则:Flask 使用正则表达式或简单的变量规则来匹配路由,例如
<int:id>
表示匹配整数类型的参数。Django 使用更强大的正则表达式来匹配路由,并且可以使用re_path
函数来定义复杂的路由规则。 -
命名空间:Flask 蓝图可以为路由提供命名空间,避免命名冲突。Django 可以在
urls.py
文件中使用app_name
和namespace
来为路由提供命名空间。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello, Flask!'
if __name__ == '__main__':
app.run(debug=True)
# urls.py
from django.urls import path
from .views import index
urlpatterns = [
path('', index, name='index'),
]
# views.py
from django.http import HttpResponse
def index(request):
return HttpResponse('Hello, Django!')
10. 说明 wsgi, uwsgi, uWSGI的区别
-
WSGI:WSGI(Web Server Gateway Interface)是 Python Web 应用程序和 Web 服务器之间的标准接口,它定义了 Web 服务器如何与 Python 应用程序进行通信。WSGI 允许不同的 Web 服务器和 Python Web 框架之间进行交互,例如 Flask、Django 等框架都遵循 WSGI 标准,就像一个 “翻译官”,让 Web 服务器和 Python 应用程序能够 “交流”。
-
uwsgi:uwsgi 是一种二进制协议,它是 uWSGI 服务器使用的一种通信协议,用于在 Web 服务器和应用程序之间传递请求和响应,类似于一种 “加密语言”。
-
uWSGI:uWSGI 是一个快速、高性能的 Web 服务器,它支持多种协议,包括 WSGI、uwsgi、HTTP 等。uWSGI 可以作为独立的 Web 服务器运行,也可以与其他 Web 服务器(如 Nginx、Apache)配合使用,用于处理 Python Web 应用程序的请求,好比是一个 “高效的快递员”。
def application(environ, start_response):
status = '200 OK'
headers = [('Content-type', 'text/html; charset=utf-8')]
start_response(status, headers)
return [b'Hello, WSGI!']
友情提示:本文已经整理成文档,可以到如下链接免积分下载阅读
https://download.csdn.net/download/ylfhpy/90416907