2010-10-08

2010-10-08 Facebook Javascript SDK in IE8 problem

自從Facebook今年初發布 Graph API 並開始提供新的 SDK 以後,Facebook的相關APP開發規範就一直在進行修正調整,同時原本開發者費了不少時間才熟悉的FBML APP將會被淘汰掉,

Facebook Markup Language (FBML) - Facebook Developers:裡面有提到:
Note: We do not recommend FBML for new developers. If you aren't already using FBML, you should instead implement your application within an iframe, using the JavaScript SDK and social plugins for client-side integration with Facebook services . The one exception: if you absolutely must create an application that appears as a tab on a Facebook Page, you will need to use FBML for now; tabs do not currently support iframes directly. We will be transitioning tabs to iframes later this year -- please see the developer roadmap for more details.

而在 2010-08-20 的Facebook Developer Blog Facebook Platform Roadmap Update (2010-8-20) 中更是明確指出:
By the end of this year, we will no longer allow new FBML applications to be created, so all new canvas applications and Page tabs will have to be based on IFrames and our JavaScript SDK.

既然Facebook都這樣說了,那就乖乖的來重新熟悉 iframe + JavaScript SDK 的開發模式,結果開始以後才發現 JavaScript SDK 說明文件 跟之前的developer wiki (新API公佈後沒多久就被拿掉了)相比資料少的可憐;資料少也就算了, 還有不少莫名其妙的問題。
尤其是在IE8的環境下更是討厭,
以下就把這段時間遇到的問題跟解決方式整理一下作個紀錄:

1. FB.Event.subscribe的auth.login事件在IE8底下會有無窮迴圈的問題

用IE8開啟 測試APP 1 http://apps.facebook.com/fbuiwithiexssfilter/test1/

這個簡單的測試APP 在Firefox / Chrome 這些非IE的瀏覽器下都運作正常,但是在IE8底下


FB.Event.subscribe('auth.login', function() {
window.location.reload();
});

就會出現無窮迴圈不斷地reload


關於這問題在 Facebook Platform Developer Forum 中有人提出兩種解法http://forum.developers.facebook.net/viewtopic.php?id=60411

第一種是在HTML中加上 讓IE進入相容模式
(此解法在FB.ui 的 stream.publish 發布塗鴉牆內含中文訊息時會有被IE8的XSS filter給阻擋的問題,這部份後面再說明,而且我測試無效)
第二種是在http header中加上 P3P CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"

in Apache2 , add
header add P3P 'CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"'
in .htaccess file (must enable apache mod_headers)
= or =
in php , add
header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');

用工具看http header可以確認是否有正確加入 P3P的http表頭


經過這樣處裡後原先 FB.Event.subscribe 的 auth.login事件在IE8底下就正常了

可用IE8開啟 測試APP 2 http://apps.facebook.com/fbuiwithiexssfilter/test2/ 進行測試
跟前面測試APP 1一樣的code在這就不會有無窮迴圈的問題了。




2.FB.ui stream.publish 發布塗鴉牆內含中文訊息時會被IE8的XSS (Cross Site Scripting) filter判定為cross-site attack而阻擋的問題
現在Facebook對於APP塗鴉牆發布做了很嚴苛的限制,之前大家都在用的自動發布的方式很容易被判定為違規而被禁用塗鴉牆發布功能(已經聽到不少APP被砍或是塗鴉牆發布被禁用的案例,尤其是8月開始Facebook的自動偵測系統大發威,砍掉不少app),所以要發布塗鴉牆都建議採用popup出預覽待使用者確定後發出才比較安全,在新的Facebook Javascript SDK中此種方法用的是FB.ui ,但是也有不少朋友在開發測試時遭遇到FB.ui開啟的內容被IE8的XSS filter給擋掉的問題,造成在IE8底下沒法正常發送塗鴉牆。

這問題也卡了我很久,全用英文就沒這問題,只要有非英文字元就有可能觸發,而且中文字越多機率越高,就算運氣好沒有被IE8 XSS filter擋掉,但是也會非常的慢(CPU Loading暴升且把IE8卡住),怎麼交叉測試都沒用,有時多一字/少一字結果就完全不同,而把增減的那字獨立拿出測試又沒問題,實在是找不到規則可尋。

IE8開啟 測試APP 3 http://apps.facebook.com/fbuiwithiexssfilter/test3/

其中的 pubish with english content (dialog) | pubish with english content (popup) 這兩個按鈕都可以正常打開發布塗鴉牆的預覽頁面(純英文內容),
但是發布有中文訊息的塗鴉牆就容易被IE8的XSS filter給阻擋掉
pubish with chinese content (dialog) 內嵌dialog視窗模式

pubish with chinese content (popup) 外跳popup視窗模式


雖然說可以把IE8的XSS filter給關掉就不會有這被卡的問題了

但是以APP開發者的立場來說不可能要求使用者把IE8的這個重要安全功能給disable掉,所以還是得要找出有效解才行。

在經過多方測試比對後發現是我犯了一個差不多先生等級的低級錯誤,就是HTML最前方的!DOCTYPE定義區段沒寫才造成的。這在非IE8瀏覽器下基本都不會有影響的,但是在IE8底下就會造成這問題!

IE8你也太太太要求標準了吧 ~~

用IE8開啟 測試APP 4 http://apps.facebook.com/fbuiwithiexssfilter/test4/

在這個測試中在HTML最前面補上了 <!DOCTYPE html>
同樣的中文內容在測試APP3中會被擋掉的在這就都可以正常了



在這裡又要順帶一提前面提到的IE8相容性檢視了,若是在IE8針對要用FB.ui發布塗鴉牆的頁面打開相容性檢視的話,中文內容依舊有可能會觸發XSS filter




所以用 Facebook Javascript SDK 的 FB.ui 發布中文內容塗鴉牆,為了配合廣大的IE8 User
務必要遵循標準在HTML最前面加上 <!DOCTYPE html> ,同時User得要避免使用IE8 的相容性檢視(Compatibility View) 功能才行。

還有一件事要提一下,在九月底十月初Facebook已經把APP發布的塗鴉牆訊息在動態消息(News Feed)中的呈現方式改掉了, 在 Facebook Developer Blog 2010-09-22的
Making Games on Facebook Better裡面寫到
Application stories will only be shown to those who are already engaging with the application.
也就是說在User的動態消息(News Feed)中現在只看得到自己曾經安裝過的APP的訊息,像以前那樣想要靠發布塗鴉牆來散布宣傳吸引其他使用者進來的時代已經結束了,這對不玩遊戲的User是個好消息,但對APP開發者來說是個噩耗!之前改掉通知時就一堆APP慘兮兮了,後來大家改用塗鴉牆來散布消息,現在又改這就讓APP開發者/經營者幹到沒力啊。

寫到這還是要靠么一下

在Facebook Platform Developer Forum 裡面這位開發者說的 這段話也是我想說的:

even after three years of this cr@p is still amazes me how on earth Facebook manage to push things like this to the live site, do they have no testing procedures at all?

另外這篇 The Facebook API: A Case Study in Not Caring About Developers
POOR DOCUMENTATION
POOR TESTABILITY
NO RESPONSE TO SERIOUS ISSUES
CONSTANTLY CHANGING API

也道出了Facebook Application Developers的心聲

很多問題文件資料都沒寫,得要Developer自己想辦法去論壇大海撈針才行,問題是有幾個Developer有那麼多美國時間整天泡在論壇上? 很機車咧!!

最後再打個廣告
反非死不可粉絲頁 歡迎跟我一樣被Facebook搞到起度爛的開發者一起來交流交流 ~

2010-08-30

2010-08-30 FaceBook App "disappeared" or "Publishing Feed Stories disabled" collection

Collection from
FaceBook Developer Forum
( http://forum.developers.facebook.net/ ) about
App "disappeared" or "Publishing Feed Stories disabled"


2009-03-31
ERROR 200: Feed story publishing is disabled for this application

2009-11-29
Facebook Restrictions??

2010-01-09
I restricted :S

2010-03-12
My Application disappeared P1 P2 P3 P4

2010-04-16
Publishing Feed Stories disabled

2010-05-17
My App Disappeared

2010-06-06
Publishing Feed Stories disabled

2010-06-22
please help me my app disappeared

2010-07-25
All my applications disappeared

2010-08-20
App Deleted (Need Urgent Help)

2010-08-06
Publishing Feed Stories disabled

2010-08-23
Application Love is.. Fans has been disabled! Why?

2010-08-24
abusive application

2010-08-27
Publishing Feed Stories disabled after using fb:comments

2010-08-27
Publishing Feed Stories disabled

2010-08-30
active app mysteriously disappeared

For every FaceBook Application Developers:
Be careful!!

The FaceBook automated systems for abusing identify are very ruthless,
and may not give you any warning or notice before they do that!!
Who will be next??











2010-08-20

2010-08-20 Facebook 無預警移除 APP. e04!!

在FACEBOOK火熱的今天,軟體公司開發應用程式/社交遊戲放到FaceBook上增加曝光度及流量已經成為一門顯學了,但是有人碰過辛苦開發且經營了一段時間的APP被FaceBook毫無預警給幹掉嗎?

不要懷疑,還真有這種事,很不幸的我就遇到了。

我們處裡的是一款代理自韓國的FlashGame進行FACEBOOK的APP介接整合,基本功能也很單純,就是在FaceBook上開一個進入遊戲的入口,加上一些基本的社交功能(邀請好友/經使用者同意授權後於塗鴉牆發布遊戲訊息/好友的遊戲分數排名),實在也想不出有哪裡違反了FaceBook的使用條款。

在 2010-08-19 (四) 下午兩點二十分左右,我們有位同仁發現他的FB 帳號被FaceBook停權
畫面如下

得需要透過手機驗證過後重設密碼才能再次登入,非常的怪異。

結果設完後發現我們兩週前才上架的app消失了


此時發現問題大條了,結果交叉比對後發現跟這個APP有關連的四個管理帳號全被FaceBook停權。而將此四個帳號重設密碼解封之後發現原本的APP徹底消失,一點痕跡也不留。

由我們Server上的最後LOG時間判斷,問題是發生在 14:13 分,之後就沒有request進來了。

在查找過程中發現FaceBook幹的非常徹底,所有殘渣都沒有留下,包含APP URL頁面,APP粉絲頁面,USER的應用程式書籤,USER的應用程式權限設定等等所有跟該APP有關的部份全部都消失。

在評估過後決定先進行重建設定的工作 (原本APP上線十多天有六七千個User跟粉絲全沒了
重建過程中發現 原本的Canvas Page URL 完全不給設定。會出現
Validation failed.
The Canvas Page URL you requested is not allowed.
而且確定不是重名,若是Canvas Page URL重複則會出現
Validation failed.
Unable to update Canvas Page URL: The Canvas Page URL you requested is already taken.

這情況非常詭異,因為原先的Canvas Page URL命名並沒有違反FACEBOOK的規範才對,建置完成後也提交給FaceBook並通過了( Directory Status: Approved ),同時也上線運作了十多天了。

根據上述情況推斷該APP是被FaceBook列入黑名單之中了,
由四個管理員帳號都被FB停權的狀況來看,APP肯定不是被我們自己人給誤刪,而是被FaceBook給刪掉了。至於FaceBook為何要把APP幹掉同時將所有管理員帳號停權就不得而知了,因為並沒有收到任何通知或警告。認知中我們APP應該也沒有違反FaceBook政策的部份,要是有人惡意舉報應該也要有夠多的數量才會讓FaceBook這樣幹才對。

最後無奈之下只好更改Canvas Page URL重新設定APP
新APP設定好之後程式中的
Application ID / API Key / Application Secret / Canvas URL 這些資料全都得要隨之更新

先前累積下來的數千個粉絲全部沒了,得要重新讓USER加入
而且因為Canvas Page & APP ID 都換掉了,所以所有網站及廣宣連結全得替換。
而先前公司已經在FaceBook投放了將近USD$1000的廣宣費用也都打水飄了


嘗試要尋找申訴管道找了很久,終於在FaceBook開發論壇中找到有其他人遭遇類似的問題
Facebook Platform Developer Forum / My Application disappeared:
這一整個討論串非常的有意思,事情是從今年三月開始發生的。
然後在第三頁中 3月19日 FaceBook管理者承認是有問題造成部份好的APP因為BUG被無預警誤殺並提供申訴取回


結果到了 3月31日有開發者回應說


從別人的經驗看來就算是通過申訴一兩週之後拿回來的也是個廢物了。

我昨天也在論壇回報後,得到的回覆是
===========================
Hello,
For issues like this, please refer to our Help Center FAQs on the issue: http://www.facebook.com/help/?faq=17553
Thanks,
===========================
可是那個FAQ link得要把語系換成英文才看的到,中文語系是連不到的

這也就算了
語系換成英文就看到了


Our automated systems routinely screen and disable bad applications. If your application has been disabled and your application followed all of the Developer Principles and Policies, fill out this form to initiate the appeals process. Please note that if we determine your application does not abide by our Developer Principles and Policies, it will not be reactivated. The decision may take one to two weeks. Thanks in advance for your cooperation.


結果說要去填一個form然後等一到兩週!那是不是這一兩個禮拜我的app都關門大吉了
就算真要等一到兩週也就算了,結果那個form 連結 http://www.facebook.com/help/contact.php?show_form=dev_name_appeal 還是壞的 .....

會跳回到Help Center頁面去

在該討論串最後有其他相同情況的app開發者留言說

這就是在裝笑為嘛!!

後來從論壇中找到一個
FaceBook Developer Help Contact Form
http://www.facebook.com/developers/developer_help.php
藏的真好,我是去填了資料,但是基本上我也不報任何期望了!!
就算等了一兩個禮拜拿回來以後又能幹嘛?

在沒有收到任何通知或警告的情況下整個APP就被FaceBook莫名其妙給幹掉了!
而且我還真想不出有哪裡違反FaceBook的Policy嚴重到必須要將四個該APP管理員都給停權停掉?

這慘痛的經驗提供各位FaceBook應用程式開發者作為借鏡。
~~靠山山倒啊靠人人跑啊~~

2010-08-20 16:00 update:
剛在 Facebook Platform Developer Forum / My Application disappeared: 這討論串中看到有人比我更慘

心情頓時舒坦了些 XD

另外要在抱怨一下,
Facebook Platform Developer Forum http://forum.developers.facebook.net/
Facebook Platform bug tracking system http://bugs.developers.facebook.net/
這論壇跟bug回報系統的帳號居然沒有跟FaceBook整合
也就是你要上開發者論壇問問題得要去註冊一個帳號,發現Bug要到Bugzilla回報又得在建立一個帳號。
從這可以看出FaceBook對於第三方應用程式開發者有多麼的不重視與不用心了。

2010-08-21 06:30 update:
FaceBook的人員為了APP消失的問題特別在開發論壇中開了一個置頂的公告串
Sticky: What to do if your application disappeared or was disabled


看來這問題最近嚴重到FaceBook不得不去面對了。

而那個FAQ裡面原本壞掉的APP申訴連結 http://www.facebook.com/help/contact.php?show_form=dev_disable_appeal 也總算可用了


填完表格送出後收到一封系統自動回覆的MAIL

需要一到兩週的時間,新的都設好了到時候舊的再拿回來也沒用,我主要也就想看看FaceBook到底會怎麼回答。

2010-08-23 update:
收到FaceBook的申訴回覆了,非常的制式

========================================
We appreciate your inquiry and we apologize for any inconvenience caused. Please note that we have automated systems in place to remove applications that are abusing our product, such as publishing excessively to the Stream, or receiving negative feedback from our users. Unfortunately, we will not be able to reinstate your application, as it was removed by our automated systems. We realize that it might be a challenge to start fresh, but when an application is disabled for violating our terms and policies it is completely removed from the site permanently.

Going forward, please make sure to keep our policies in mind, as this is important for your success on Facebook Platform and to ensure that you're bringing users a great experience with your application. We strive to make our policies as clear as possible, shaping them to best serve users and the entire Platform ecosystem. We hold our developers to a high standard and trust that they will use our communication channels in ways that promote fair growth across Platform.

If you would like to re-launch your application, please feel free to do so after you are certain that it meets our terms and policies, which you can find below. Thank you in advance for your cooperation.

Developer Principles and Policies: http://developers.facebook.com/policy/
Policy Examples and Explanations: http://developers.facebook.com/docs/guides/policy/examples_and_explanations
Developer Forum: http://forum.developers.facebook.com
Statement of Rights and Responsibilities: http://www.facebook.com/terms.php

Thanks,
Platform Policy Team
Facebook
========================================
簡單來說就是:
你的APP是被我們自動偵測系統給幹掉的,不要肖想我們會還給你了,至於你的APP為何會被幹掉?這一定是你違反了我們的政策,但是違反了哪條林北不告訴你 XD !!
你自己看著辦吧!!

2010-08-30 update:
我把FaceBook Developer Forum裡面關於APP被幹掉或是塗鴉牆功能被停用的苦主PO文靠夭的整理了一下
2010-08-30 FaceBook App "disappeared" or "Publishing Feed Stories disabled" collection
至於其他自認倒楣摸摸鼻子沒上去反應的有多少就不得而知了。

2010-05-15

2010-05-15 原來GOOGLE SPIDER是個好駭客

在上週末(2010-05-09)曝光的網站漏洞
2010-05-09 取得個人資料何需Foxy. 一個爛網站就能讓你脫光光
今天看了下,居然在頁面上寫著
由於本網站受駭客入侵, 為免網友受進一步波及, 現緊急關閉本網站,並探究有效預防措施, 確認問題解決後再行開放, 做成網友不便及權益受損, 在此謹致上最大歉意!


看到這裡我又暈了,原來GOOGLE SPIDER也算駭客啊.看來還是搞不清楚問題在哪裡?

上一篇中我已經很客氣的把網站URL/名稱都蓋掉不直接SHOW出來,結果並沒有讓管理者/開發者有任何反省...

到現在(2010-05-15)事件曝光已經整整六天了,那些個資現在依然保留在GOOGLE上面.用特定關鍵字 依舊可以搜出那些會員的姓名生日電話地址..
上一篇最前面都寫上了..
如果發現自己的個資被GOOGLE抓到了,請參閱 如何移除Google搜尋結果中「危害隱私」的 Cache暫存資料?

連怎麼移除掉已外洩被GOOGLE抓到的資料方法都說了,還不去處裡?
相比之下去年戰國策所發生的事件處裡上還稍微好一點點,起碼曝光之後沒多久就請GOOGLE把那些CACHE給處裡掉了.

該網站的系統開發商(XX數位科技 )還搞不清楚問題在哪嗎?

既然如此就直接挑明說吧,在該開發商網站上列出的相關客戶網站CASE幾乎都有一模一樣的問題
也就是進入管理後台(/mag/ )的權限都是交由JAVASCRIPT來進行判斷.這樣的如果還搞不清楚怎麼補洞的話...那只能好自為之了.

管理者/開發者不去檢討這些資料為什麼會被GOOGLE SPIDER給爬出來,難道把問題都推給駭客就沒事了嗎?
照這個邏輯下來,GOOGLE就是世界上最厲害的駭客了.

2010-05-09

2010-05-09 取得個人資料何需Foxy. 一個爛網站就能讓你脫光光

2010-05-09 22:20 補充在前面
建議大家可以設定 Google 快訊來追蹤自己的一些個人隱私資料(姓名/身分證號/電話/地址/信用卡號......等等)是否有被暴露在網路上.
雖然Google 快訊只能做到事後通知,但起碼會比什麼都不知道來的強. 早點發現可以早點處理...
如果發現自己的個資被GOOGLE抓到了,請參閱 如何移除Google搜尋結果中「危害隱私」的Cache暫存資料?

2010-05-15 補充:
被GOOGLE CACHE住的個資依舊還在... 原來GOOGLE SPIDER是個好駭客
唉......
==============================================================================
今天看到一則新聞

用foxy盜個資 網購盜刷百萬元

刷爆近百人信用卡
警方調查,嫌疑人黃廉恩(27歲,有竊盜、詐欺等前科),擔任資訊業某公司遊戲管理員,涉嫌自97年6月起,利用下載foxy資源分享軟體,網路搜尋信用卡持有人,盜走存放電腦裡個人資料,取得信用卡號及檢核碼。

一時手癢用嫌疑人名字上GOOGLE搜了一下
結果又發現一個後台管理系統被GOOGLE給爬進去了 XD


既然知道該管理後台的URL,就可以用 site: 參數來鎖定目標向GOOGLE大神查詢
啊咧,又是兩千多筆啊


隨便按一筆進去,結果跳出一個Javascript的alert 無權限,請重新登入

可是如果用NoScript這個FireFox的Plug-In來把Javascript檔掉,就可以一覽無遺了




而且不光是看個資,整個後台任何操作都通行無阻

這網站管理後台雖然在最前面有做帳號密碼登入,
但是後面所有判斷完全交由前端的JavaScript來處裡,
因為他所謂的權限系統判定,只是在ASP產出的頁面前面插上這段
< language="JAVASCRIPT">
alert("無權限,請重新登入")
history.go(-1);
< / script >
不過不管是該出來還不該出來的其他資料全都老老實實的SHOW在底下..

這樣的網站管理後台也算是個極品了.

從GOOGLE CACHE頁面的紀錄來看,這些紀錄起碼存在GOOGLE上面超過20天了.


再來看看加入這個網站的會員條款


註冊會員時,必須確實填寫基本資料,告知真實姓名、電子郵件地址與相關資料等。

所有由會員提供的個人資料,均視為機密,在未經會員同意前,XXXX網站保證絕不將個人資料,洩露給XXXX網站以外之第三者。


囧rz... 以後你還敢隨便在網上確實填寫個人資料嗎???

相關網站資料因為程式缺陷或是管理疏失而被搜尋引擎抓出來外洩的案例已經夠多了,老實說也不差這一個啦!!

所以說要取得個人資料何需Foxy. 一個爛網站就能讓你脫光光

P.S. 一些較為敏感且與新聞中嫌疑犯無關的個人資料在截圖上已先模糊處裡了,但是有概念的人隨便一搜還是搜的出來,那些都是完全被曝露在網路上的公開資料

最後再低調補一刀 XD
直接把管理者原密碼噴到前端來~超帥氣的啦!!!

2010-04-14

2010-04-14 POST Base64 encoding data to Coldfusion

這幾天遇到一個詭異的問題,程式環境是前端FLASH(AS3)後端是Coldfusion.
需求是前端AS3產生FLASH畫面ScreenShot的BitmapData透過JPGEncoder轉換之後直接將binary data POST到後端接收.
一般情況下採用 Adobe Forums: uploading bitmapData to ColdFusion 這作法是OK的.

不過在一些特殊環境之下遇到了資料傳輸被中斷問題,經過測試發現是前端POST送出的binary data在某些情況下會被Client Side某些寫的不嚴謹的防火牆誤判,
導致觸發filter產生connection reset造成數據傳輸被強制中斷.

為了解決這問題經測試後決定先用Base64編碼將binary data轉為String後再POST出去,後端接收到以後再作Base64 Decode的動作還原回JPG圖檔.這樣雖然傳輸的數據量變大了,但是原則上應該可以避免被防火牆誤判.

結果前後端改過之後測試又發現新的問題,在某些時候後端Coldfusion會噴出 500 Server Error.

ROOT CAUSE:
java.lang.IllegalArgumentException
at coldfusion.filter.FormScope.parseQueryString(FormScope.java:355)
at coldfusion.filter.FormScope.parsePostData(FormScope.java:327)
at coldfusion.filter.FormScope.fillForm(FormScope.java:277)
at coldfusion.filter.FusionContext.SymTab_initForRequest(FusionContext.java:438)
at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:33)
at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
at coldfusion.filter.RequestThrottleFilter.invoke(RequestThrottleFilter.java:126)
at coldfusion.CfmServlet.service(CfmServlet.java:175)
at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
at jrun.servlet.FilterChain.doFilter(FilterChain.java:86)
at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
at jrun.servlet.FilterChain.doFilter(FilterChain.java:94)
at jrun.servlet.FilterChain.service(FilterChain.java:101)
at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286)
at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543)
at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203)
at jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:320)
at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)
at jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266)
at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)


花了時間測試查找才確定原因是因為Base64的可用字元與傳輸所用的 Content-Type: application/x-www-form-urlencoded 定義的保留字有所衝突.



Base64中有用到的 / = + 在 x-www-form-urlencoded 定義中是保留字元,
像下圖的情況,當POST DATA中出現兩個連續的 // 時,Coldfusion就噴500了.





解決方式有兩種.
1.前端AS3在Base64轉換完以後再作一次URLEncode的動作,把Base64Encode之後String內的 / + = 轉成 %2F %2B %3D ,後端收到之後再做URLDecode來還原後再Base64Decode,不過這樣傳輸的DATA又變更肥了.
2.前端AS3在傳Base64Encode的STRING時,把Http Header的Content-Type改為 application/octet-stream 來避開Coldfusion對於x-www-form-urlencoded的內容格式判斷

最後決定採行第二種方式,由前端AS3修改上傳時HTTP Header的Content-Type為application/octet-stream去避免後端Coldfusion自動進行格式判斷


目前測試觀察下來Coldfusion就不會再吐500了 .

2009-12-21

2009-12-21 Plurk 訊息量統計

這是延續之前所做的統計
2009-05-12 Plurk訊息成長量週統計
2009-11-06 Plurk 訊息量統計

首先是每日plurks數統計
由2009-5-10 ~2009-12-20的曲線圖

由整體趨勢來看很明顯的每日新增Plurks數成長出現停滯

以下是每小時plurks的週統計
2009-11-01 ~ 2009-11-08

當週平均每小時新增了 30,069則plurks & 125,627則回應
其中紅色橢圓型標出的時間區間是 2009-11-05 17:00~18:00 剛好當時台灣發生地震 (2009-11-05 17:33 震央南投6級)

2009-11-08 ~ 2009-11-15

當週平均每小時新增了 29,598則plurks & 122,581則回應

2009-11-15 ~ 2009-11-22

當週平均每小時新增了 29,363則plurks & 119,641則回應

2009-11-22 ~ 2009-11-29

當週平均每小時新增了 29,814則plurks & 125,022則回應

2009-11-29 ~2009-12-06

當週平均每小時新增了 29,924則plurks & 123,942則回應

2009-12-06 ~ 2009-12-13

當週平均每小時新增了 29,794則plurks & 118,111則回應

2009-12-13 ~ 2009-12-20

當週平均每小時新增了 30,628則plurks & 130,525則回應
其中在2009-12-17 15:00~17:00之間plurk有卡住的情況所以新增資料數少很多
而在 2009-12-19 21:00~22:00 (右側紅圓框標註)因為台灣發生地震(2009-12-19 21:02 震央花蓮) ,所以新增資料數突然倍增,
原本週六日plurks / responds 數與週一到週五比起來就明顯偏少,不過12-19這場地震把大家都震出來了 XD
當時的詳細數字
(其實Twitter上當時也是一樣有不少地震相關訊息,只是Twitter台灣用戶以全球來說屬於少數,也比較沒有這麼明顯的數據可抓取計算)

總結下來個人歸納出兩點無責任推論XD :
1.Plurk整體的成長已經出現平緩甚至是停滯
(而且估計現有的那些新增訊息數/回應數中有一定比例是由機器人貢獻的)
2.只要台灣發生地震網民就都忙著上網發推發噗