localhost:5000 在 macOS v12 (Monterey) 中不可用
Posted
技术标签:
【中文标题】localhost:5000 在 macOS v12 (Monterey) 中不可用【英文标题】:localhost:5000 unavailable in macOS v12 (Monterey) 【发布时间】:2021-12-17 10:48:45 【问题描述】:我无法访问macOS v12(蒙特雷)(Flask 或任何其他)上 localhost 端口 5000 上的 Web 服务器。
例如,使用内置的 HTTP 服务器,我无法访问 5000 端口:
python3 -m http.server 5000
... (stack trace)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/socketserver.py", line 466, in server_bind
self.socket.bind(self.server_address)
OSError: [Errno 48] Address already in use
如果您安装了 Flask 并运行 Flask Web 服务器,它不会在启动时失败。让我们以最小的 Flask 示例代码为例:
# Save as hello.py in the current working directory.
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
然后运行它(前提是你安装了 Flask/Python 3):
export FLASK_APP=hello
flask run
输出:
* Running on http://127.0.0.1:5000/
但是,如果您尝试访问此服务器(通过浏览器或其他任何方式),则会被拒绝:
curl -I localhost:5000
HTTP/1.1 403 Forbidden
Content-Length: 0
Server: AirTunes/595.13.1
【问题讨论】:
【参考方案1】:macOS Monterey 引入了在端口 5000 上运行的 AirPlay Receiver。这会阻止您的 Web 服务器在端口 5000 上提供服务。接收方已经拥有该端口。
您可以:
-
关闭 AirPlay 接收器,或;
在不同的端口上运行服务器(通常最好)。
关闭 AirPlay 接收器
转到系统偏好设置 → 共享 → 取消勾选 Airplay 接收器。
See more details
您现在应该能够在端口 5000 上重新运行服务器并获得响应:
python3 -m http.server 5000
Serving HTTP on :: port 5000 (http://[::]:5000/) ...
在不同于 5000 的端口上运行服务器
最好不要再使用端口 5000,因为它是为 macOS Monterey 上的 Airplay Receiver 保留的。
只是为了在不同的端口上运行服务器。无需关闭 Airplay Receiver。
python3 -m http.server 4999
或
export FLASK_APP=hello
flask run -p 4999
【讨论】:
您多么细心地发现并解释了根本原因:Airplay 的系统保留端口?️flask run -p <port>
解决方案已被建议。由于没有明确提出问题,因此对“OSError:[Errno48]”进行了一些研究并建议下次可以做一个链接:similar question。
谢谢!这对我有帮助。我只是好奇你是怎么发现这个的?
Apple 应该更改此端口。当使用 5000/7000 时,他们可以使用随机的高范围端口,因此无论如何他们都可以这样做。我猜这个解决方案只在重新启动之前有效?有没有办法改变这个默认端口低级别(在 plist 文件或其他东西中),以便在重新启动后仍然存在?以上是关于localhost:5000 在 macOS v12 (Monterey) 中不可用的主要内容,如果未能解决你的问题,请参考以下文章
将 macOS 从 Big Sur 升级到 Monterey 后,发布请求出现 403 禁止错误
如何从localhost:5000发送http post请求到localhost:3000
尝试连接到 localhost:5000 Firebase 时出现“无法获取 /”
将 Web 服务器从端口 5000 重定向到 localhost (Fedora) 上的端口 80
从源“http://localhost:3000”访问“http://localhost:5000/api/products”的 XMLHttpRequest 已被 CORS 策略阻止:无“访问控制”
python Python中的简单Markdown服务器。假设您在〜/ Text中有Markdown文件。在http:// localhost:5000 / w / Hello访问〜/ Text /