73

私が使用しているサービス API には、リクエストの本文でデータを送信する必要がある特定の GET メソッドがあります。

本文に必要なデータは、ハイフンで区切られた ID のリストであり、非常に大きくなる可能性があるため、本文で送信する必要があります。そうしないと、ブラウザ/プロキシ/Web サーバーなどのチェーンのどこかで foobar される可能性があります。サービスまたは API を制御できないことに注意してください。変更を提案しないでください。

次のjQueryコードを使用していますが、フィドラーでリクエスト/レスポンスを観察すると、「processData」オプションをfalseに設定しているにもかかわらず、送信している「データ」が常に変換され、クエリ文字列に追加されていることがわかります...

$.ajax({
   url: "htttp://api.com/entity/list($body)",
   type: "GET",
   data: "id1-id2-id3",
   contentType: "text/plain",
   dataType: "json",
   processData: false, // avoid the data being parsed to query string params
   success: onSuccess,
   error: onError
});

リクエストの本文で「データ」値を強制的に送信する方法を知っている人はいますか? 事前に感謝します。

4

3 に答える 3

67

一般に、システムが GET リクエストを使用する方法はそうではありません。そのため、ライブラリを一緒にプレイさせるのは難しいでしょう。実際、仕様には、「リクエスト メソッドが大文字と小文字を区別して GET または HEAD に一致する場合、データが null であるかのように動作する」と記載されています。したがって、使用しているブラウザが仕様のその部分を尊重しない限り、運が悪いと思います.

おそらく、独自のサーバーに POST ajax リクエスト用のエンドポイントを設定し、それをサーバー コードで本文付きの GET リクエストにリダイレクトできます。

本文がデータである GET 要求に完全に結び付けられていない場合は、2 つのオプションがあります。

POST with data:これはおそらくあなたが望むものです。データを渡している場合、それはおそらく、何らかのモデルを変更しているか、サーバー上で何らかのアクションを実行していることを意味します。これらのタイプのアクションは、通常、POST 要求で実行されます。

クエリ文字列データを使用した GET:データをクエリ文字列パラメーターに変換し、その方法でサーバーに渡すことができます。

url: 'somesite.com/models/thing?ids=1,2,3'
于 2012-04-24T14:14:42.750 に答える
4

http 標準に従ってデータを送信するには、一般的に POST リクエストを使用することは誰もが知っています。しかし、実際にシナリオでデータを送信するために Get を使用したい場合は、クエリ文字列またはクエリ パラメータを使用することをお勧めします。

1. クエリ文字列を GET として使用します{{url}}admin/recordings/some_id

ここで、 some_id は送信する必要のあるパラメーターであり、サーバー側で使用してreq.params.some_idにすることができます。

2.クエリ文字列の使用をGETする{{url}}admin/recordings?durationExact=34&isFavourite=true

ここで、durationExact と isFavourite は送信するオプションの文字列であり、サーバー側でreq.query.durationExactreq.query.isFavouriteを使用できます。

3. GET 送信配列 {{url}}admin/recordings/sessions/?os["Windows","Linux","Macintosh"]

そして、このようにサーバー側でこれらの配列値にアクセスできます

let osValues = JSON.parse(req.query.os);
        if(osValues.length > 0)
        {
            for (let i=0; i<osValues.length; i++)
            {
                console.log(osValues[i])
                //do whatever you want to do here
            }
        }
于 2020-06-17T07:33:23.107 に答える