netloc 是啥意思?

Posted

技术标签:

【中文标题】netloc 是啥意思?【英文标题】:What does netloc mean?netloc 是什么意思? 【发布时间】:2019-05-28 07:05:47 【问题描述】:

我正在学习使用 Flask-login 制作登录功能,并且在我正在关注的教程中遇到了这段代码:

@app.route('/login', methods = ['GET', 'POST'])
def login():
    if current_user.is_authenticated:
        return redirect(url_for('index'))
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(username=form.username.data).first()
        if user is None or not user.check_password(form.password.data):
            flash('Invalid username or password')
            return redirect(url_for('login'))
        login_user(user, remember=form.remember_me.data)
        next_page = request.args.get('next')
        if not next_page or url_parse(next_page).netloc != '': # what is it means in this line..?
            next_page = url_for('index')
        return redirect(next_page)
    return render_template('login.html', title='Sign In', form=form)

但我不确定我评论的上面的代码是什么意思..?,特别是在 netloc 字中,那是什么..?,我知道那代表 network地点,但那条线的目的是什么..?

【问题讨论】:

虽然你调用的函数来自werkzeug。您可能可以查看标准库以了解 netloc 的定义。见urllib.parse.urlparse。 netloc 是服务器的名称(IP 地址或主机名)。 【参考方案1】:

来自RFC 1808, Section 2.1,每个网址都应遵循特定格式:

<scheme>://<netloc>/<path>;<params>?<query>#<fragment>

让我们从语法上分解这种格式:

scheme:协议名,一般是http/https netloc:包含 network location - 包括域本身(和子域,如果存在)、端口号以及@形式的可选凭据987654327@。一起可以采用username:password@domain.com:80 的形式。 path:包含有关如何访问指定资源的信息。 params:向路径添加微调的元素。 (可选) query:另一个考虑添加对路径的细粒度访问的元素。 (可选) fragment:包含路径内正在访问的资源的信息位。 (可选)

让我们举一个非常简单的例子来清楚地理解上面的内容:

https://cat.com/list;meow?breed=siberian#pawsize

在上面的例子中:

https 是方案(URL 的第一个元素) cat.com 是 netloc(位于方案和路径之间) /list 是路径(在 netloc 和 params 之间) meow 是参数(位于路径和查询之间) breed=siberian 是查询(在片段和参数之间) pawsize 是片段(URL 的最后一个元素)

这可以使用 Python 的urllib.parse.urlparse 以编程方式复制:

>>> import urllib.parse
>>> url ='https://cat.com/list;meow?breed=siberian#pawsize'
>>> urllib.parse.urlparse(url)
ParseResult(scheme='https', netloc='cat.com', path='/list', params='meow', query='breed=siberian', fragment='pawsize')

现在来到你的代码,if 语句检查next_page 是否存在以及next_page 是否有一个netloc。在那个login()函数中,检查.netloc != ''是否意味着它正在检查url_parse(next_page)的结果是否是一个相对url。相对 url 有路径但没有主机名(因此没有netloc)。 ;)

【讨论】:

在 RFC 1808 第 2.1 节中,net_loc 代表 network location,代表:(可选)登录信息、主机名和(可选)端口号。根据 RFC 1738 第 3.1 节,这必须采用 &lt;user&gt;:&lt;password&gt;@&lt;host&gt;:&lt;port&gt; 的形式。这与 Python 3 在urllib.parse.urlparseParseResult.netloc 上的文档状态一致。在那个login()函数中,检查.netloc != ''是否意味着它正在检查url_parse(next_page)的结果是否是一个相对url。相对 url 有路径但没有主机名(因此没有 netloc 知道为什么它被称为 netloc 吗? @AgentZebra 查看之前的评论,它是 network location 的缩写【参考方案2】:
import urllib.parse
url="https://google.com/something?a=1&b=1"
o = urllib.parse.urlsplit(url)
print(o.netloc)

google.com

【讨论】:

以上是关于netloc 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

“?”是啥意思?在 Erlang 中是啥意思? [复制]

“this”这个词是啥意思,“static”是啥意思?

“||”是啥意思在 var 语句中是啥意思? [复制]

CVE是啥意思,CVE是啥意思

“内容”是啥意思:在招摇/openapi“响应”中是啥意思:

TypeScript 这个语法“-?”是啥意思? (破折号问题)是啥意思?