完美解决百度分享 “414 Request-URI Too Large”的问题
很多网站为了提高访问量,把好的东西让更多的用户可以看到,而提供了网页分享功能。百度分享是不错的一个插件,其2.0版本支持用户自定义分享的URL,标题、摘要和图片等内容,用户使用百度分享可以较为方便的分享到国内主流社交平台。
但是,在自定义相关配置后,当用户将内容分享到微博平台时,会发生“414 Request-URI Too Large”的问题。如下图所示:
在网上查找了很多内容,都没有很好的解决这一问题。
一、问题描述
自定义百度分享的配置后,用户将内容分享到微博平台时,发生“414 Request-URI Too Large”。
一般在把内容分享到微博平台时,用户往往把百度分享配置中的“bdText”修改为下面的形式:
var title = document.title; #网页标题
var desc = $("meta[name=description]").attr('content'); #网页内容描述或摘要
if(title.length + desc.length > 120) //标题和描述总长度过长时,进行截取
desc = desc.substring(0,120-title.length) + "...";
....
//百度配置
"bdText": '【' + title +'】'+ desc + '其它内容.',
....
"bdText"中去掉desc中的内容,分享就正常,但只包括标题和网址信息,即使你配置了"bdDesc"参数也是如此,加上desc中的内容,且超过一定长度时就会出错,即使你的desc很短也不行。
二、产生原因
经多次验证发现,一旦配置“bdText”的长度超过某个值时,分享地址中就会附加一大堆内容,除了正常的url参数、title参数、searchpic参数,appkey参数等之外,分享的网址中还会把来源网址加进去,来源网址中包括了百度分享插件的网址,且又重复了上面各个参数的内容,设置是通用配置"common"中其它参数的内容,在进行url编码后,造成请求的URI过长。
当然,附加到后面的这些参数是百度分享添加进去的还是新浪微博平台自动加进去的,这个暂时没有验证。
三、解决方案
分析网上的解决方案,基本上是把desc中的内容设置的特别短,但实际上你会发现,分享微博中的内容除了标题也无法提供更多的信息,甚至,你自己还可以输入百十个字也不会有任何问题。
网上还有一种方案是把百度分享的所有文件下载到自己的服务器上进行改造,但这不可取,失去了使用百度分享应有的意义。
本站给出的解决方案如下:
使用百度分享中提供的onBeforeClick()事件处理函数来处理这个问题,即当用户点击的是微博分享时,重新配置相关参数,使它符合自己的需要,详细配置代码如下:
var title = document.title,
desc = $("meta[name=description]").attr("content"),
pic = $('meta[property="og:image"]').attr("content");
/*描述简介的处理*/
if(desc.length + title.length > 100){
desc = desc.substring(0,100 - title.length);
}
/*分享设置*/
window._bd_share_config={
"common":{
"bdSnsKey":{},
"bdText" : "【"+title+"】"+desc+"-分享自 @翔宇亭IT乐园,详情:",
"bdDesc" : desc,
"bdComment" : '好友分享给你一篇来自翔宇亭IT乐园的好文章。',
"bdPic" : pic,
"bdMini" : "2",
"bdSign" : 'off',
"bdMiniList" : false,
"bdStyle" : "1",
"bdSize" : "32",
onBeforeClick:function(cmd,config){
if(cmd=='tsina'){
config.bdText = '【'+title+'】'+desc+'-分享自 @翔宇亭IT乐园,详情:';
config.bdDesc = '';
config.bdComment = '';
return config;
}
}
},"share":{}
};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(
createElement('script')).src=
'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='
+~(-new Date()/36e5)];
上面设置的核心思想就是,在分享到新浪微博平台时,把bdDesc、bdComment等这些与微博平台无关的设置修改为空字符串,避免分享时,地址栏中重复出现这些内容,同时把回流统计关掉:bdSign设置为off,因为现在在百度分享看不到回流统计了,关掉后,百度分享不再在地址中附加分享的统计标识。
设置完成后,经在多个网页测试通过,而且提供的描述内容更加完整,更加人性化。
上图中的分享图片虽然无法正常显示,但是分享后,图片还是有的,产生这个问题的原因是,微博分享把以"http://"开始的图片地址替换成了“https://”开头的地址,实际上不影响使用。
微信搜索“优雅的代码”关注本站的公众号,或直接使用微信扫描下面二维码关注本站公众号,以获取最新内容。
个人成长离不开各位的关注,你的关注就是我继续前行的动力。
评论内容只代表网友观点,与本站立场无关!
[回复] 11 楼 15367741218 打分:100分 发表时间:2023-06-10
· 414 Request-URI Too Large
openresty
[回复] 10 楼 ying2023 打分:100分 发表时间:2023-05-04
· 是不是需要添加jquery,$是jq里的?
[回复] 9 楼 sc 打分:40分 发表时间:2023-04-24
· 6666666
[回复] 8 楼 PPPPPPPPP 打分:20分 发表时间:2023-02-26
· 你好
[回复] 7 楼 凉快凉快; 打分:20分 发表时间:2022-11-06
· ;两口;看;两口
[回复] 6 楼 wuyifanyq123456 打分:100分 发表时间:2022-11-03
· 积极