完美解決百度分享 “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://”開頭的地址,實際上不影響使用。