You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

localhost:8000与http://127.0.0.1:8000的区别及Django+React Redux认证问题咨询

问题解答:localhost:8000 vs 127.0.0.1:8000的POST请求差异

咱先把问题拆成两部分来唠,你就能明白为啥会出现这种奇怪的情况了:

1. localhost:8000 和 http://127.0.0.1:8000 是一回事吗?

不完全是!

  • localhost 是一个域名,系统默认会把它解析到回环地址——现在很多系统优先解析成IPv6的::1,也有些会同时解析IPv4的127.0.0.1
  • 127.0.0.1明确的IPv4回环地址,没有歧义。

简单说:localhost是个“别名”,可能指向IPv6或IPv4;127.0.0.1就是固定的IPv4本地地址。浏览器会把它们当成不同的源,这是关键!

2. 为啥POST请求只有localhost能正常工作?

核心原因是跨域(CORS)或者Django的访问权限配置

  • 首先看Django的settings.py里的ALLOWED_HOSTS:如果这里只写了['localhost'],没加'127.0.0.1',那用127.0.0.1访问时,Django会直接拒绝请求(返回400或403错误)。
  • 其次是CORS配置:如果你用了django-cors-headers这类跨域插件,CORS_ALLOWED_ORIGINS里只加了http://localhost:8000,没加http://127.0.0.1:8000,浏览器就会拦截127.0.0.1的POST请求——因为浏览器认为这是跨域请求,而服务器没允许这个源。

3. 怎么解决这个问题?

直接把两个地址都加入允许列表就行:

  • 修改ALLOWED_HOSTS
    ALLOWED_HOSTS = ['localhost', '127.0.0.1']
    
  • 如果用了django-cors-headers,修改CORS_ALLOWED_ORIGINS
    CORS_ALLOWED_ORIGINS = [
        "http://localhost:8000",
        "http://127.0.0.1:8000",
    ]
    

改完重启Django服务,再用127.0.0.1:8000发POST请求试试,应该就正常了。

内容的提问来源于stack exchange,提问作者Abhishek Pratap Singh

火山引擎 最新活动