問題タブ [content-negotiation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - コンテンツ ネゴシエーションを使用した Laravel 4 RESTful API
laravel を使用して RESTFul API を使用しています。プロジェクトでコンテンツ ネゴシエーションを使用したいのですが、その方法がわかりません。API バージョンごとにコントローラーを分けています。API バージョンを区別し、バージョンに応じて正しいコントローラーを使用したいと考えています。
私のAPIルーターは次のとおりです。
ルート グループで使用する api.type フィルターを作成する必要がありますか、それともルート グループ クロージャーまたは各コントローラーで使用する必要がありますか?
php - リチウム コンテンツ ネゴシエーションではすべてのデータが表示されます - どのように除外するのですか?
私はそれがインデックスアクションでapp/controllers/UsersController.php
簡単にできるようにしました。Users::find('all');
パス/users/index
は、ユーザー データのプレーンな 'ol HTML 出力をレンダリングします。このパス/users/index.json
は、HTML 出力に相当する JSON をレンダリングします。これは、パスワード (ハッシュされていますが、それでも...) も公開するという事実を除けば、優れています。
これを回避するには、次の 2 つのオプションがあります。
fields
ファインダーで明示的に指定します。Media::render()
機密データをフィルタリングして設定解除します。
長期的には、#2の方が維持しやすいと思います。ご意見はありますか?3 番目のより良い代替手段はありますか?
これは私が#2を実装した方法です:
アドバイスをいただければ幸いです。
asp.net-web-api - Web API でのファイル ダウンロードのコンテンツ ネゴシエーション
PDFファイルを返すWeb API RESTサービスメソッドがあります。コードは次のとおりです。
私の疑問は、API の他のメソッドです。応答のメディア タイプにコンテンツ ネゴシエーションを使用しました。ここでもコンテンツ ネゴシエーションを使用する必要がありますか?? ここで必要かどうか?
http - コンテンツ ネゴシエーションによるキャッシングをサポートする CDN ソリューションはどれですか?
コンテンツ ネゴシエーションを通じて一連のリソースを提供しています。Accept
具体的には、クライアントのヘッダーに応じて、任意の URL をさまざまな形式で表すことができます。
この例は、Facebook で見ることができます。
curl -H "Accept: application/json" http://graph.facebook.com/daft-punk
結果は JSON になりますcurl -H "Accept: text/turtle" http://graph.facebook.com/daft-punk
結果はタートル
URL とクライアントのヘッダーに基づいてコンテンツをキャッシュするCDNを探しています。Accept
うまくいかない例
CloudFlare はこれをサポートしていません: 1 つのクライアントが HTML を要求した場合、その URL への後続のすべての要求は、好みに関係なく、HTML 表現を受け取ります。他の人にも同様の問題があります。
たとえば、CloudFlare をgraph.facebook.com
配置すると (そして、デフォルトではキャッシュしない「拡張なし」リソースをキャッシュするように構成すると)、正しく動作しません。
http://graph.facebook.com/daft-punk
curl を使用して JSON で要求します。
それに応じて、CloudFlare はサーバーから JSON オリジナルを要求し、それをキャッシュして、提供します。- 私
http://graph.facebook.com/daft-punk
はブラウザを介して (つまり HTML で) 要求します。
それに応じて、元のサーバーが HTML バージョンを送信したとしても、CloudFlare はキャッシュされた JSON (!) 表現を送信します。
代わりに何が必要か
正しい動作は、2 番目のクライアントのAccept
ヘッダーが異なるため、CloudFlare がサーバーに再度要求することです。この後、同様のAccept
ヘッダーを持つリクエストをキャッシュから提供できます。
コンテンツ ネゴシエーションをサポートし、ネゴシエートされたコンテンツをキャッシュする CDN ソリューションはどれですか?
したがって、 Acceptを尊重するだけでは不十分で
あることに注意してください。ネゴシエートされた応答もキャッシュする必要があります。
PS1: 独自のキャッシュ サーバーをサポートするのは簡単です。たとえば、nginx の場合:
クライアントのAccept
ヘッダーが、キャッシュのインデックスを作成するキーの一部であることに注意してください。CDNでそれが欲しい。
PS2: 表現ごとに異なる URL を使用することはできません。私のアプリケーションはLinked Dataドメインにあり、そこでは URL が識別に重要な役割を果たします。
javascript - コンテンツ ネゴシエーション - Firefox で画像を表示する
私は画像のミニチュアのギャラリーを持っています。それらのいずれかをクリックすると、フルサイズの同等物が新しいタブで開きます。image に多くのバージョンがあるとしましょう.jpg,.gif and .png
。適切な (ブラウザが最も必要としている) ファイルが表示されるように、ファイルを変更するにはどうすればよいですか?
私のFirefoxの設定は次のとおりです。
そして私の.phpファイル:
php - コンテンツ ネゴシエーション値を順不同で送信できますか?
ヘッダーからユーザーの言語/ロケールを判断していますがAccept-Language
、それらが順不同で渡される可能性があるかどうか疑問に思っていました。phpのソート関数を書いて降順になっていることを確認しましたが、不要であれば削除したいと思います。
適切な順序の例:
Accept-Language: fr-ca, fr; q=0.8, en-ca; q=0.6, en-us; q=0.4, en; q=0.2
不適切な注文の例:
Accept-Language: fr-ca, en; q=0.2, en-ca; q=0.6, en-us; q=0.4, fr; q=0.8
json - パス拡張を使用した Spring コンテンツ ネゴシエーション (拡張を介して Accept-Header を設定しますか?!)
部分的に機能する 2 つの異なる @Controller メソッドで同じ URL パス ハンドルを使用したいと考えています。これが私が持っているものです:
WebMvcConfig:
コントローラ:
現在の動作:
良いもの:
GET /test/profile
(with Accept=*/*
) コールgetProfile()
GET /test/profile
(with Accept=application/json
) コールgetProfile()
GET /test/profile.json
(with Accept=*/*
) コールgetProfile()
GET /test/profile.json
(でAccept=text/vcard
) を返します406 NOT ACCEPTABLE
GET /test/profile
(with Accept=text/vcard
) コールgetProfileVCard()
GET /test/profile.vcf
(with Accept=text/vcard
) コールgetProfileVCard()
欠陥のあるもの:
GET /test/profile.vcf
(with Accept=*/*
) コールgetProfile()
とリターン406 NOT ACCEPTABLE
.
間違ったメソッドが呼び出されるのはなぜですか? favorPathExtension(true)
パス拡張が設定されているときにSpringがAccept-Headerをオーバーライドするように設定したと思いましたか?
編集:
私もfavorPathExtension(true).ignoreAcceptHeader(true).favorParameter(true)
自分の設定で設定しましたが、それでも機能しませprofile?format=vcf
んprofile.vcf?format=vcf
。