跨域问题。

目录

  • 跨域问题
    • 问题发现
    • 浏览器的同源策略
    • 解决办法

跨域问题

问题发现

在开发前后端分离的项目时(flask+vue),遇到过页面不显示的问题,查看控制台,有这样的提示

[localhost/:1](https://localhost/:1) Access to XMLHttpRequest at '[http://127.0.0.1:8000/category/list](http://127.0.0.1:8000/category/list)' from origin '[http://localhost:5173](http://localhost:5173/)' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我的后端用的IP端口是127.0.0.1:8000,前端是localhost:5173
控制台出现这个提示是由于跨域资源共享(CORS)策略导致的,也就是跨域。

浏览器的同源策略

浏览器的同源策略是浏览器的一种安全机制,用于限制一个源的文档或脚本如何与另一个源的资源进行交互。

“同源” 的定义是:协议相同(如 http 或 https)、域名相同(如 example.com)、端口号相同(如 80 或 443)
如果以上任意一项不同,浏览器就会认为这是跨域请求,并触发跨域限制。

对于我的这个情况,应该是因为端口号不一样导致的。

localhost和127.0.0.1

  • 127.0.0.1 回环地址,当设备向这个地址发送数据包时,数据包不会离开本地设备,而是直接被操作系统的网络协议栈接收并处理,就好像数据在设备内部 “转了一圈” 又回来了。在 IPv6 中,对应的回环地址是 ::1
  • Localhost 域名,通常作为本地主机的别名。很多操作系统的hosts文件都默认将 localhost 域名映射到 127.0.0.1 这个 IP 地址

浏览器会检查服务器的响应头中是否包含允许跨域的字段(如 Access-Control-Allow-Origin),根据这些头部信息来判断是否允许跨源访问。如果响应头中没有允许跨域的字段,浏览器会阻止前端应用访问响应数据。

解决办法

  1. 在响应头中添加 CORS 相关的字段。在flask可以直接使用flask_cors
from flask import Flaskfrom 
flask_cors import CORS
tz_app = Flask(__name__)
CORS(tz_app)

# 只允许特定源访问
# CORS(app, origins=['http://www.test.com']) 
  1. 使用websocket ,一种双向通信协议,不受同源策略的限制

你可能感兴趣的:(Python,项目,其他,python)