本文介绍了混合内容&&uri_for函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我们有一个使用Dancer2框架的Web应用程序。网站使用的是https。但是在页面中,它使用uri_for调用其他页面。即uri_for生成url并将其发送到模板。
生成的url自动设置为"http",因此页面具有混合内容。因此不会加载。
我的问题是uri_for位于何处。为什么自动设置为"http",如何将其指定为"https"?非常感谢温迪
推荐答案
参见Dancer2::Core::Request
中的line 283:
sub uri_for {
my ( $self, $part, $params, $dont_escape ) = @_;
$part ||= '';
my $uri = $self->base;
# Make sure there's exactly one slash between the base and the new part
my $base = $uri->path;
$base =~ s|/$||;
$part =~ s|^/||;
$uri->path("$base/$part");
$uri->query_form($params) if $params;
return $dont_escape
? uri_unescape( ${ $uri->canonical } )
: ${ $uri->canonical };
}
调用$self->base
获取方案,参见line 242:
sub base {
my $self = shift;
my $uri = $self->_common_uri;
return $uri->canonical;
}
哪个调用$self->_common_uri
(参见line 249):
sub _common_uri {
my $self = shift;
my $path = $self->env->{SCRIPT_NAME};
my $port = $self->env->{SERVER_PORT};
my $server = $self->env->{SERVER_NAME};
my $host = $self->host;
my $scheme = $self->scheme;
my $uri = URI->new;
$uri->scheme($scheme);
$uri->authority( $host || "$server:$port" );
$uri->path( $path || '/' );
return $uri;
}
调用$self->scheme
,参见line 159:
sub scheme {
my ($self) = @_;
my $scheme = $self->is_behind_proxy
? $self->forwarded_protocol
: '';
return $scheme || $self->env->{'psgi.url_scheme'};
}
这篇关于混合内容&&uri_for函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!