127.0.0.1:端口号,访问不到页面

当使用Ajax尝试访问127.0.0.1本地服务器时,由于IPv6优先级问题可能导致访问失败。为解决此问题,需要调整Windows系统的IPv6优先级设置,通过运行管理员命令行执行特定的netsh命令来改变接口的前缀策略,从而确保IPv4优先。这将使127.0.0.1的访问恢复正常。

面对练习ajax时,用127.0.0.1,访问不到页面

  1. C:\Windows\System32\drivers\etc 下的hosts文件
    最底下映射成
    127.0.0.1 localhost
    localhost 127.0.0.1

  2. 这是因为是优先ping ipv6的地址访问,ipv6是::1的地址访问

    请添加图片描述

    要是正常的127.0.0.1:端口号,ipv6会识别错误地址,导致不能访问本地服务器

    输入命令 netsh interface ipv6 show prefixpolicies,查询ipv6优先级

    要管理员运行命令符,这是改成ipv4优先,标签的值,对应优先等级

    netsh int ipv6 set prefix ::/96 50 0
    netsh int ipv6 set prefix ::ffff:0:0/96 40 1
    netsh int ipv6 set prefix 2002::/16 35 2
    netsh int ipv6 set prefix 2001::/32 30 3
    netsh int ipv6 set prefix ::1/128 10 4
    netsh int ipv6 set prefix ::/0 5 5
    netsh int ipv6 set prefix fc00::/7 3 13
    netsh int ipv6 set prefix fec0::/10 1 11
    netsh int ipv6 set prefix 3ffe::/16 1 12

    请添加图片描述请添加图片描述请添加图片描述

  3. 改回去的代码

    netsh int ipv6 set prefix ::1/128 50 0
    netsh int ipv6 set prefix ::/0 40 1
    netsh int ipv6 set prefix ::ffff:0:0/96 35 4
    netsh int ipv6 set prefix 2002::/16 30 2
    netsh int ipv6 set prefix 2001::/32 5 5
    netsh int ipv6 set prefix fc00::/7 3 13
    netsh int ipv6 set prefix fec0::/10 1 11
    netsh int ipv6 set prefix 3ffe::/16 1 12
    netsh int ipv6 set prefix ::/96 1 3

访问 `127.0.0.1:8082` 导致 `127.0.0.1:7082` 的会话失效,通常与浏览器对 Cookie 的同源策略(Same-Origin Policy)有关。根据 HTTP Cookie 的定义,Cookie 是绑定到特定域名、端口和路径的,并且在后续请求中由浏览器自动携带[^1]。如果两个服务运行在不同的端口上(如 7082 和 8082),它们被视为不同的源,因此默认情况下不会共享 Cookie。 当访问 `127.0.0.1:8082` 时,如果该服务触发了某些全局操作(如清除本地存储、重置会话状态或清空缓存),这可能间接导致 `127.0.0.1:7082` 的会话失效。例如: - 如果使用前端脚本修改了 `document.cookie`,并且未指定具体的 `domain` 或 `path`,可能会意外覆盖掉原本属于 `7082` 端口的 Cookie。 - 如果两个服务共用后端 Session 存储(如 Redis),但没有为每个服务配置独立的命名空间或数据库,可能导致 Session ID 被错误地覆盖或删除[^2]。 ### 解决方案 #### 1. **隔离 Cookie 的作用域** 确保每个服务的 Cookie 设置中明确指定了 `path` 和 `domain` 属性,以避免不同端口之间的 Cookie 冲突。例如: ```http Set-Cookie: session_id=abc123; Path=/; Domain=localhost:7082 ``` 注意:`Domain` 不支持直接指定端口号,因此可以通过子域名来区分不同服务,例如 `7082.example.com` 和 `8082.example.com`,然后分别设置 `Domain=7082.example.com` 和 `Domain=8082.example.com`。 #### 2. **使用独立的 Session 存储机制** 若多个服务共享同一个 Session 后端(如 Redis),应为每个服务配置独立的命名前缀或使用不同的数据库索引[^2]。例如,在 Redis 中可以使用不同的键前缀来区分服务来源: ```python # 示例:Python Flask 应用中配置 Session 使用 Redis 并指定 key_prefix from flask import Flask from flask_session import Session import redis app = Flask(__name__) app.config['SESSION_TYPE'] = 'redis' app.config['SESSION_REDIS'] = redis.StrictRedis(host='localhost', port=6379, db=0) app.config['SESSION_KEY_PREFIX'] = 'service_7082:' Session(app) ``` #### 3. **避免跨服务干扰的前端行为** 检查前端代码,确保不会因访问 `8082` 端口的服务而触发影响 `7082` 端口的行为。例如,避免在 `8082` 页面中执行清除本地存储或 Cookie 的脚本,除非明确限定作用范围。 #### 4. **启用 CORS 并控制凭据共享** 如果两个服务之间需要进行跨域通信,应合理配置 CORS(Cross-Origin Resource Sharing)策略,仅允许必要的情况下携带凭据(`withCredentials`)。例如在 Node.js Express 中: ```javascript const cors = require('cors'); app.use(cors({ origin: 'http://localhost:8082', credentials: true })); ``` 通过这种方式,可以限制哪些源可以访问当前服务,并防止不必要的 Cookie 泄露或覆盖。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值