Conditional Requests (If-Modified-Since, ETag) হ্যান্ডেল করা

Java Technologies - অ্যাপাচি এইচটিটিপি ক্লায়েন্ট (Apache HTTP Client) HTTP Caching এবং Conditional Requests |
135
135

Conditional Requests হল HTTP প্রোটোকলে এমন অনুরোধ, যা শুধুমাত্র নির্দিষ্ট শর্ত পূরণ হলে সার্ভার থেকে রেসপন্স প্রাপ্ত হয়। এটি সাধারণত ব্রাউজার বা ক্লায়েন্টের জন্য উপকারী, কারণ এটি শুধুমাত্র সেই তথ্য পুনরায় পেতে সাহায্য করে যা পরিবর্তিত হয়েছে, বা যা আগে সংগ্রহ করা হয়নি। এটি নেটওয়ার্ক ট্রাফিক এবং সার্ভারের লোড কমাতে সহায়ক।

এগুলির মধ্যে প্রধান শর্তাবলী হল If-Modified-Since এবং ETag। এগুলি সার্ভারের কাছে একটি অনুরোধ পাঠানোর সময় কন্ডিশনাল চেক করতে ব্যবহৃত হয়। যদি শর্তটি পূর্ণ হয়, তবে সার্ভার রেসপন্স ফেরত দেয়; যদি না হয়, তবে ক্লায়েন্টকে পুরোনো বা অপরিবর্তিত তথ্য পাঠানো হয়।

If-Modified-Since এবং ETag এর কাজের ব্যাখ্যা

  1. If-Modified-Since:
    এই হেডারটি সার্ভারকে বলে যে, কেবলমাত্র যদি নির্দিষ্ট সময়ের পর ডেটাতে কোনো পরিবর্তন ঘটে থাকে, তবেই নতুন রেসপন্স পাঠানো হবে। যদি রিসোর্স পরিবর্তিত না হয়, তবে সার্ভার 304 (Not Modified) স্ট্যাটাস কোড সহ কোনো কন্টেন্ট না পাঠিয়ে কেবলমাত্র হেডার পাঠিয়ে দেয়।
  2. ETag:
    ETag হল একটি ইউনিক আইডেন্টিফায়ার যা একটি রিসোর্সের নির্দিষ্ট সংস্করণের সাথে সম্পর্কিত থাকে। যখন ক্লায়েন্ট সার্ভারে একটি অনুরোধ পাঠায়, এটি If-None-Match হেডার ব্যবহার করে আগের ETag সহ পাঠাতে পারে। যদি এই ETag এর সাথে রিসোর্সের বর্তমান সংস্করণ মেলে, তবে সার্ভার 304 কোড সহ কোনো কন্টেন্ট ফেরত দেয় না, অর্থাৎ রিসোর্স অপরিবর্তিত রয়েছে।

Apache HTTP Client-এ Conditional Requests হ্যান্ডেল করা

Apache HTTP Client-এ If-Modified-Since এবং ETag হ্যান্ডেল করার জন্য, আমরা সাধারণত HttpGet বা HttpRequestBase ব্যবহার করি এবং কাস্টম হেডার যোগ করি। নিচে উদাহরণ দেওয়া হল কিভাবে এই কন্ডিশনাল রিকোয়েস্টগুলি ব্যবহৃত হতে পারে।

কোড উদাহরণ: If-Modified-Since এবং ETag ব্যবহার

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.HttpClientContext;
import org.apache.http.client.methods.HttpUriRequestBase;
import org.apache.http.util.EntityUtils;
import org.apache.http.HttpEntity;

import java.util.Date;

public class ConditionalRequestExample {

    public static void main(String[] args) {
        try {
            // HttpClient তৈরি করা
            CloseableHttpClient httpClient = HttpClients.createDefault();
            
            // GET অনুরোধ তৈরি করা
            HttpGet httpGet = new HttpGet("https://example.com/resource");

            // If-Modified-Since হেডার যোগ করা
            Date lastModified = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000);  // 24 ঘণ্টা আগে
            httpGet.setHeader("If-Modified-Since", lastModified.toString());

            // ETag হেডার যোগ করা
            String etag = "\"5d8c72a5-c81\"";  // আগের রিসোর্স থেকে প্রাপ্ত ETag
            httpGet.setHeader("If-None-Match", etag);

            // HTTP অনুরোধ পাঠানো
            HttpResponse response = httpClient.execute(httpGet);
            
            // রেসপন্স কোড চেক করা
            int statusCode = response.getStatusLine().getStatusCode();
            System.out.println("Response Status Code: " + statusCode);

            // যদি রেসপন্স 200 হয়, তাহলে কন্টেন্ট প্রদর্শন করা
            if (statusCode == 200) {
                HttpEntity entity = response.getEntity();
                String content = EntityUtils.toString(entity);
                System.out.println("Response Content: " + content);
            }
            // যদি 304 হয় (Not Modified), তাহলে জানানো হবে
            else if (statusCode == 304) {
                System.out.println("Resource not modified, using cached content.");
            }

            // HttpClient বন্ধ করা
            httpClient.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

কোড ব্যাখ্যা

  1. If-Modified-Since হেডার:
    httpGet.setHeader("If-Modified-Since", lastModified.toString());
    এখানে lastModified একটি Date অবজেক্ট যা গত 24 ঘণ্টার আগে সেট করা হয়েছে। এটি সার্ভারকে বলে যে, কেবলমাত্র যদি রিসোর্সটি গত 24 ঘণ্টায় পরিবর্তিত হয়ে থাকে, তবেই নতুন কন্টেন্ট পাঠানো হবে।
  2. ETag হেডার:
    httpGet.setHeader("If-None-Match", etag);
    এখানে etag একটি স্ট্রিং যা সার্ভার থেকে প্রাপ্ত আগের ETag সনাক্তকারী ধারণ করে। এটি নিশ্চিত করে যে, কেবলমাত্র যদি রিসোর্সের সংস্করণ পরিবর্তিত হয়, তবেই সার্ভার থেকে নতুন কন্টেন্ট ফেরত আসবে।
  3. HTTP Response চেক করা:
    • if (statusCode == 200) চেক করে যদি রেসপন্স কোড 200 হয়, তবে নতুন কন্টেন্ট প্রদর্শিত হয়।
    • else if (statusCode == 304) চেক করে যদি রেসপন্স কোড 304 (Not Modified) হয়, তবে সার্ভার জানাচ্ছে যে রিসোর্স পরিবর্তিত হয়নি এবং ক্লায়েন্টকে পুরানো কন্টেন্ট ব্যবহার করার জন্য বলা হচ্ছে।

If-Modified-Since এবং ETag এর ব্যবহার

  1. If-Modified-Since:
    • এটি ব্যবহারকারীকে নতুন রিসোর্স পাবার জন্য শুধুমাত্র তখনই অনুরোধ করতে সক্ষম করে যখন রিসোর্স পরিবর্তিত হয়।
    • সাধারণত এটি রিসোর্সের সর্বশেষ পরিবর্তন সময়ের সাথে তুলনা করে।
  2. ETag:
    • এটি একটি ইউনিক আইডেন্টিফায়ার প্রদান করে যা সার্ভারের একটি নির্দিষ্ট রিসোর্স সংস্করণের সাথে সম্পর্কিত।
    • ETag-এর মাধ্যমে সার্ভার ও ক্লায়েন্টের মধ্যে সংযোগ সৃষ্টির পর, কেবলমাত্র রিসোর্সের পরিবর্তন হলে নতুন কন্টেন্ট ফেরত দেওয়া হয়।

সারাংশ

Conditional Requests হল HTTP অনুরোধের একটি অত্যন্ত কার্যকরী কৌশল, যা রিসোর্সের পরিবর্তন সনাক্ত করে ক্লায়েন্টকে পুরানো বা অপরিবর্তিত কন্টেন্ট ফেরত পাঠাতে সহায়ক। Apache HTTP Client ব্যবহার করে If-Modified-Since এবং ETag হেডার সেট করা যায়, যা সার্ভার থেকে শুধুমাত্র পরিবর্তিত কন্টেন্ট প্রাপ্তি নিশ্চিত করে এবং নেটওয়ার্কের কার্যকারিতা বৃদ্ধি করে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion