跨域概述,简单积累

本文介绍了浏览器的同源策略,以及为解决跨域问题引入的CORS(跨域资源共享)机制。CORS分为简单请求和非简单请求,并详细阐述了其处理流程。针对Django框架,提供了两种跨域解决方案:直接在响应中设置允许的头部信息,以及使用django-cors-headers第三方库进行配置。最后,给出了具体的代码示例和配置步骤。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、同源策略

提供浏览器的一种安全机制;请求的url地址必须和浏览器上的url同域,即:端口,协议,IP全部相同,如果任意一个不满足,则表示不同源;

如:从127.0.0.1:8000 请求 127.0.0.1:8001

当未进行处理的时候,浏览器会作出反应发生报错进行拦截。

二、CORS

CORS(跨域资源共享),由浏览器和服务器双方共同支持解决跨域问题。
CORS请求分为两种:简单请求和非简单请求

  • 请求方法为:HEAD, GET,POST其中一种
  • HTTP的头信息不超过:Accept, Accept-Language, Content-Language, Content-type
    满足上述两种情况,则表示简单请求

简单请求:仅发送一次
非简单请求:包含两次请求,第一次为OPTIONS(预检请求),如果预检通过则发送第二次请求(真正的数据)


解决跨域的方式:
- 简单请求:
   服务器设置响应头:Access-Control-Allow-Origin = '域名' 或 ‘*’
- 非简单请求:
   在发送预检请求的时候,允许请求方式:Access-Control-Request-Method; 允许请求头:Access-Control-Request-Headers

实现原理:
   当浏览器发现跨域请求的时候,如果是简单请求,会在请求头中添加Origin字段,表示来自哪个源;服务器接收到响应,会在响应头中添加Access-Control-Allow-Origin,指定域名或者通配;

三、Django中的跨域解决方案

1. 在返回结果中允许信息

data = {"dafd": access_token}
response = HttpResponse(json.dumps(data))
# 处理简单请求
response["Access-Control-Allow-Origin"] = "*"
# 预检方式
response["Access-Control-Allow-Methods"] = "POST, GET"
response["Access-Control-Max-Age"] = "1000"
# 预检请求头
response["Access-Control-Allow-Headers"] = "*"
return response

2. 使用django-cors-headers

django-cors-headers时第三方依赖,使用pip下载,修改settings配置文件

pip install django-cors-headers

在setting.py中添加应用:

INSTALLED_APPS = [
	...
    'corsheaders',
    ...
]

添加中间件:

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

文件末尾添加:

CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
    '*'
)
CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
    'VIEW',
)

CORS_ALLOW_HEADERS = (
    'XMLHttpRequest',
    'X_FILENAME',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
    'Pragma',

)
### 知识增强的半监督学习框架概述 在机器学习领,知识增强的半监督学习框架旨在利用外部知识源来改进模型的学习效果。这类方法特别适用于数据标注成本高或难以获取的情况。 #### 外部知识集成方式 通过引入额外的知识资源,可以显著提升模型性能并减少对标记样本数量的需求。这些知识可能来自预训练的语言模型、本体库或其他结构化数据库[^1]。例如,在联邦学习环境中,不同客户端持有的私有数据集可以通过共享全局参数的方式间接交流有用信息,从而实现的知识迁移和积累。 #### 半监督算法设计原则 对于具体的算法设计而言,通常会考虑如何有效地融合未标记的数据以及已有的先验知识。一种常见策略是在损失函数中加入正则项以鼓励模型预测结果与给定提示相一致;另一种则是构建图神经网络(GNN),其中节点代表实例而边表示相似度关系,进而借助传播机制让标签信息在整个图上传播开来[^2]。 ```python import torch from torch_geometric.nn import GCNConv class KnowledgeEnhancedSemiSupervisedModel(torch.nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super(KnowledgeEnhancedSemiSupervisedModel, self).__init__() self.conv1 = GCNConv(input_dim, hidden_dim) self.conv2 = GCNConv(hidden_dim, output_dim) def forward(self, data): x, edge_index = data.x, data.edge_index # Apply graph convolutional layers with knowledge integration h = self.conv1(x, edge_index) h = torch.relu(h) out = self.conv2(h, edge_index) return out ``` 上述代码展示了基于图卷积网络(GCN)的一个简单例子,该架构能够很好地适应于具有复杂关联性的场景下进行分类任务,并且允许灵活地融入各类形式化的背景资料作为辅助输入特征向量的一部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值