osSetContentTypeの引数

osSetContentTypeの引数

by MasterPoppy Amat -
Number of replies: 20

lsl-markdown をJOGに移植すべくOSSLをいじっています。

LSL Function Status によるとllSetContentTypeが未実装なので
osSetContentType http://opensimulator.org/wiki/OsSetContentType
をかわりに使うんだとおもうんですが、引数string typeの中身になにをかけばいいのか不明です。

使用するのはtext/plain, text/html, application/json, なんですが、どこかに引数例の記述ありませんでしょうか?

In reply to MasterPoppy Amat

Re: osSetContentTypeの引数

by Iseki Fumikazu -

osSetContentType の type は以下の何れかです.

"text/plain"
"text/html"
"application/xml"
"application/xhtml+xml"
"application/atom+xml"
"application/json"
"application/llsd+xml"
"application/x-www-form-urlencoded"
"application/rss+xml"

因みに,ソースコードをみると llSetContentType もちゃんと実装されていて,osSetContentType と同じ関数を呼び出しているので,llSetContentTyp も動くんじゃないでしょうか?

Wiki の更新はだいぶ遅れているみたいですので.

 

In reply to Iseki Fumikazu

Re: osSetContentTypeの引数

by MasterPoppy Amat -

ご教示ありがとうございます。
llSetContentTypeもosSetContentTypeも実装済みのはずだという前提で切り分けテストをしてみました。

llSetContentType の仕様ではCONTENT_TYPE_HTML(=integerの1)を指定している場合
Caveatsに記載ある条件のとき(OwnerがVIewer内蔵ブラウザでアクセスしたときのみ)にHTML文書として表示されるはずです。

Case(A)
llSetContentTypeでのテスト (JOG)…意図しない挙動(textとして表示される)
Code: llSetContentType(id, CONTENT_TYPE_HTML);
https://gyazo.com/88d44c7afe192374eaab0bcb025d7832

Case(B)
osSetContentTypeでのテスト (JOG)…意図しない挙動(textとして表示される)
Code: osSetContentType(id, "text/html");
https://gyazo.com/66581236e15ce6a6a255cfe474aa0ddc

Case(C)
llSetContentTypeでのテスト (SecondLife Grid)…意図した挙動(htmlとして表示される)
Code: llSetContentType(id, CONTENT_TYPE_HTML);
https://gyazo.com/1900a4d5f0acf0d1121a6bdfea5ff114

 

まとめると
SecondLife Gridでは正しくHTMLとして表示される(サーバからtext/htmlで返っている)が、
JOGではllSetContentTypeとosSetContentTypeのいずれもtextとして表示される(text/plainが返っている)ということになりそうです。

おそらく内的にはUser Agentとかで区別してしてて、その辺が間違ってるんじゃないかと言う気がするんですが、
そんな細かいコードがどこにあるのかわからず推測の域をでません。 

 

テストに使用したコードです。(line.32-33(一番下らへん)をコメントアウトしてLSL<->OSSLを切り替えます)

key url_request;

string HTML_BODY =
"<!DOCTYPE html>
<html>
<body>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
</body>
</html>";

default
{
    state_entry()
    {
        url_request = llRequestURL();
    }
 
    http_request(key id, string method, string body)
    {
        if (url_request == id)
        {
            url_request = "";
            if (method == URL_REQUEST_GRANTED){
                llOwnerSay("URL: " + body);
            }
            else if (method == URL_REQUEST_DENIED){
                llOwnerSay("Something went wrong, no url:\n" + body);
            }
        }
        else{
            //llSetContentType(id, CONTENT_TYPE_HTML);
            osSetContentType(id, "text/html");
            llHTTPResponse(id, 200, HTML_BODY);
        }
    }
}
In reply to MasterPoppy Amat

Re: osSetContentTypeの引数

by MasterPoppy Amat -

サンプルコードの使い方を補足します。

実行するとチャットウインドウにhttp-inのサーバURLが出力されるので、
FireStromだとURLを右クリック > [内蔵ブラウザで開く] とすると内蔵ブラウザで開きます。

In reply to MasterPoppy Amat

Re: osSetContentTypeの引数

by Iseki Fumikazu -

そうですね.
Content-Type に text/plain を返していますね.
もう一回,ソースコードを見直します.

0000 CLIENT: GET /lslhttp/2c264db7-6dd9-4408-8c16-fc519df6eacf/ HTTP/1.1
0001 CLIENT: Host: localhost:9100
0002 CLIENT: User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0
0003 CLIENT: Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
0004 CLIENT: Accept-Language: ja,en-US;q=0.7,en;q=0.3
0005 CLIENT: Accept-Encoding: gzip, deflate
0006 CLIENT: Connection: keep-alive
0007 CLIENT: Upgrade-Insecure-Requests: 1
0008 CLIENT:
0009 SERVER: HTTP/1.1 200 OK
0010 SERVER: Content-Type: text/plain
0011 SERVER: Date: Mon, 24 Oct 2016 11:58:39 GMT
0012 SERVER: Content-Length: 98
0013 SERVER: Server: Tiny WebServer
0014 SERVER: Connection: close
0015 SERVER:
0016 SERVER: <!DOCTYPE html>
0017 SERVER: <html>
0018 SERVER: <body>
0019 SERVER: <h1>My First Heading</h1>
0020 SERVER: <p>My first paragraph.</p>
0021 SERVER: </body>
0022 SERVER: </html>

 

In reply to Iseki Fumikazu

Re: osSetContentTypeの引数

by Iseki Fumikazu -

クライアント側からの cookie に agni_sl_session_id が設定されていないと,全て text/plain に強制的に変更されるようです.

下記コードで,allowResponseType が true にならないと,content-type は 全て text/plain になります.

 

OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs 

                    foreach (DictionaryEntry header in headers)
                    {
                        string key = (string)header.Key;
                        string value = (string)header.Value;
                        requestData.headers.Add(key, value);
                        if (key == "cookie")
                        {
                            string[] parts = value.Split(new char[] {'='});
                            if (parts[0] == "agni_sl_session_id" && parts.Length > 1)
                            {
                                string cookie = Uri.UnescapeDataString(parts[1]);
                                string[] crumbs = cookie.Split(new char[] {':'});
                                UUID owner;
                                if (crumbs.Length == 2 && UUID.TryParse(crumbs[0], out owner))
                                {
                                    if (crumbs[1].Length == 32)
                                    {
                                        Scene scene = requestData.scene;
                                        if (scene != null)
                                        {               
                                            SceneObjectPart host = scene.GetSceneObjectPart(requestData.hostID);
                                            if (host != null)
                                            {
                                                if (host.OwnerID == owner)
                                                    requestData.allowResponseType = true;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }

強制的に変更しているところはここ.

       public void HttpResponse(UUID request, int status, string body)
        {
            lock (m_RequestMap)
            {
                if (m_RequestMap.ContainsKey(request))
                {
                    UrlData urlData = m_RequestMap[request];
                    if (!urlData.requests[request].responseSent)
                    {
                        string responseBody = body;

                        // If we have no OpenID from built-in browser, disable this
                        if (!urlData.requests[request].allowResponseType)
                            urlData.requests[request].responseType = "text/plain";
In reply to Iseki Fumikazu

Re: osSetContentTypeの引数

by Iseki Fumikazu -

MasterPoppy さんのスクリプトについて,内部ビューアで接続すると,サーバに渡されるパラメータは以下の通りで,cookie は含まれていませんね(出だしがビューアだから当たりませか).

リクエストをする前に,何か1クッション入るのでは?

Singularity の場合

key = remote_port, value = 46800
key = accept-language, value = ja
key = user-agent, value = Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) (SecondLife/C64 Basic V2) Chrome/47.0.2526.80
key = x-forwarded-for, value = 172.22.1.79
key = remote_addr, value = 202.26.159.212
key = cache-control, value = max-age=259200
key = upgrade-insecure-requests, value = 1
key = accept-encoding, value = gzip, deflate

FireStorm の場合

key = remote_port, value = 51327
key = accept-language, value = ja
key = user-agent, value = Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) (SecondLife/4.7.9.50527 (Firestorm-Release; hrome/47.0.2526.80 Safari/537.36
key = remote_addr, value = 172.22.1.79
key = upgrade-insecure-requests, value = 1
key = accept-encoding, value = gzip, deflate
In reply to Iseki Fumikazu

Re: osSetContentTypeの引数

by MasterPoppy Amat -

isekiさん

検証ありがとうございます。
SecondLife Gridでは送信されていてJOGでは拾われていないCookie情報がある(?)
ということでしょうかね。
根本的にサーバプログラムが別物ならしょうがないですが...

OpenSIMの設定で件のCookie、またはえくすさんの言及されているカスタムHeader(?)を要求するような設定があったりしないでしょうか。

*某国出張中につき当方での詳しい検証が後日になります。
いろいろ検証いただいてるのに反応が鈍くて恐縮です。

In reply to MasterPoppy Amat

Re: osSetContentTypeの引数

by Iseki Fumikazu -

指定したContent Type を無効にしている部分で

// If we have no OpenID from built-in browser, disable this

なんてコメントもついていますから,このコードを外しますか?

In reply to Iseki Fumikazu

Re: osSetContentTypeの引数

by MasterPoppy Amat -

あっちこっちでテストしてるうちに普通にtext/htmlで返ってくるSIMがあるのを見つけました。
dejima, sandbox, sandbox2, sandbox3など(OpenSim 0.9.0.0 Dev 76a2d90 (Unix/Mono))

むしろ外部ブラウザで叩いてもHTMLになります。もしかして試しにいじっていただいたんでしょうか...?

▽ llSetContentType(id, CONTENT_TYPE_HTML);

llSetContentType(id, CONTENT_TYPE_HTML);

▽ osSetContentType(id, "text/html");

osSetContentType(id, "text/html");


▽ テストコード
https://www.jogrid.net/wi/mod/forum/discuss.php?d=996#p3738

In reply to MasterPoppy Amat

Re: osSetContentTypeの引数

by Iseki Fumikazu -

あっ.すみません.忘れていました.

本日の午前中のバージョンアップで 全SIMについて allowResponseType のチェックをしているコードを外しました.

何か問題がありましたら,コメントください.

 

In reply to Iseki Fumikazu

Re: osSetContentTypeの引数

by MasterPoppy Amat -

esekiさん

早速の御対応ありがとうございます。
おかげさまで目的のアプリが動くようになりました。
まだOSSL用にコードを整理しないといけないのですが、現状で一応実用レベルになったので明日の勉強会あたりでお披露目しようかとおもいます。

lsl-markdown for JOG

 

問題があるとすれば、今回対応頂いたUser-Agentチェック?を完全にはずしている状態だと、
滅多とないとは思いますがhttp-inのURLが第3者に漏れた場合に、JOG外からJOG内のhttp-inアプリを操作できるためセキュリティホールとなる可能性があります。

将来的にはSecondLife Grid同様にUserAgentによるチェックをかけて内蔵ブラウザでしかHTML表示しないようにすべきかと思います。
ご検討ください。

 

あとはFirestormでShared Mediaの起動がすごく遅いのどうかならないかなぁ

In reply to MasterPoppy Amat

Re: osSetContentTypeの引数

by Iseki Fumikazu -

User-Agent については陽には外していないのですが,確かに動きが変な気がしますので,今度チェックします.

Firestorm のShared Media についは,たぶんサーバ側の問題では無い気がします.
結局,HTML表示しているのは(私の理解では)ビューアなんですよね?

In reply to Iseki Fumikazu

Re: osSetContentTypeの引数

by MasterPoppy Amat -

http-inのURL(ttp://andromeda03.jogrid.net:9000/lslhttp/<hash>/形式)をプリムに貼り付けた共有メディアでは接続が遅くて、[内蔵ブラウザで開く]だとすぐに表示されるのでビューワ側の問題っぽいですね。もう少し調べてみます。

結局,HTMLを表示しているのは(たぶん)ビューア内蔵ブラウザのコンポーネントを使った、共有メディア(Media on Prim, Shared Media)です。

In reply to MasterPoppy Amat

Re: osSetContentTypeの引数

by Shinobar Martinek -

llSetContentTypeがどういうものなのか理解していないので、見当はずれかもしれませんが、参考になるかと思われることを書きます。

1. LSL ポータルによりますと、llSetContentType(key request_id, integer content_type);  とあって、content_type は数字

対して osSetContentType(LSL_key id, string type); とあります。

想像するに string type に "text/plain" や "text/html" の他にも "application/json" など任意の文字列を http リクエストの応答 Content-Type: に加えることができるのでしょう。(当初の開発動機がそうだったかもと想像)

2. OpenSim wiki の LSL Function Status の記述は古く、個々の関数がじっさいに動作するかどうかは、個々について実験してみないと分かりません。(Iseki さんによれば使えそうです。)

3. llSetContentTypeは text/plain と text/html をのみ指定できるだけなので(←間違い。日本語訳を見ていました。英語によれば application/json は 数字の 5)application/json を指定したいならば osSetContentType を使わねばならないのでしょう。その場合、当該SIMの設定がこの関数の実行を許可する設定になっていないとなりません。標準設定では土地所有者のみ使用可になっているはず。

In reply to Shinobar Martinek

Re: osSetContentTypeの引数

by MasterPoppy Amat -

OpenSim wiki の LSL Function Statusは更新されてないというのは盲点でした。
llSetContentTypeもosSetContentTypeも実装済みで
実際の挙動は試してみないとわからないということでごりごり手を動かしてみます。

In reply to MasterPoppy Amat

Re: osSetContentTypeの引数

by 堀田 海月 -

MasterPoppyさん、はじめまして(ωV_vω)ペコ

アカーシャさんから色々と聞いています^^
あたしも色々と試してうまく行っていないので気になってたところですが、テストのLSLをSLとJOG(Sandbox3)でテストして、HTTPヘッダー見てみました。

ちなみにSLですと、UserAgentをビューワのものにすれば、普通のブラウザからもアクセスできることは確認済みです。

 

<テストしたLSL>

string url;
key uid;
string web = "<!DOCTYPE html><html lang=\"ja\"><head><title>あほなテスト</title></head><body><div class=\"fixie\" style=\"width:500px;margin:5px auto 5px auto;padding:10px;background-color:#dddddd;border-radius:15px;border:1px solid #333333;\"><h1>タイトルらしい</h1><p>本文らしい</p><button onclick=\"alert('あほです')\">押してね</button></div><script type=\"text/javascript\" src=\"https://raw.github.com/ryhan/fixie/master/fixie_min.js\"></script></body></html>"; default { state_entry() { uid = llRequestURL(); } touch_start(integer total_number) { llSay(0, url); } changed(integer change) { if(change & CHANGED_REGION_START) { uid = llRequestURL(); } } http_request(key request_id, string method, string body) { llOwnerSay(llGetHTTPHeader(request_id, "x-script-url")); llOwnerSay(llGetHTTPHeader(request_id, "x-path-info")); llOwnerSay(llGetHTTPHeader(request_id, "x-query-string")); llOwnerSay(llGetHTTPHeader(request_id, "x-remote-ip")); llOwnerSay(llGetHTTPHeader(request_id, "user-agent")); if(request_id == uid) { if(method == URL_REQUEST_GRANTED) { url = body; llOwnerSay("url= " + url); } else if(method == URL_REQUEST_DENIED) { llSay(0, "エラーのため、使用できません。"); } } else { llSetContentType(request_id, CONTENT_TYPE_HTML);
//OpenSimの場合は、osSetContentType(request_id, "text/html");に置き換える。 llHTTPResponse(request_id, 200, web); } } }

 

<Second Lifeの場合(一部プライバシーに関わる部分は伏せ字にしています)>

9741: URL_REQUEST
http://sim10468.agni.lindenlab.com:12046/cap/5838a62e-f832-e771-ae74-4444557f53a2
Start Time: 2016-10-25 00:46:52.992 t=19593 [st= 0] +REQUEST_ALIVE [dt=454]
t=19594 [st= 1] DELEGATE_INFO [dt=0]
--> delegate_info = "NavigationResourceThrottle"
t=19594 [st= 1] URL_REQUEST_DELEGATE [dt=0]
t=19594 [st= 1] URL_REQUEST_START_JOB [dt=0]
--> load_flags = 37121 (MAIN_FRAME | MAYBE_USER_GESTURE | VALIDATE_CACHE | VERIFY_EV_CERT)
--> method = "GET"
--> priority = "HIGHEST"
--> url = "http://sim10468.agni.lindenlab.com:12046/cap/5838a62e-f832-e771-ae74-4444557f53a2"
t=19594 [st= 1] +URL_REQUEST_START_JOB [dt=447]
--> load_flags = 37121 (MAIN_FRAME | MAYBE_USER_GESTURE | VALIDATE_CACHE | VERIFY_EV_CERT)
--> method = "GET"
--> priority = "HIGHEST"
--> url = "http://sim10468.agni.lindenlab.com:12046/cap/5838a62e-f832-e771-ae74-4444557f53a2"
t=19597 [st= 4] +URL_REQUEST_DELEGATE [dt=4]
t=19597 [st= 4] DELEGATE_INFO [dt=4]
--> delegate_info = "拡張機能 User-Agent Switcher for Chrome"
t=19601 [st= 8] CHROME_EXTENSION_MODIFIED_HEADERS
--> deleted_headers = []
--> extension_id = "djflhoibgkdhkhhcedjiklpkjnoahfmg"
--> modified_headers = ["User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) (SecondLife/4.7.9.50527 (Firestorm-Release; firestorm skin)) Chrome/47.0.2526.80 Safari/537.36"]
t=19601 [st= 8] -URL_REQUEST_DELEGATE
t=19602 [st= 9] HTTP_CACHE_GET_BACKEND [dt=0]
t=19602 [st= 9] HTTP_CACHE_OPEN_ENTRY [dt=0]
t=19602 [st= 9] HTTP_CACHE_ADD_TO_ENTRY [dt=0]
t=19602 [st= 9] HTTP_CACHE_READ_INFO [dt=0]
t=19602 [st= 9] URL_REQUEST_DELEGATE [dt=0]
t=19602 [st= 9] +HTTP_STREAM_REQUEST [dt=259]
t=19602 [st= 9] HTTP_STREAM_REQUEST_STARTED_JOB
--> source_dependency = 9744 (HTTP_STREAM_JOB)
t=19861 [st=268] HTTP_STREAM_REQUEST_BOUND_TO_JOB
--> source_dependency = 9744 (HTTP_STREAM_JOB)
t=19861 [st=268] -HTTP_STREAM_REQUEST
t=19861 [st=268] +HTTP_TRANSACTION_SEND_REQUEST [dt=1]
t=19861 [st=268] HTTP_TRANSACTION_SEND_REQUEST_HEADERS
--> GET /cap/5838a62e-f832-e771-ae74-4444557f53a2 HTTP/1.1
Host: sim10468.agni.lindenlab.com:12046
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) (SecondLife/4.7.9.50527 (Firestorm-Release; firestorm skin)) Chrome/47.0.2526.80 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
DNT: 1
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ja,en-US;q=0.8,en;q=0.6
t=19862 [st=269] -HTTP_TRANSACTION_SEND_REQUEST
t=19862 [st=269] +HTTP_TRANSACTION_READ_HEADERS [dt=178]
t=19862 [st=269] HTTP_STREAM_PARSER_READ_HEADERS [dt=178]
t=20040 [st=447] HTTP_TRANSACTION_READ_RESPONSE_HEADERS
--> HTTP/1.1 200 OK
Date: Mon, 24 Oct 2016 15:46:56 GMT
Server: Second Life LSL/Second Life Server 16.10.07.320397 (http://secondlife.com)
Content-Length: 464
Cache-Control: no-cache, max-age=0
Content-Type: text/html; charset=utf-8
Pragma: no-cache
X-SecondLife-Local-Position: (xxx.xxxxxx, yyy.yyyyyy, zzzz.zzzzzz)
X-SecondLife-Local-Rotation: (0.000000, 0.000000, 0.000000, 1.000000)
X-SecondLife-Local-Velocity: (0.000000, 0.000000, 0.000000)
X-SecondLife-Object-Key: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
X-SecondLife-Object-Name: Object
X-SecondLife-Owner-Key: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
X-SecondLife-Owner-Name: Exwood Porta
X-SecondLife-Region: xxxxxx (xxxxxx, xxxxxx)
X-SecondLife-Shard: Production
Connection: close
t=20040 [st=447] -HTTP_TRANSACTION_READ_HEADERS
t=20040 [st=447] HTTP_CACHE_WRITE_INFO [dt=0]
t=20040 [st=447] HTTP_CACHE_WRITE_DATA [dt=0]
t=20040 [st=447] HTTP_CACHE_WRITE_INFO [dt=0]
t=20040 [st=447] URL_REQUEST_DELEGATE [dt=1]
t=20041 [st=448] -URL_REQUEST_START_JOB
t=20041 [st=448] +URL_REQUEST_DELEGATE [dt=0]
t=20041 [st=448] DELEGATE_INFO [dt=0]
--> delegate_info = "NavigationResourceThrottle"
t=20041 [st=448] -URL_REQUEST_DELEGATE
t=20041 [st=448] HTTP_TRANSACTION_READ_BODY [dt=0]
t=20041 [st=448] HTTP_CACHE_WRITE_DATA [dt=1]
t=20042 [st=449] URL_REQUEST_JOB_BYTES_READ
--> byte_count = 464
t=20043 [st=450] HTTP_TRANSACTION_READ_BODY [dt=1]
t=20044 [st=451] HTTP_CACHE_WRITE_DATA [dt=0]
t=20047 [st=454] -REQUEST_ALIVE

 

<JOGの場合>

9849: URL_REQUEST
http://andromeda03.jogrid.net:9000/lslhttp/c6081f5f-b33a-45d3-a38e-12a5c05a258e/
Start Time: 2016-10-25 00:53:48.474 t=6442 [st= 0] +REQUEST_ALIVE [dt=370]
t=6442 [st= 0] DELEGATE_INFO [dt=1]
--> delegate_info = "NavigationResourceThrottle"
t=6443 [st= 1] URL_REQUEST_DELEGATE [dt=0]
t=6443 [st= 1] URL_REQUEST_START_JOB [dt=0]
--> load_flags = 37121 (MAIN_FRAME | MAYBE_USER_GESTURE | VALIDATE_CACHE | VERIFY_EV_CERT)
--> method = "GET"
--> priority = "HIGHEST"
--> url = "http://andromeda03.jogrid.net:9000/lslhttp/c6081f5f-b33a-45d3-a38e-12a5c05a258e/"
t=6443 [st= 1] +URL_REQUEST_START_JOB [dt=86]
--> load_flags = 37121 (MAIN_FRAME | MAYBE_USER_GESTURE | VALIDATE_CACHE | VERIFY_EV_CERT)
--> method = "GET"
--> priority = "HIGHEST"
--> url = "http://andromeda03.jogrid.net:9000/lslhttp/c6081f5f-b33a-45d3-a38e-12a5c05a258e/"
t=6443 [st= 1] +URL_REQUEST_DELEGATE [dt=5]
t=6444 [st= 2] DELEGATE_INFO [dt=4]
--> delegate_info = "拡張機能 User-Agent Switcher for Chrome"
t=6448 [st= 6] CHROME_EXTENSION_MODIFIED_HEADERS
--> deleted_headers = []
--> extension_id = "djflhoibgkdhkhhcedjiklpkjnoahfmg"
--> modified_headers = ["User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) (SecondLife/4.7.9.50527 (Firestorm-Release; firestorm skin)) Chrome/47.0.2526.80 Safari/537.36"]
t=6448 [st= 6] -URL_REQUEST_DELEGATE
t=6448 [st= 6] HTTP_CACHE_GET_BACKEND [dt=0]
t=6448 [st= 6] HTTP_CACHE_OPEN_ENTRY [dt=0]
t=6448 [st= 6] HTTP_CACHE_ADD_TO_ENTRY [dt=0]
t=6448 [st= 6] HTTP_CACHE_READ_INFO [dt=1]
t=6449 [st= 7] URL_REQUEST_DELEGATE [dt=0]
t=6449 [st= 7] +HTTP_STREAM_REQUEST [dt=0]
t=6449 [st= 7] HTTP_STREAM_REQUEST_STARTED_JOB
--> source_dependency = 9852 (HTTP_STREAM_JOB)
t=6449 [st= 7] HTTP_STREAM_REQUEST_BOUND_TO_JOB
--> source_dependency = 9852 (HTTP_STREAM_JOB)
t=6449 [st= 7] -HTTP_STREAM_REQUEST
t=6449 [st= 7] +HTTP_TRANSACTION_SEND_REQUEST [dt=0]
t=6449 [st= 7] HTTP_TRANSACTION_SEND_REQUEST_HEADERS
--> GET /lslhttp/c6081f5f-b33a-45d3-a38e-12a5c05a258e/ HTTP/1.1
Host: andromeda03.jogrid.net:9000
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) (SecondLife/4.7.9.50527 (Firestorm-Release; firestorm skin)) Chrome/47.0.2526.80 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
DNT: 1
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ja,en-US;q=0.8,en;q=0.6
t=6449 [st= 7] -HTTP_TRANSACTION_SEND_REQUEST
t=6449 [st= 7] +HTTP_TRANSACTION_READ_HEADERS [dt=79]
t=6449 [st= 7] HTTP_STREAM_PARSER_READ_HEADERS [dt=79]
t=6528 [st= 86] HTTP_TRANSACTION_READ_RESPONSE_HEADERS
--> HTTP/1.1 200 OK
Content-Type: text/plain
Date: Tue, 25 Oct 2016 00:53:51 GMT
Content-Length: 464
Server: Tiny WebServer
Connection: close
t=6528 [st= 86] -HTTP_TRANSACTION_READ_HEADERS
t=6528 [st= 86] HTTP_CACHE_WRITE_INFO [dt=0]
t=6528 [st= 86] HTTP_CACHE_WRITE_DATA [dt=1]
t=6529 [st= 87] HTTP_CACHE_WRITE_INFO [dt=0]
t=6529 [st= 87] URL_REQUEST_DELEGATE [dt=0]
t=6529 [st= 87] -URL_REQUEST_START_JOB
t=6529 [st= 87] +URL_REQUEST_DELEGATE [dt=2]
t=6530 [st= 88] DELEGATE_INFO [dt=1]
--> delegate_info = "NavigationResourceThrottle"
t=6531 [st= 89] -URL_REQUEST_DELEGATE
t=6531 [st= 89] HTTP_TRANSACTION_READ_BODY [dt=278]
t=6809 [st=367] HTTP_CACHE_WRITE_DATA [dt=0]
t=6809 [st=367] URL_REQUEST_JOB_BYTES_READ
--> byte_count = 464
t=6810 [st=368] HTTP_TRANSACTION_READ_BODY [dt=0]
t=6810 [st=368] HTTP_CACHE_WRITE_DATA [dt=0]
t=6812 [st=370] -REQUEST_ALIVE

 

SLだと、LSLから外部のサーバーにアクセスした場合にヘッダに付加情報( X-SecondLife-Owner-Key等)を乗せてくるので、多分内部からプリムのサーバーにアクセスした場合にも同様に付加情報を流してるんじゃないかと推測されます。見たところOpenSimの場合にはそれが見当たりませんね。

In reply to 堀田 海月

Re: osSetContentTypeの引数

by 堀田 海月 -

あ、ちなみにさっきのLSLをSecond Lifeで実行した結果は以下の感じになります。
(画像はUserAgentをFirestormのものにした、PCブラウザで取り込んでます。)

 

URLにアクセス。

osSetContentType() LSL実行画面1

ボタンをおした時(FSのメディアブラウザにはポップアップがないようなので動きませんでした)

osSetContentType() LSL実行画面2

In reply to 堀田 海月

Re: osSetContentTypeの引数

by 堀田 海月 -

あとこのスクリ昔作ったのをそのまま持ってきてたので一部変な所ありました。

https://raw.github.com/ryhan/fixie/master/fixie_min.jsがリンク切れしてますね(^_^;)
これは、各タグ内に適当な文章を勝手に挿入してくれるJavascriptでした。
Webデザインの確認に使えるもので、LSLのテストのWebページが寂しいので入れてましたが、リンク切れなのでもう使えませんね(^_^;)

In reply to 堀田 海月

Re: osSetContentTypeの引数

by MasterPoppy Amat -

えくすさん

検証ありがとうございます。
先のisekiさんの検証にもあるようにサーバのコード上はCookieからのID情報でcontent-typeを割り振っているようだということもあり、X-SecondLife-xのHeader情報が足りない件が直接の原因か定かではありませんが、どうやらJOGに接続したときとSecondLife Gridに接続したときでは挙動が違う原因がみえてきたようですね。

某国出張中につき帰ってからになりますが、こちらでもUserAgentのあたりから同じ切り口で検証してみます。

In reply to MasterPoppy Amat

Re: osSetContentTypeの引数

by fuugetu flowerbird -

JOG公式サイト内プロジェクトにJOG Markdownというコーナーを設置していただきました。
今後のMarkdown関連の情報共有の場としてご活用ください。

 サイトURL:
   https://www.jogrid.net/wi/course/view.php?id=32

 

ところで、この一連のスレッドが新サイトの方に移動できないかなぁ。。。
そういうことをしていいのかわからないですけど。。ボソ