黑白相间的蛇是什么蛇| 修缮是什么意思| 吃什么补血小板| 什么的腊梅| 指甲有竖纹是什么原因| 吃什么对前列腺有好处| 日柱华盖是什么意思| 灰度是什么意思| 硬伤是什么意思| 梦见蛇缠身是什么意思| ber什么意思| 孩子百天有什么讲究| 1月25号是什么星座| 发达国家的标准是什么| 什么症状需要做膀胱镜| 为什么做爱那么舒服| 睡不醒是什么原因| 春梦是什么| 梦见捉黄鳝是什么意思| 放屁多吃什么药好| 黄芪什么味道| 促甲状腺激素偏高有什么症状| 总想睡觉是什么原因| 什么地飞翔| 什么叫十二指肠球炎| 水晶消磁是什么意思| 月经不来什么原因| 双鱼座的幸运石是什么| 什么是统招生| 喝黄芪水有什么副作用| 梦见吃油饼是什么意思| 来字五行属什么| 梦见抓螃蟹是什么征兆| 三十周年结婚是什么婚| 一个小时尿一次是什么原因| 董承和董卓什么关系| 鞋油自然色是什么颜色| 牛皮癣用什么药膏最好| 心外科是看什么病的| 贫血貌是什么表现| 12.21是什么星座| 怎么算自己五行缺什么| 拉肚子吃什么食物比较好| 逝者已矣生者如斯是什么意思| 经期喝酒会有什么危害| penis什么意思| 今天是什么生肖日| 1994年是什么命| 梦见栽花是什么意思| 缺钠有什么症状和危害| 油条吃多了有什么危害| 清华什么专业最好| 12月9号是什么星座| 内容是什么意思| 红袖什么意思| 为什么老放屁| 铁锭是什么意思| 樟脑丸是干什么的| 灰色地带是什么意思| 滥竽充数的滥是什么意思| 斯文败类是什么意思| 穿刺检查是什么意思| 梦见石头是什么意思| 荷尔蒙爆棚是什么意思| 大运是什么| 乔木是什么意思| 谷维素治什么病| 女生被操什么感觉| 脚气挂什么科室| 脾不好吃什么药| 双子座是什么时候| 红裤子配什么上衣| 晚上七点半是什么时辰| 什么啤酒最好喝| 方方土是什么字| 欧多桑是什么意思| 指模是什么意思| 唱腔是什么意思| 脚脱皮用什么药膏| 什么叫腰肌劳损| 怀孕吸烟对胎儿有什么影响| 想飞上天和太阳肩并肩是什么歌| 十二生肖叫老大是什么生肖| 3月份生日是什么星座| 过敏是什么原因引起的| 受是什么意思| 恶露是什么颜色的| 惟妙惟肖什么意思| 阳春三月是什么意思| 香蕉吃多了有什么坏处| 大红袍茶属于什么茶| 十月十八是什么星座| 众叛亲离什么意思| 清炖鸡放什么调料| 人养玉三年玉养人一生是什么意思| 什么是直接胆红素| 昶字五行属什么| 小青柑属于什么茶| 什么地爬| 脑梗吃什么东西好| 恐龙灭绝的原因是什么| 月经粉红色是什么原因| 清明有什么习俗| 什么下什么什么| 久卧伤气是什么意思| 尿液检查红细胞高是什么原因| 李荣浩什么学历| 什么的夏天| 奔跑吧 什么时候开播| 什么什么发抖| 尿潜血是什么病| 老公是什么意思| 吃薄荷叶有什么好处和坏处| 夏天煲鸡汤放什么材料| 狮子被称为什么| 海之蓝是什么香型| 乳腺增生结节吃什么药| 春回大地是什么生肖| 榴莲和什么相克| 眼睛疼吃什么药效果最好| 胆红素高吃什么药| 尿带血什么原因| 感光食物是什么意思| 武汉大学校长是什么级别| 肽对人体有什么好处| 绊倒是什么意思| 什么是骨质疏松| 57年属什么生肖| 一百岁叫什么之年| 西安什么山| 什么样的充电宝不能带上飞机| 背靠背什么意思| 朝奉是什么意思| 右下腹痛挂什么科| 康乃馨适合送什么人| 降噪是什么意思| 白绫是什么意思| 胸闷气短可能是什么病| 流加金念什么| 吃什么水果对心脏好| 停休是什么意思| 可爱的动物是什么生肖| 左顾右盼的顾是什么意思| 吃辣的胃疼吃什么药| 什么什么龙什么| 木圣念什么| 吃什么才能瘦下来| 女朋友的弟弟叫什么| 饮鸩止渴什么意思| ra是什么病的缩写| 烧仙草粉是什么做的| 吴优为什么叫大胸姐| 胃病吃什么药最好根治| 白萝卜煮水喝有什么功效| 於是什么意思| 心有余悸是什么意思| 胸疼挂什么科室| 招财进宝是什么意思| 喉咙发炎吃什么药好得快| 贫血三项是指什么检查| 一夜白头是什么原因| 送女生什么生日礼物比较好| 生粉是什么粉| 果胶是什么东西| 白带黄绿色是什么炎症| 脚心烧是什么原因| 普通的近义词是什么| 膝盖痛吃什么药好| 什么原因导致长水痘| 血容量不足是什么意思| 脑动脉硬化是什么意思| 什么安全套好用| 小孩便秘是什么原因引起的| 扁桃体发炎吃什么药| 什么是放疗治疗| 什么是假性自闭症| 79年属什么的| 滚床单是什么意思| 清炖羊肉放什么调料| 无所不用其极什么意思| 心脏病吃什么水果最好| vj是什么意思| cream什么意思| 社保卡属于什么银行| 宁字五行属什么的| 暑湿感冒吃什么药| 婴儿头发长得慢是什么原因| 血脉是什么意思| 李莫愁的徒弟叫什么| 脚底发黄是什么原因| 男生射精什么感觉| 什么动物倒着走| 小龙虾不能和什么一起吃| 胸口闷闷的有点疼是什么原因| 体重除以身高的平方是什么指数| 断袖是什么意思| 儿童心肌酶高有什么症状| 叶赫那拉氏是什么旗| 孙策字什么| cosplay什么意思| mmf是什么药| 吃什么不胖| 全身冰凉是什么原因| 12345是什么投诉电话| 悦风空调是什么牌子| 东宫是什么生肖| 婴儿口臭是什么原因引起的| 墨菲定律讲的是什么| 医保定点医院是什么意思| 契丹族现在是什么族| 恋爱是什么感觉| 春晓描写的是什么季节| 五月掉床有什么说法| 梦到自己开车是什么意思| 枳是什么意思| 手抖挂什么科| 胃造影和胃镜有什么区别| 胆碱酯酶低是什么原因| 汗颜是什么意思| 6.5是什么星座| 什么样的男人值得托付终身| 7月20是什么星座| 膝盖痛什么原因| 文王卦是什么意思| 胃轻度肠化是什么意思| 产检请假属于什么假| 相安无事是什么意思| 肺部感染吃什么药| 梦见皮带断了什么预兆| hr是什么牌子| 立秋什么时候| 甲钴胺片治疗什么病| 什么来什么去| 黄瓜敷脸有什么功效与作用| 步后尘是什么意思| 肝属什么| 魑魅魍魉是什么意思| 河南有什么特产| 白头发补什么维生素| 吃饭就吐是什么原因| 河南有什么美食| 腰椎退变是什么意思| arf是什么意思| 脾虚胃热吃什么中成药| 氨咖黄敏胶囊是治什么的| 为什么嘴巴会臭| 脸上浮肿是什么原因导致的| 什么人适合吃西洋参| 打完升白针有什么反应| 静脉炎吃什么药好得快| 无什么| 牙髓炎是什么| 为什么会突然不爱了| 为什么老是做噩梦| 茼蒿和什么相克| 身体潮湿是什么原因| 胸透主要检查什么| 血小板偏低有什么危害| 倒置是什么意思| 俄罗斯什么东西值得买| 吃槐花有什么好处| 什么火热| 有福气是什么意思| 8月14是什么星座| 百度
blob: a98d5a6f9b5abea93b46c9ab8720573492465295 [file] [log] [blame]
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Functions to canonicalize "standard" URLs, which are ones that have an
// authority section including a host name.
#include "base/compiler_specific.h"
#include "url/url_canon.h"
#include "url/url_canon_internal.h"
#include "url/url_constants.h"
namespace url {
namespace {
template <typename CHAR>
bool DoCanonicalizeStandardURL(const URLComponentSource<CHAR>& source,
const Parsed& parsed,
SchemeType scheme_type,
CharsetConverter* query_converter,
CanonOutput* output,
Parsed* new_parsed) {
DCHECK(!parsed.has_opaque_path);
// Scheme: this will append the colon.
bool success =
CanonicalizeScheme(parsed.scheme.maybe_as_string_view_on(source.scheme),
output, &new_parsed->scheme);
bool scheme_supports_user_info =
(scheme_type == SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION);
bool scheme_supports_ports =
(scheme_type == SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION ||
scheme_type == SCHEME_WITH_HOST_AND_PORT);
// Authority (username, password, host, port)
bool have_authority;
if ((scheme_supports_user_info &&
(parsed.username.is_valid() || parsed.password.is_valid())) ||
parsed.host.is_nonempty() ||
(scheme_supports_ports && parsed.port.is_valid())) {
have_authority = true;
// Only write the authority separators when we have a scheme.
if (parsed.scheme.is_valid()) {
output->push_back('/');
output->push_back('/');
}
// User info: the canonicalizer will handle the : and @.
if (scheme_supports_user_info) {
success &= CanonicalizeUserInfo(
parsed.username.maybe_as_string_view_on(source.username),
parsed.password.maybe_as_string_view_on(source.password), output,
&new_parsed->username, &new_parsed->password);
} else {
new_parsed->username.reset();
new_parsed->password.reset();
}
success &= CanonicalizeHost(source.host, parsed.host,
output, &new_parsed->host);
// Host must not be empty for standard URLs.
if (parsed.host.is_empty())
success = false;
// Port: the port canonicalizer will handle the colon.
if (scheme_supports_ports) {
int default_port = DefaultPortForScheme(std::string_view(
&UNSAFE_TODO(output->data()[new_parsed->scheme.begin]),
new_parsed->scheme.len));
success &= CanonicalizePort(source.port, parsed.port, default_port,
output, &new_parsed->port);
} else {
new_parsed->port.reset();
}
} else {
// No authority, clear the components.
have_authority = false;
new_parsed->host.reset();
new_parsed->username.reset();
new_parsed->password.reset();
new_parsed->port.reset();
success = false; // Standard URLs must have an authority.
}
// Path
if (parsed.path.is_valid()) {
success &= CanonicalizePath(parsed.path.as_string_view_on(source.path),
output, &new_parsed->path);
} else if (have_authority ||
parsed.query.is_valid() || parsed.ref.is_valid()) {
// When we have an empty path, make up a path when we have an authority
// or something following the path. The only time we allow an empty
// output path is when there is nothing else.
new_parsed->path = Component(output->length(), 1);
output->push_back('/');
} else {
// No path at all
new_parsed->path.reset();
}
// Query
CanonicalizeQuery(parsed.query.maybe_as_string_view_on(source.query),
query_converter, output, &new_parsed->query);
// Ref: ignore failure for this, since the page can probably still be loaded.
CanonicalizeRef(parsed.ref.maybe_as_string_view_on(source.ref), output,
&new_parsed->ref);
// Carry over the flag for potentially dangling markup:
if (parsed.potentially_dangling_markup)
new_parsed->potentially_dangling_markup = true;
return success;
}
} // namespace
// Returns the default port for the given canonical scheme, or PORT_UNSPECIFIED
// if the scheme is unknown.
//
// Please keep blink::DefaultPortForProtocol and url::DefaultPortForProtocol in
// sync.
int DefaultPortForScheme(std::string_view scheme) {
switch (scheme.length()) {
case 4:
if (scheme == kHttpScheme) {
return 80;
}
break;
case 5:
if (scheme == kHttpsScheme) {
return 443;
}
break;
case 3:
if (scheme == kFtpScheme) {
return 21;
} else if (scheme == kWssScheme) {
return 443;
}
break;
case 2:
if (scheme == kWsScheme) {
return 80;
}
break;
}
return PORT_UNSPECIFIED;
}
bool CanonicalizeStandardURL(const char* spec,
const Parsed& parsed,
SchemeType scheme_type,
CharsetConverter* query_converter,
CanonOutput* output,
Parsed* new_parsed) {
return DoCanonicalizeStandardURL(URLComponentSource(spec), parsed,
scheme_type, query_converter, output,
new_parsed);
}
bool CanonicalizeStandardURL(const char16_t* spec,
const Parsed& parsed,
SchemeType scheme_type,
CharsetConverter* query_converter,
CanonOutput* output,
Parsed* new_parsed) {
return DoCanonicalizeStandardURL(URLComponentSource(spec), parsed,
scheme_type, query_converter, output,
new_parsed);
}
// It might be nice in the future to optimize this so unchanged components don't
// need to be recanonicalized. This is especially true since the common case for
// ReplaceComponents is removing things we don't want, like reference fragments
// and usernames. These cases can become more efficient if we can assume the
// rest of the URL is OK with these removed (or only the modified parts
// recanonicalized). This would be much more complex to implement, however.
//
// You would also need to update DoReplaceComponents in url_util.cc which
// relies on this re-checking everything (see the comment there for why).
bool ReplaceStandardURL(const char* base,
const Parsed& base_parsed,
const Replacements<char>& replacements,
SchemeType scheme_type,
CharsetConverter* query_converter,
CanonOutput* output,
Parsed* new_parsed) {
URLComponentSource<char> source(base);
Parsed parsed(base_parsed);
SetupOverrideComponents(base, replacements, &source, &parsed);
return DoCanonicalizeStandardURL(source, parsed, scheme_type, query_converter,
output, new_parsed);
}
// For 16-bit replacements, we turn all the replacements into UTF-8 so the
// regular code path can be used.
bool ReplaceStandardURL(const char* base,
const Parsed& base_parsed,
const Replacements<char16_t>& replacements,
SchemeType scheme_type,
CharsetConverter* query_converter,
CanonOutput* output,
Parsed* new_parsed) {
RawCanonOutput<1024> utf8;
URLComponentSource<char> source(base);
Parsed parsed(base_parsed);
SetupUTF16OverrideComponents(base, replacements, &utf8, &source, &parsed);
return DoCanonicalizeStandardURL(source, parsed, scheme_type, query_converter,
output, new_parsed);
}
} // namespace url
psp是什么意思 寡糖是什么 老古董是什么意思 一览无余什么意思 阴道有褐色分泌物是什么原因
肌酸什么时候喝 五金是什么 什么的梨花 狗头是什么意思 扳机指是什么原因造成的
南瓜和什么不能一起吃 梦见自己和别人结婚是什么意思 离婚需要什么资料 59年属什么 什么动物最怕水
乔峰和洪七公什么关系 海柳什么颜色最贵的 用什么洗头白发能变黑 崽崽是什么意思 血小板压积偏低是什么意思
艮五行属什么hcv8jop1ns5r.cn 动一下就出汗是什么原因hcv8jop9ns5r.cn 女性查hpv挂什么科mmeoe.com 什么是狂躁症hcv7jop5ns3r.cn 肚脐下方是什么部位520myf.com
医院总务科是干什么的hkuteam.com 肛裂用什么药治最好效果最快hcv7jop7ns3r.cn 为什么月经会推迟hcv9jop2ns0r.cn 乌鸡煲汤放什么材料hanqikai.com 苹果和生姜煮水喝有什么功效hcv9jop0ns9r.cn
什么叫收缩压和舒张压hcv8jop8ns3r.cn 推测是什么意思hcv9jop3ns8r.cn 处暑什么意思hcv7jop7ns4r.cn 霸气是什么意思hcv8jop0ns7r.cn 备孕为什么要吃叶酸bjhyzcsm.com
白瓜是什么瓜hcv8jop0ns2r.cn 郑五行属什么hcv7jop6ns1r.cn 海马用什么呼吸aiwuzhiyu.com 口真念什么hcv9jop3ns2r.cn 拔了尿管尿不出来有什么好办法jiuxinfghf.com
百度