Django REST Framework: クエリパラメータに+を使いたい.

投稿者: Anonymous Django REST Frameworkにおいて,以下のAPIを構築しました. views.py class GetAPIView(views.APIView): def get(self, request): return Response(request.GET) urls.py urlpatterns = [ re_path(r’^test.*’, views.GetAPIView.as_view()), ] ここで以下のリクエストを送りたいです. curl ‘http://localhost:8000/test?100+10’ 実行結果 想定したレスポンス { "100+10": "" } 実際のレスポンス { "100 10": "" } +を扱うためには,どうすればよいでしょうか? 解決 URLにおいて+は特別な意味(スペースとして扱われます)を持ちます.+など,特別な意味を持つ文字を元の文字のままサーバーに伝えたい場合はパーセントエンコーディングをする必要があります. たとえば+は%2Bに置換されるので,?100+10は?100%2B10のようになります. RFC 3986で定義されているこれは多くの言語で標準で実装されていることがあり,たとえばPythonではurllib.parseで利用できます.(つまりはdjangoでは内部的にurllib.parse.unquote_plusに相当することをやっているとも考えられます) curlでは-Gと–data-urlencodeを併用することでURLエンコードをおこなったGETクエリが付与できるようです. https://unix.stackexchange.com/a/86737 回答者: Anonymous

WebAPIの実装方法

投稿者: Anonymous こんにちは Windows Server側でASP.Netで簡単なWebAPIを実装し、クライアント側(Cordova)でJavaScriptを使用してリクエストを投げようとしています。 WebAPIの実装はでき、ブラウザからhttp://IPアドレス/api/HealthValuesを実行すると正常に実行でき、結果が返ってきますが、Cordova内のJavaScriptから実行すると以下のようにエラーとなってしまいます。 XMLHttpRequest cannot load http://IPアドレス/api/HealthValues. No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://localhost:8100‘ is therefore not allowed access. いろいろ調べてみましたが、クロスドメインとなりブラウザのセキュリティ的に問題のある実装というような内容ばかりで、どのように解決するのが良いのかわかりません。 やりたいことはTwitterAPIのようにAPIを叩くとJSONでデータが返ってくるようなものをクライアントサイドから使いたいです。 手探りで作成しているため実装方法自体が間違っているかどうかの判断ができていません。 どなたか経験ある方にアドバイスいただければと思います。 参考までにクライアントサイドのコードを記載します。 return $http.get(‘http://IPアドレス/api/HealthValues’, {params: params}).then(function(response) { return response.data; }); 環境を追記します。 ・Cordovaバージョン: 6.0.0 ・対象とするplatform: 現在はbrowserで検証していました。最終的にはios, androidになります。 ・実行環境: クライアント:Mac OS X ElCapitan、サーバー:AWS EC2 解決 質問する際は環境を詳細に記載すると良いかと思います。 ・Cordovaバージョン ・対象とするplatform…(Continue Reading)

検索補完を実現したいです。JavaScriptのxhrで一つ一つの要素に処理を行うものを考えています。

投稿者: Anonymous JavaScriptのxhrで取得したものから属性値を抽出したいのですが 方法がよくわかりません。 <form name=”f”> <input type=”text” name=”t” onkeyup=”s()”> </form> <script async defer> function s() { v = document.f.t.value; var x = new XMLHttpRequest(); x.addEventListener(‘load’,function(ev) { document.getElementById(‘r’).textContent = x.response; }); x.open(‘GET’,’/complete?q=’ + v); x.send(); } </script> <p id=”r”></p> というソースコードでテキストフォームに例えば「あ」と入力すると <?xml version=”1.0″?> <toplevel> <CompleteSuggestion> <suggestion data=”アマゾン”/> </CompleteSuggestion> <CompleteSuggestion> <suggestion data=”明日の天気”/> </CompleteSuggestion> <CompleteSuggestion> <suggestion data=”アニメ”/> </CompleteSuggestion>…(Continue Reading)

ファイル転送におけるHTTPとSFTP

投稿者: user8572 サーバAにあるファイルをサーバBからとってきたいとします。 私はこのやり方として、HTTPでとってくる方法とSFTPでとってくる方法を知っているのですが、二つの違い(つまり、どんな時にはどちらを使う方がよいのか)を簡単に教えていただけませんか? 追記: ど‌​ちらを選択したら良いか迷う状況というのは‌​例えばどういう状況を想定していますか?質‌​問を編集して追記してください – suzukis →サーバAにエクセルファイルやらPDFファイルやらが置いてあるとします。これをHTTPでダウンロードできるようにすることもできるし、保管してあるディレクトリまで行ってSFTPでとってくることもできます。 解決 大雑把に言うと HTTPは不特定多数にファイルに限らないコンテンツを公開するためのもの SFTPはサーバにアクセス権がある特定ユーザーが、その権限の範囲でファイルのアップロードダウンロードをするもの です。 サーバAにエクセルファイルやらPDFファイルやらが置いてあるとします。これをHTTPでダウンロードできるようにすることもできるし、保管してあるディレクトリまで行ってSFTPでとってくることもできます。 ダウンロードしたいのが自分だけで、そのサーバにSFTPでアクセス可能ならファイルをわざわざHTTPでアクセス可能にする意味はありません。それが公開してはまずいファイルであれば、無意味どころか危険です。 自分だけでなく不特定多数に公開する必要があるなら、SFTPでは無理なのでHTTPで公開する必要があります。 HTTPで公開したが、SFTPでもアクセス権があり、どっちでもダウンロード可能というのであればそれはどちらでも好きにしたらよいことです。「不特定多数のユーザーの一人」なのか「特定ユーザー」なのかどちらの立場を選択するかだけのことです。 回答者: Anonymous

1秒間1回のリクエスト制限がある外部のWeb APIを利用するWebアプリケーションのAPIリクエスト超過対策

投稿者: Anonymous 一般公開されている外部のWeb APIを利用したWebアプリケーションを開発します。 Webアプリケーションにて利用者に入力されたキーワードをそのWeb APIに渡すと、Web APIからキーワードに関連したデータが返却されます。 そのWeb APIは1秒間に1回のリクエスト制限があります。 したがって複数の利用者からの同時大量アクセスがあった場合、リクエスト制限が発生します。 そこで、Web APIへのリクエストを1秒間1回に収めるために、Webアプリケーションへのアクセスを順番待ちで捌くような制御をする必要があると考えています。 下記のような対策方法案があります。 DBに順番待ちテーブル(窓口の整理券のような役割)を設ける クライアントからリクエストを受けたら順番待ちテーブルに新規レコードを追加 順番待ちテーブルのレコード数から待ち時間を決定(例:自分より前に3人並んでいたら待ち時間は3秒間) サーバー側では待ち時間分スリープ処理を実施した後にWeb APIへリクエストを実施し、クライアントへレスポンスを返す 順番待ちテーブルから対象レコードを削除 この対策方法(設計)は適切でしょうか? APIリクエスト超過に対して他に良い対策が思いつかず、この対策方法・設計で進めていいのか悩んでいます。 よろしくお願いします。 ※システム構成 ロードバランサにWebサーバ複数台(Nginx)をぶら下げます。 データベースサーバ1台(MySQL) PHP ※その他 Web APIへのリクエストを節約するためWebサーバではキャッシュを利用します。 定期バッチ処理などでWeb APIからデータを取得しておくことで、Web APIへのリクエスト数を抑える方法は現実的でないため考えていません。 解決 うえでコメントした内容を図にしてみました。 回答者: Anonymous

Python URLのリダイレクト先のURLを取得する。

投稿者: Anonymous このURLをブラウザで入力すると http://wikipedia.simpleapi.net/ja/48503/ このページへリダイレクトします。 https://ja.wikipedia.org/wiki/コロッケ このような場合に、リダイレクト前のURLを引数にしてリダイレクト先のURLを取得する 方法はないのでしょうか。 解決 requestsモジュールを使用してできました。 import requests print(requests.get(“http://wikipedia.simpleapi.net/ja/48503/”).url) > https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%AD%E3%83%83%E3%82%B1 requestsではHTTP 301を自動的に解消するためこの方法が使えます。 回答者: Anonymous

ブラウザに対するウェブページのドメインの偽装について

投稿者: Anonymous 以下のような二例が可能かどうか質問させてください。 ユーザAがウェブページindex.htmlをサイトhttps://example.comに置きます。 不正なユーザBがindex.htmlをC#などで開発したウェブブラウザで表示し、htmlの内容をライブ的に改変します。ここまでは可能だと思います。以下のリンクで確認ください。 https://social.msdn.microsoft.com/Forums/windowsapps/ja-JP/0e75cb00-2a9c-4650-a4ae-6090300d8aaa/webbrowserhtml?forum=csharpgeneralja 次に不正なユーザBはindex.htmlのクリックボタンを押して不正なGetリクエストをhttps://example.comに送信します。 質問1 この際にMicrosoftのC#のブラウザは、ページが改変されているにも拘わらず、index.htmlのオリジンをhttps://example.comとして扱うのでしょうか? 質問2 そもそも不正なユーザBはGet送信にWebブラウザを使わずとも、index.htmlの内容さえ知れば、後は自作した非ブラウザの通信プログラムで、オリジンを偽装してhttps://example.comに不正なGetリクエストを察知されずに送信できるのでしょうか? 尚、一般にGetリクエス送信にページのオリジンの情報を含めることでブラウザやサイト側がセキュリティをかけていると言うのは私の推測です。検索したのですが結果が得られませんでした。 以上よろしくお願いします。 解決 WebブラウザーのHTTP(S)通信では直前に表示していたページやリンクを含むページののURLをRefererヘッダーに含めて送信します。 この際にmicrosoftのC#のブラウザは、ページが改変されているにも拘わらず、index.htmlのオリジンをhttps://example.comとして扱うのでしょうか? WebBrowserで使用されているIEコンポーネントでの動作は分かりませんが、一般的にはユーザーがHTMLを改変したとしても元のURLをリファラとして送信するものと思います。 そもそも不正なBはGet送信にWebブラウザを使わずとも、index.htmlの内容さえ知れば、後は自作した非ブラウザの通信プログラムで、オリジンを偽装してhttps://example.comに不正なGetリクエストを察知されずに送信できるのでしょうか? HTTP通信の内容は単なるテキストですので、Refererやブラウザーの種別を表すUser-Agentもふくめてすべて自己申告です。ですのでWebブラウザーによるリクエストと、その他のプログラム(HttpWebRequestやFiddlerなど)が偽造したリクエストを見分けることは本質的にできません。ですが一般的にWebブラウザー以外のプログラムはJavaScriptの実装が弱いため動的な処理を含めることで排除できる場合があります。具体的にはたとえばWebブラウザー上の操作ログを暗号化してリクエストに含め、サーバー側で検証するサービスなどが提供されています。 回答者: Anonymous

HTTP 1.1でChunked transfer encodingを拒否する方法

投稿者: Anonymous とある組み込みマイコン向けのHTTPライブラリで難儀しています。 ライブラリにgetという関数があり、これを実行すると指定したURLにHTTP 1.1でGETを発行して、応答の本文を文字列として返してくるのですが、 サーバーがChunked transfer encodingで応答すると(即ち、応答ヘッダに Transfer-Encoding: Chunked が含まれた状態)、これをデコードせずに生の文字列を返してしまうのです。 応答ヘッダを取得することはできないので、プログラム側でチャンクをデコードすることはできません。(チャンク化されているかどうかを一意に判別できないため) また、TCPやHTTPを含めた一切の通信処理は、完全に独立したMCU内で処理されるため、自分でsocketを使ってHTTPを実装することもできません。「 但し、get関数の引数として、要求ヘッダに1行だけ任意のヘッダを追加できる機能があるので、これを利用して、サーバーに、チャンク化しないように要求できないかと考えているのですが・・・ 何か方法はないでしょうか? 解決 OOPerさんのコメントにあるようにHTTP/1.1においてTransfer-Encoding: chunkedへの対応は必須ですので、未対応ということは不正なクライアントであるとしか言いようがありません。 補足をしておくと、HTTP/1.0ではコンテンツ長が不明な場合、コネクション切断をもってコンテンツの終端を表していましたが、これでは異常終了と区別できません。HTTP/1.1でchunkedが導入され必須となっているのもコンテンツ長が不明なコンテンツを正確に扱うためです。 get関数の引数として、要求ヘッダに1行だけ任意のヘッダを追加できる機能があるので、これを利用して、サーバーに、チャンク化しないように要求できないか TEヘッダーを用いることでクライアント側が解釈可能なTransfer-Encodingを事前通知することができます。この機能が正攻法ではありますが、既に説明しているようにchunkedは必須なためこれを拒否するようなリクエストは認められていません。 期待通りの動作をするか確実ではありませんが、WebサーバーApacheのデフォルト設定にはおかしな挙動をするクライアントに対してプロトコルの動作を変更するというものがあります。設定内容としては BrowserMatch “MSIE 4.0b2;” nokeepalive downgrade-1.0 force-response-1.0 BrowserMatch “RealPlayer 4.0” force-response-1.0 BrowserMatch “Java/1.0” force-response-1.0 BrowserMatch “JDK/1.0” force-response-1.0 等があります。これを逆手にとって、User-Agent: MSIE 4.0b2;等を送信することで、Webサーバーに対してHTTP/1.0で応答するように求めることができるかもしれません。HTTP/1.0であればchunkedは存在しませんのでTransfer-Encoding: chunkedが返されることはないはずです。 (WebサーバーがApacheとは限りませんが、おかしな挙動をするクライアント対策が施されていることを期待してということです。) 回答者: Anonymous

Vagrantでホストからゲストに通信が出来ない。

投稿者: Anonymous 使用しているソフトバージョン Vagrant 2.2.4 VirtualBox バージョン 5.2.28 r130011 (Qt5.6.3) VBoxControl バージョン 5.2.28r130011 ホストos mac High Sierra 10.13.5 ゲストos Ubuntu14.04 vagrantfile # -*- mode: ruby -*- # vi: set ft=ruby : # All Vagrant configuration is done below. The “2” in Vagrant.configure # configures the configuration version (we support older styles for # backwards compatibility). Please…(Continue Reading)

¿Cómo muestro un alert en función de lo que HttpResponse me devuelva en Django?

publicado por: Anonymous En mi proyecto estoy haciendo un formulario de contacto y quiero que al enviarlo se reciba una alerta confirmando el envío. Mi código es el siguiente: if ‘contactButton’ in request.POST: if contact_name and contact_email and contact_subject and contact_message: try: send_mail(contact_subject, contact_name+” ha escrito desde el formulario de contacto.nEmail: “+contact_email+”nAsunto: “+contact_subject+”nMensaje: “+contact_message, contact_email,[mi_mail],…(Continue Reading)

¿Como construir una URL relativa al puerto pero el mismo hostname?

publicado por: Anonymous He hecho una aplicación front con angularjs y lo arranco con Grunt. Por otro lado tengo la parte Back que lo levanto con un Tomcat v8.5 Server. Para hacer las llamadas a back utilizo $http de AngularJS utilizando las rutas que me han proporcionado Back, pero me da siempre el error 404…(Continue Reading)

C++でOpenSSLで非同期通信(ノンブロッキング)を行う方法

投稿者: Anonymous SSL_writeやSSL_readをノンブロッキングで処理したいです。(目的が達成できればBIOでもなんでも可) スレッドではなく、select()のような関数を使って通知を受けたいと考えています。 具体的な方法を教えていただけると助かります。 解決 C++だと勝手が違うかもしれませんが、Cなら普通に SSL_set_fd() に渡すファイルディスクリプタを、 ioctl() か fcntl() で ノンブロッキングに設定するだけです。 // fd = accept(soc, null, null); int opt = 1; ioctl(fd, FIONBIO, &opt); // SSL_set_fd(ssl, fd); // SSL_accept(ssl); 回答者: Anonymous

AngularJS request header field Content-Type is not allowed by Access-Control-Allow-Headers

publicado por: Anonymous Eempezando a utilizar Angular JS y necesito realizar una petición post a un servidor. La petición la estoy realizando de la siguiente manera: var Informacion= JSON.parse(‘{“username”:”–“,”password”:”–“}’) $http.post(‘http://–:8080/taller-bd-11/usuarios/login’, Informacion, { headers: { ‘Content-Type’: ‘application/json’ } }) .success(function(data, status, headers, config) { console.log(data); }) .error(function(data, status, headers, config) { }) El problema es que…(Continue Reading)

Vue.jsでaxiosを使い.envファイルにアクセストークンを置いてもブラウザのdevtoolからトークンがばれる

投稿者: Anonymous Vue.jsでhttp通信を行うために axiosを使い、使用するアクセストークンは.envファイルに置いているのですが ブラウザのdevtoolからトークンがばれるのはどうしようもないのでしょうか? 暗号化などを行う方法がありますか? 解決 Vue.jsをブラウザ上で動作させる場合、axiosでHTTPリクエストを行うのもブラウザです。そのため、必然的にブラウザがアクセストークンを知ることになるため、質問者さんのおっしゃる通り、どうしようもないです。 アクセストークンをブラウザ(クライアント側)に知られてはいけない場合、トークンを知っているAPIサーバーを用意し、クライアント(Vue.js)からはそのAPIサーバーに対してリクエストを発行、アクセストークンを用いた実際のリクエストはAPIサーバーが行うという方法をとることになります。 回答者: Anonymous

LANカード2枚差し時に、同一IPアドレスのサーバーと通信する方法に関して

投稿者: Anonymous こんにちわ! windows環境で、.NetのHttpClient 、Socket で、 サーバーと通信する際に、 送信元の自分のIPアドレスを指定したいんですが、 どうしたらよいでしょうか? どういう状況かといいますと、 PCには、2枚 LANカードが刺さっており、 それぞれ別のネットワーク1、2につながっています。 サーバーA、サーバーB のIPアドレスはそれぞれ、 同一で、固定で変更することができません。 ■ネットワーク図 ○サーバーA(192.168.1.2) |※ネットワーク1 LANカードA(192.168.1.5) ○PC LANカードB(192.168.1.6) |※ネットワーク2 ○サーバーB(192.168.1.2) このとき、ネットワーク1,2のサーバーA,Bとそれぞれ通信をおこないたい考えです。 単純な相手先のIPアドレス指定では、 どちらか一方のサーバーとした通信ができません。 方法として、送信するLANカードを指定することができればよいみたいで、 送信したいネットワークにつながっている自分のLANカードのIPアドレスを指定すると、 そのLANカードから送信することは PINGで、送信元IPアドレス指定でできることがわかりました。 ping -s 192.168.1.5 192.168.1.2 だと、サーバーA 、 ping -s 192.168.1.6 192.168.1.2 では、サーバーBに送信することができていることがわかっています。 すいませんが、よろしくおねがいします。 解決 HttpClientクラスでは制御方法が提供されていません。SocketクラスであればBind()メソッドで制御できます。 回答者: Anonymous

¿Cómo hago un script en bash para utilizar el comando telnet en forma recursiva?

publicado por: Anonymous Quiero hacer un script en bash (un bucle sencillo) para probar un servidor en c que hice en linux (y se ejecuta localmente) y tengo un problema para hacer el “GET” de la petición HTTP. Lo que hice fue lo siguiente: #!/bin/bash for i in `seq 1 10`; do telnet 127.0.0.1 8000…(Continue Reading)

HTTPのレスポンスは何バイト以上のものから圧縮した方が効率的か?

投稿者: Anonymous 表題の通りです。 HTTPサーバーでレスポンスを返す際にコンテンツを圧縮することができます。 ですが、圧縮処理自体がCPUと時間を使うため、軽いコンテンツであれば圧縮しなくても良いのではないかと考えています。 このような計測、実験を行ったデータはどこかのサイトにありますでしょうか? また、どなかた知見をお持ちでしょうか? よろしくお願いします。 解決 レスポンスの内容はPHPなどで動的に作成されたものでしょうか。静的でしたらファイル編集後に一度だけでいい(圧縮した結果がサーバーによりキャッシュされる)ので処理量は増えないはずです。 個人的な意見ですが、レスポンスがテキストなら(httpファイルならなおさら)必ず法則性があるので、以下のような場合を除き動的でも圧縮したほうがいいと思います。 サーバーにものすごく余裕が無い レスポンスの遅延を極力少なくしたい(サイズが極小なのが前提) 回答者: Anonymous

java.net.HttpURLConnectionを利用してPATCHリクエスト

投稿者: Anonymous 表題の通りですが、java.net.HttpURLConnectionを利用してPATCHリクエストを投げる方法はあるでしょうか。 JavaからPATCHリクエストを送るにはApache HttpClientを使うのが正攻法なのかなとは思うのですが、依存するライブラリを極力少なくしたい思いがありまして・・・。 リフレクションを使ってHttpURLConnection.methodの書き換えは試してみましたが、どうやら実行時にGETに置き換えられているような様子です。 解決法またはApache HttpClient以外にも良いライブラリをご存知の方いらっしゃいましたら、ご教示いただければ幸いです。 解決 サーバ依存になってしまいますが、 X-Http-Method-Override ヘッダが使えるかも知れません。 サーバ側にて、HTTP メソッドが、ヘッダ指定のメソッドにより上書きされるというものです。 Restful サービスの提供サーバでは、 ファイアウォールで PUT, DELETE が弾かれる環境を考慮しこのヘッダを使用できるようにしているところがあるようです。 Google Data API, Updating Entry Github, expressjs/method-override Django tastypie, Using PUT/DELETE/PATCH In Unsupported Places Django REST framework, HTTP header based method overriding DoPatch.java : import java.io.*; import java.net.*; public class DoPatch { public static void…(Continue Reading)

urlでギリシア文字を指定可能ですか? 例えば「index-α.html」「index-β.html」など

投稿者: Anonymous urlでギリシア文字を指定可能ですか? ・仕様は、RFC 3986 ? アルファベット小文字とは、ラテン小文字のこと? ・ギリシア文字は含まれない? リンク先に下記記述があるのですが、これはエンコード前の話ですか? ・それともurlだからエンコードは関係ない? ・2003年にはアラビア語やキリル文字、ギリシア文字、そして漢字が使えるようになった 解決 URLとURI(RFC 3986)は別物です。ただURLはURIの一種(subset)ですので、その仕様に従います(RFC 3986 §1.1.3)。 URIで使える文字はreservedとunreservedに分けられ、それらは以下のように定義されていて、reservedは文字列の区切りなどとして使われることが想定されています(RFC 3986 §2.2-3)。 reserved = gen-delims / sub-delims gen-delims = “:” / “/” / “?” / “#” / “[” / “]” / “@” sub-delims = “!” / “$” / “&” / “‘” / “(” / “)” / “*” /…(Continue Reading)

PythonのHTTP通信リダイレクトについて

投稿者: Anonymous Go言語のこのコードと同じことをPythonで書きたいです PythonだとURLしか渡せないのでしょうか? 分かる方、どのように書けばいいのか教えてください! http.Redirect(w, r, “/todos”, 303) 解決 flaskなら redirect(‘/todos’, code=303)でいいと思いますよ。 from flask import Flask, make_response, redirect, url_for app = Flask(__name__) @app.route(‘/’) def index(): return redirect(‘/foo’, code=303) @app.route(‘/foo’) def foo(): response = make_response(‘redirected’) response.headers[‘content-type’] = ‘text/plain’ return response if __name__ == ‘__main__’: app.run(port=8080) これを動かしてhttp://localhost:8080/にアクセスするとリダイレクトされます。 あるいはredirect(url_for(‘foo’), code=303)もありです。この例だとfoo関数がコールされるようなurlを組み立てろ、という指示になります。 というか、GoLangの http.Redirect(w, r, “/todos”, 303)だって、ここで指定している “/todos”はURLだと思うんですが。 HTTPのボディ部分やヘッダー部分に‌​なにかを埋め込んだり、そういったカスタマ‌​イズは難しいでしょうか…(Continue Reading)

Con que librería y como puedo hacer una petición HTTP en C++

publicado por: Anonymous ¿Quisiera saber como puedo hacer una petición HTTP en C++? solución No puedo hacer un comentario rápido porque no tengo suficiente reputación, pero esta libreria es la mejor para ello. Un ejemplo aqui: #include <iostream> #include <cpprest/http_client.h> using namespace web::http; using namespace web::http::client; int main(int argc, char** argv) { http_client client(“http://httpbin.org/”); http_response…(Continue Reading)

Como enviar valores por GET aparte de los del formulario?

publicado por: Anonymous Tengo un formulario para enviar datos por GET y quiero enviar un dato adicional anexándolo a la URL, el codigo es: <form action=”/Libro?accion=salvar” method=”get”> <label for=”titulo”>Titulo</label> <br> <input type=”text” id=”titulo” name=”titulo”> <br> <br> <label for=”categoria”>Categoria</label> <br> <input type=”text” id=”categoria” name=”categoria”> <br> <input type=”submit” value=”Guardar cambios”> </form> Cuando le doy submit se envía…(Continue Reading)

HTTP2のHPACKの整数表現でオクテット境界の意味について

投稿者: Anonymous http://syucream.github.io/hpack-spec-ja/header-compression-10-ja.html 「5.1 整数表現」で、 プレフィックスサイズ N は常に 1 から 8 ビットの間です。 オクテット境界から開始する整数は 8 ビットプレフィックスを 持ちます。 とあります。 このオクテット境界から開始する整数とは何でしょうか? その後の例では整数42がオクテット境界から開始とされていますが。 整数表現は32以上なら次のオクテットを使用する、と理解したのですが、8ビットプレフィックスが使用されるケースがよく理解できていないです。 解決 この整数表現は, 1 オクテットに満たない他の情報と整数を同じオクテットにパックできるように考えだされたものです. 他の情報が MSB から X ビット使われているとすると, 整数表現で使用可能なビット数は 8 – X です. この場合の整数表現法法を (8-X) ビットプレフィックスと定義しています. よって 8 ビットプレフィックスとは他の情報が存在せず, 整数が 1 オクテット全部使用可能ということです. 8 ビットプレフィックスを使用するケースは, ハフマン符号化が導入されるまでは存在していました. 5.2 文字列リテラル表現のString Lengthが, ハフマン符号化導入前は H ビットがなかったために 8 ビットまるごと使えたのです (http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-03#section-4.3.1).…(Continue Reading)

ソフトウェア開発をおこなう企業における一般的なProxy構成を教えて下さい

投稿者: Anonymous お世話になっております。 皆様のご助力もあり、企業や学校においてはProxyサーバを経由して社外ネットワークへアクセスするのが一般的であるということがわかりました。 最近はhttpsによる通信が一般的になっていることもあり、間にproxyが挟まって一旦proxyで復号化して中身を監視するような構成だと、原理的に証明書のエラーが発生します。 IEやChromeなどのブラウザであれば、ブラウザにProxyのルート証明書をインストールすれば証明書関連のエラーが解消できます。 pipやapt,yumなどを始めとするパッケージ管理ソフトや、モジュール等の自動ダウンロード機能がある一部のソフトではProxyを使用してhttpsでダウンロードしようとすると証明書関連のエラーが発生します。証明書エラーを無視するという設定ができるソフトもあります。 Proxyを経由する場合は、これらのソフトに対して様々な方法で対策をする必要があります。 そこで質問です、IoTや組み込み・業務系に限らず、ソフトウェア開発をおこなう企業では、Proxyの構成はどのようなものになっているのが一般的なのでしょうか。 私はインフラ関連については疎いので、ネットで聞きかじったくらいしか知識がありませんが、 ・https,httpについて、全部の通信を一旦復号化して監視・記録する ・httpだけを監視・記録する。httpsについては素通りにしてIPアドレスやドメイン名のみ記録する ….などがパターンとしては考えられるのかな…とおもいます。 個人的には、先行開発をメインにおこなう部署や会社では、新しいツールを導入するときに、Proxyとの格闘でかなり時間を費やしているんじゃないかな…とおもっています。 (しかも、頻繁にバージョンアップなどあり、そのたびに設定方法が変わるとか…) そのような場合、素直にProxyと格闘するのか、情シスから緩和ルールをもらったりするのか…などどのように運用されているのか、なども教えていただけると嬉しいです。 解決 ソフトウェア開発をおこなう企業 であれば pipやapt,yumなどを始めとするパッケージ管理ソフトや、モジュール等の自動ダウンロード機能がある一部のソフト に対応するリポジトリサーバをイントラに持っていることも少なくないのではないでしょうか(一般的である、かどうかまではわかりませんが)。 例えばJFrog ArtifactoryやSonatype Nexus Repositoryはそのような目的を達成するためのプロダクトです。 (ミラー機能というのがあります) エンドユーザ(ソフトウェア開発者)とリポジトリサーバ間の通信がイントラネットワークで完結すれば 証明書関連のエラーが発生 するような仕組みを差し挟む必要がそもそも無くなるのではないでしょうか。 回答者: Anonymous

HTTP POSTの multipart form-dataのクライアントとサーバの実装について

投稿者: Anonymous HTTP POSTの multipart form-dataのクライアントとサーバの実装について 送信するデータを、boundaryで指定した文字列で囲うという仕様のようなのですが、ここで疑問があります。 クライアント側は、boundaryで指定したバイト列がデータに含まれていないということをどうやって保障しているのでしょうか? ChromeではPOSTの時に WebKitFormBoundary{ランダムな英数字}というboundaryが指定されるようですが、適当に乱数で英数字を生成し、データ部分に含まれていないかをチェックしてから、リクエストを行う? または、乱数部分が十分に長ければ、一致することは現実的にありえないとして、ノーチェックでリクエストを行う? サーバー側はmultipart form-dataをパースをどうすれば効率的に行える? この仕様だと、テキストデータは行単位で処理できるからマシだとして、バイナリデータは、全データをboundaryと比較しながらパースする必要があり、非常に非効率であるように思います。 簡単なHTTP クライアントやサーバーのサンプルコードでは、POSTするデータはテキストであることが前提なものしか見当たりませんでした。 実装次第だとは思いますが、どんな感じの実装が一般的なのでしょうか? 解決 自分もこのあたりの専門家ではないので、これまでの経験から回答させていただきます。 実装次第ですが、ご指摘されているように、クライアント側はデータ内にBoundaryと同じ文字列が含まれていないことをチェックした方が良いと思います。クライアントを実装する言語によりますが、バイナリを扱う機能が不向きで遅い言語だと、確かにチェックは少し時間がかかるかも知れませんね。ただ、そこまでシビアなものを作らないのであれば、実際上はノーチェックでも問題ないと思っています。 また、サーバー側も全データをboundaryと比較しながらパースする必要がありますが、こちらも、実装する言語によりますが、1バイトずつ比較する処理をC言語等で実装していくのであれば、コード上は長くなるものの、実行時の負荷はさしてかからないと思います。 クライアント側だけですが、javascriptでバイナリをmultipart-postするサンプルを以前作ったことがあるので、参考にしてみてください。 http://qiita.com/KNaito/items/54b1bf61a3c678ca28b1 ただし、データ内のBoundaryチェックは行っていません。 回答者: Anonymous

¿Existe alguna forma de pasar datos entre links?

publicado por: Anonymous Quiero hacer una pagina de redireccionando.html pero tengo varios links en el índex.html y no quiero tener que hacer un redireccionando_link_1.html, redireccionando_link_2.html, etc. Es posible que solo tenga que hacer una pagina de redireccionando en vez de una por cada link distinto que tenga mi pagina? O sea, que llame a redireccionando.html…(Continue Reading)

Nagios で HTTP コンテンツが変更されたことを検知したい

投稿者: Anonymous Nagios を使って HTTP や HTTPS のコンテンツが変更されたことを 検知する仕組みはどのようにすれば実現できるでしょうか。 check_http には次のオプションがあり、「指定した時間より古い場合に警告」という動作をします。 -M, –max-age=SECONDS これとは逆に「新しい場合に警告」という動作ができれば問題を解決できると思っていますが実現方法がわかりません。 解決 Nagiosのpluginはしかるべきステータスコードを返すプログラムというだけなので、たいていのことはちょっとしたシェルスクリプト程度で監視できます。 #!/bin/sh HOST=$1 URL=$2 SAVE=/var/tmp/${HOST} new_data=`curl -s $URL |sha256sum` new_data=`echo $new_data` #空白よけ if [ ! -e $SAVE ]; then status=3 #UNKNOWN else old_data=`cat $SAVE` if [ “$old_data” = “$new_data” ]; then status=0 #OK else status=2 #CRITICAL fi fi echo $new_data…(Continue Reading)

クロスドメインのCookie発行

投稿者: Anonymous サイトAからサイトBに対するドメインをまたぐCookieを発行することはできますか? サイトAのHTTPレスポンスが Set-Cookie: name1=value1; サイトB; path=/ を返した場合、ブラウザでサイトBに遷移した際に、Cookieは送信されるのでしょうか? 解決 Set-Cookie: name1=value1; domain=サイトB; path=/ の誤記でしょうか? Webブラウザはセキュリティ上の理由から、送信元以外のドメイン向けのCookieは受け取らないです。RFC 6265 の 4.1.2.3. The Domain Attributeにも The user agent will reject cookies unless the Domain attribute specifies a scope for the cookie that would include the origin server. と記されています。 ですので、送信するかどうかで言えばWebサーバー次第ではありますが、送信する意議がないです。 回答者: Anonymous

Golangで”net/http”を使って、HTTP Responseをstreamingで受け取る方法

投稿者: Anonymous GoでHTTP Requestを投げてResponseを受け取る時、 ResponseBodyが巨大(1GB以上等)である場合を考えてstreamingしながらレスポンスを受け取りたいです。 req, err := http.Client.Do(res) このままだとbodyが巨大な場合、Headerも読めずResponseの状態がわかりません。 何か解決法はあるでしょうか 解決 このままだとbodyが巨大な場合、Headerも読めずResponseの状態がわかりません。 レスポンス全てをストリーミングしなくても、レスポンスの中身が読めるようになれば問題解決につながると考えて回答します。 単純にレスポンスを出力するだけであれば httputil.DumpResponse が利用できます。 https://golang.org/pkg/net/http/httputil/#DumpResponse // 注意: エラー処理は簡略化してます req, _ := http.NewRequest(“GET”, “https://example.com/”, nil) resp, _ := (&http.Client{}).Do(req) defer resp.Body.Close() dump, _ := httputil.DumpResponse(resp, false) fmt.Printf(“%qn”, dump) 一応 io.TeeReader(resp.Body, os.Stderr) みたいな方法で中身を別途 stderr 等に吐き出して pipe viewer コマンドで進行状況を見るなどすれば、ストリーミングに似たやり方はできます。ただ、コレを Go だけで実装しようとすると結構大変な作業になりそうなので割愛します。 回答者: Anonymous

URLのパラメータについて教えていただきたいことがあります。

投稿者: Anonymous あまりにも初歩的な質問で失礼します。 例えば、 http://www.example.com/index.html?a=1 http://www.example.com/index.html?a=1&b=2 のようなURLがあるとします。 上記URLの末尾にindex.html?a=1とかindex.html?a=1&b=2など、 ?以下がURLパラメータということを最近知りました。 この「?a=1」とか「?a=1&b=2」という箇所(パラメータ)は、 “通常”はPHPなどのプログラミング言語から出力されるものなのでしょうか? それともHTMLで出力されるものなのでしょうか? ご教授よろしくお願い致します。 解決 あなたが URL と呼んでいるものは、 Uniform Resource Locator の略で、リソースがある場所を示している文字列です。URLのうち、 ? 以降 # より前の部分はクエリ文字列 (query component / query string) と呼ばれます。 クエリ文字列がどこで作られるかは、プログラムに依ります。 ウェブページの話の場合、一般的には、URL は HTML 内で指定され、ブラウザがそれがさす場所へアクセスを行うものです。 HTML では、 (1.) <a> 要素にクエリを含んだ URL が指定されるか、 (2.) <form method=”GET”> 内の <input> 要素の情報がクエリとして付けられ送信される、もしくは、 (3.) <img ismap> のイメージマップがクリックされた位置がクエリとして付けられ送信されることになっています。 <a href=”page.html?key1=value1″>リンク名</a>…(Continue Reading)