গুরুত্বপূর্ণ ফিচার, যেগুলি অ্যাপ্লিকেশনকে রিসোর্সগুলি পুনরায় ডাউনলোড না করে সেগুলি ক্যাশে থেকে ব্যবহার করতে সক্ষম করে। এগুলি মূলত পারফরমেন্স বৃদ্ধি, ব্যান্ডউইথ সংরক্ষণ, এবং সিস্টেমের প্রতিক্রিয়া সময় কমাতে সহায়ক।
HTTP ক্যাশিং একটি কৌশল যা HTTP রেসপন্সের কন্টেন্টকে স্থানীয় বা সার্ভারে সংরক্ষণ করে রাখে, যাতে পরবর্তী রিকুয়েস্টে সেই একই কন্টেন্ট পুনরায় ডাউনলোড করার পরিবর্তে ক্যাশে থেকে সরবরাহ করা যায়। এর মাধ্যমে সিস্টেমের পারফরমেন্স এবং স্কেলেবিলিটি উন্নত হয়।
Conditional requests HTTP এর একটি বৈশিষ্ট্য, যা ব্যবহারকারীর রিকুয়েস্টের সাথে সার্ভারের কাছে কেবল তখনই রিসোর্স পাঠানোর অনুরোধ করে, যদি সেই রিসোর্স পরিবর্তিত হয়ে থাকে। এটি ক্যাশিংয়ের সাথে মিলে কাজ করে এবং কম ডেটা ট্রান্সফার এবং দ্রুত রেসপন্স নিশ্চিত করে।
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.CacheConfig;
import org.apache.http.impl.client.LaxRedirectStrategy;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.HttpCache;
import org.apache.http.impl.client.HttpCacheContext;
import org.apache.http.impl.client.cache.CacheResponseStatus;
import org.apache.http.impl.client.cache.CacheableHttpResponse;
import org.apache.http.util.EntityUtils;
import org.apache.http.client.protocol.HttpClientContext;
import java.io.IOException;
public class HttpCachingAndConditionalRequestsExample {
public static void main(String[] args) {
try {
// HTTP ক্যাশ কনফিগারেশন তৈরি করা
CacheConfig cacheConfig = CacheConfig.custom()
.setCacheDir(new java.io.File("cache")) // ক্যাশ ফোল্ডার নির্ধারণ
.setMaxCacheEntries(1000) // সর্বাধিক ক্যাশ এন্ট্রি সংখ্যা
.setMaxObjectSize(2048) // সর্বাধিক কন্টেন্ট সাইজ
.build();
// HttpClient কনফিগারেশন তৈরি করা (ক্যাশিং সহ)
CloseableHttpClient httpClient = HttpClients.custom()
.setCacheConfig(cacheConfig) // ক্যাশ কনফিগারেশন সেট করা
.setRedirectStrategy(new LaxRedirectStrategy()) // রিডিরেক্ট কৌশল
.build();
// HTTP GET রিকুয়েস্ট তৈরি করা
HttpGet request = new HttpGet("http://example.com");
// রিকুয়েস্ট পাঠানো এবং রেসপন্স গ্রহণ
HttpClientContext context = HttpClientContext.create();
HttpResponse response = httpClient.execute(request, context);
// রেসপন্স স্ট্যাটাস চেক করা
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("Response Status Code: " + statusCode);
// রেসপন্স কন্টেন্ট গ্রহণ করা
String responseContent = EntityUtils.toString(response.getEntity());
System.out.println("Response Content: " + responseContent);
// ক্যাশের অবস্থা চেক করা
CacheResponseStatus cacheStatus = context.getCacheResponseStatus();
if (cacheStatus == CacheResponseStatus.CACHE_HIT) {
System.out.println("Cache Hit: Using cached response.");
} else {
System.out.println("Cache Miss: Fetching from server.");
}
// রেসপন্স সাপেক্ষে কন্ডিশনাল রিকুয়েস্ট ব্যবহার
if (statusCode == 200) {
// Condition met, process data or cache it
}
response.close();
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
HttpClients.custom()
ব্যবহার করে HTTP ক্লায়েন্ট কনফিগার করা হয়েছে, যেখানে ক্যাশ কনফিগারেশন যোগ করা হয়েছে। ক্যাশের মাধ্যমে HTTP রিকুয়েস্ট এবং রেসপন্স পরিচালনা করা হয়।CacheResponseStatus.CACHE_HIT
: এটি নির্দেশ করে যে রিকুয়েস্টের রেসপন্স ক্যাশে পাওয়া গেছে এবং সেখান থেকে সরবরাহ করা হয়েছে। অন্যথায়, এটি CACHE_MISS
হয়ে থাকে, যার মানে রিসোর্সটি আবার সার্ভার থেকে ডাউনলোড করা হয়েছে।HttpCacheContext
: এটি ক্যাশের সাথে সম্পর্কিত কনটেক্সট ধারণ করে এবং রেসপন্সের ক্যাশিং স্ট্যাটাস চেক করতে ব্যবহৃত হয়।If-Modified-Since
: যদি আপনি একটি রিসোর্সের পরিবর্তন না হওয়া নিশ্চিত করতে চান, আপনি If-Modified-Since
হেডার ব্যবহার করতে পারেন। এটি সার্ভারকে বলে যে কেবল তখনই রিসোর্স পাঠান যখন এটি সর্বশেষ পরিবর্তিত হওয়ার পর নতুন হয়েছে।If-None-Match
: এই হেডারটি সার্ভারের সাথে রিসোর্সের ETag তুলনা করে, এবং যদি ETag পরিবর্তিত না হয়, তবে রিসোর্স ফেরত দেয় না।HTTP Caching এবং Conditional Requests অ্যাপাচি HTTP ক্লায়েন্টে গুরুত্বপূর্ণ টুল যা সিস্টেমের পারফরমেন্স এবং ব্যান্ডউইথ ব্যবহারের উন্নতি ঘটায়। ক্যাশিং সিস্টেমের মাধ্যমে পুনরায় রিসোর্স ডাউনলোডের পরিবর্তে দ্রুত রেসপন্স পাওয়া যায়, এবং কন্ডিশনাল রিকুয়েস্টের মাধ্যমে ক্যাশে সঞ্চিত রিসোর্স শুধু তখনই সার্ভার থেকে পুনরায় আনা হয় যখন পরিবর্তিত হয়। এই ফিচারগুলো একত্রে ব্যবহার করা পারফরমেন্স বৃদ্ধি এবং রিসোর্স অপ্টিমাইজেশন নিশ্চিত করতে সাহায্য করে।
অ্যাপাচি HTTP ক্লায়েন্ট (Apache HTTP Client)-এ HTTP Caching একটি গুরুত্বপূর্ণ কৌশল যা ওয়েব ক্লায়েন্ট (যেমন ব্রাউজার বা HTTP ক্লায়েন্ট) এবং সার্ভারের মধ্যে সংস্থানগুলো ক্যাশে (সংরক্ষণ) করার মাধ্যমে কর্মক্ষমতা উন্নত করে এবং পুনরায় অনুরোধ পাঠানোর সময় সময় এবং ব্যান্ডউইথ সাশ্রয়ী হয়। HTTP ক্যাশিং ক্লায়েন্ট এবং সার্ভারের মধ্যে একযোগে কাজ করে, যাতে সার্ভার থেকে ডেটা পুনরায় না আনা হয়, এবং আগের সংরক্ষিত ডেটা ব্যবহার করা যায়।
HTTP ক্যাশিং হলো একটি প্রযুক্তি যা HTTP অনুরোধের জন্য সার্ভার থেকে প্রাপ্ত ডেটাকে ক্যাশে (সংরক্ষণ) করার প্রক্রিয়া। যখন একটি নতুন অনুরোধ আসে, তখন ক্লায়েন্ট ক্যাশে ডেটা পরীক্ষা করে এবং যদি এটি বৈধ হয়, তবে সরাসরি ক্যাশে সংরক্ষিত ডেটা প্রদান করা হয়, যা সার্ভারের অনুরোধটি কমাতে সহায়ক। এর মাধ্যমে ডেটা রিট্রিভাল সময় কমানো এবং সার্ভারের প্রতি চাপ কমানো সম্ভব হয়।
HTTP ক্যাশিং Cache-Control
, ETag
, এবং Last-Modified
এর মত হেডারগুলির মাধ্যমে নিয়ন্ত্রিত হয়। এই হেডারগুলির মাধ্যমে সার্ভার ক্লায়েন্টকে জানিয়ে দেয় কখন ডেটা ক্যাশে রাখা উচিত, কিভাবে পুনরায় ব্যবহার করা যাবে এবং কখন তা পুনরায় সার্ভার থেকে আনা উচিত।
Cache-Control
হেডার HTTP ক্যাশিং এর প্রধান নিয়ন্ত্রণ মেকানিজম। এটি ক্লায়েন্ট এবং প্রাক্সি সার্ভারকে ক্যাশিং কৌশল নির্দেশ করে।
Cache-Control এর সাধারণ ভ্যালুসমূহ:
public
: ডেটা ক্যাশে করতে অনুমতি দেয় এবং এটি শেয়ারযোগ্য।private
: ডেটা শুধুমাত্র ক্লায়েন্টের জন্য ক্যাশে হবে, প্রাক্সি সার্ভারের জন্য নয়।no-cache
: ডেটা ক্যাশে করা যাবে, কিন্তু এটি সার্ভারের সাথে যাচাই করতে হবে যে এটি সঠিক কি না।no-store
: ক্যাশে করা যাবে না, প্রতিবার সার্ভার থেকে নতুন ডেটা নিতে হবে।max-age
: ডেটা কত সময়ের জন্য ক্যাশে থাকবে তা নির্দিষ্ট করে। উদাহরণ: max-age=3600
(1 ঘণ্টা)Cache-Control: public, max-age=3600
এটি বলে যে ডেটা পাবলিক ক্যাশে রাখা যাবে এবং 1 ঘণ্টার জন্য বৈধ থাকবে।
ETag
(Entity Tag) হেডার একটি ইউনিক চিহ্ন প্রদান করে যা নির্দিষ্ট ডেটার সংস্করণ বা কন্টেন্টের একটি স্বতন্ত্র চিহ্ন হিসেবে কাজ করে। যখন একটি ক্লায়েন্ট সার্ভারে একটি অনুরোধ পাঠায়, এটি ETag
হেডার সহ একটি If-None-Match
হেডার পাঠাতে পারে, যা সার্ভারের কাছে কেবল তখনই ডেটা চাইবে যদি এটি আগের ETag
এর সাথে মেলেনি।
ETag: "686897696a7c876b7e"
এটি ডেটার সংস্করণ প্রতিনিধিত্ব করে এবং ক্লায়েন্ট পরবর্তী অনুরোধে এটি ব্যবহার করতে পারে।
Last-Modified
হেডারটি নির্দেশ করে কখন একটি রিসোর্স সর্বশেষ পরিবর্তিত হয়েছিল। ক্লায়েন্ট পরবর্তী অনুরোধে If-Modified-Since
হেডার সহ পাঠিয়ে সার্ভারকে বলবে যে, যদি রিসোর্সটি পূর্বের Last-Modified
সময়ের পর পরিবর্তিত না হয়, তবে এটি পুনরায় সার্ভার থেকে আনতে হবে না এবং ক্যাশে থেকে ব্যবহার করা যাবে।
Last-Modified: Mon, 20 Dec 2023 08:00:00 GMT
অ্যাপাচি HTTP ক্লায়েন্টে HTTP ক্যাশিং ব্যবহার করতে হলে, আপনাকে একটি CacheAwareHttpClient তৈরি করতে হবে যা ক্যাশিং সক্ষম করবে। HttpCache
প্যাকেজ ব্যবহার করে HTTP ক্যাশিং কার্যকর করা যায়।
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.impl.classic.HttpGet;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.cache.BasicHttpCacheStorage;
import org.apache.hc.client5.http.impl.cache.CacheConfig;
import org.apache.hc.client5.http.impl.cache.CacheAwareHttpClient;
import org.apache.hc.client5.http.impl.cache.DefaultCacheStrategy;
import org.apache.hc.client5.http.impl.cache.HttpCacheContext;
public class ApacheHttpClientCachingExample {
public static void main(String[] args) throws Exception {
// CacheConfig তৈরি করা
CacheConfig cacheConfig = CacheConfig.custom()
.setMaxCacheEntries(1000)
.setTimeToLive(TimeValue.ofMinutes(10))
.build();
// CacheAwareHttpClient তৈরি করা
CloseableHttpClient httpClient = HttpClients.custom()
.setDefaultCacheConfig(cacheConfig)
.setCacheStorage(new BasicHttpCacheStorage())
.build();
// GET অনুরোধ তৈরি করা
HttpGet request = new HttpGet("https://example.com");
// HTTP অনুরোধ পাঠানো এবং ক্যাশিং ব্যবহার করা
try (CloseableHttpResponse response = httpClient.execute(request)) {
System.out.println("HTTP Response Status Code: " + response.getCode());
System.out.println("Response Entity: " + response.getEntity());
}
}
}
CacheConfig
: এটি ক্যাশের কনফিগারেশন সেট আপ করে, যেমন সর্বাধিক ক্যাশে এন্ট্রি এবং লাইফটাইম।CacheAwareHttpClient
: এটি একটি কাস্টম HTTP ক্লায়েন্ট যা ক্যাশিং সমর্থন করে এবং সঠিকভাবে ক্যাশে সংরক্ষণ এবং পুনরায় ব্যবহার করে।BasicHttpCacheStorage
: এটি একটি সাধারণ ক্যাশ স্টোরেজ যেখানে ডেটা ক্যাশে সংরক্ষিত হয়।HTTP ক্যাশিং হল একটি শক্তিশালী কৌশল যা কার্যক্ষমতা বৃদ্ধি এবং ব্যান্ডউইথ সাশ্রয়ে সহায়ক। Cache-Control
, ETag
, এবং Last-Modified
হেডারগুলির মাধ্যমে আপনি ক্লায়েন্ট এবং সার্ভারের মধ্যে ক্যাশিং নিয়ন্ত্রণ করতে পারেন। অ্যাপাচি HTTP ক্লায়েন্টে ক্যাশিং ব্যবহার করার জন্য, CacheAwareHttpClient এবং CacheConfig কনফিগারেশন সহ কাস্টম ক্যাশিং স্টোরেজ ব্যবহার করা হয়। ক্যাশিংয়ের মাধ্যমে আপনার অ্যাপ্লিকেশন দ্রুত এবং আরও দক্ষভাবে কাজ করতে পারে।
Cache-Control হেডার HTTP প্রোটোকলে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে, যা ক্লায়েন্ট বা প্রক্সি সার্ভারকে নির্দেশ দেয় কিভাবে ক্যাশিং করা হবে এবং কখন ক্যাশড ডেটা ব্যবহার করা যাবে বা পুনরায় ফেচ করতে হবে। Apache HTTP Client-এ Cache-Control headers ব্যবহার করা হলে এটি HTTP রিকোয়েস্ট এবং রেসপন্সে ক্যাশিং কনফিগারেশন করার জন্য ব্যবহৃত হয়।
Cache-Control
হেডারে বিভিন্ন ডিরেকটিভ থাকতে পারে যেমন:
max-age=3600
মানে হলো এক ঘণ্টা।Apache HTTP Client এ Cache-Control
হেডার যোগ করতে, HttpRequest এ হেডার সেট করতে হয়। নিচে একটি উদাহরণ দেখানো হয়েছে, যেখানে Cache-Control হেডার দিয়ে রিকোয়েস্ট কনফিগার করা হচ্ছে।
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.impl.classic.methods.HttpGet;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.core5.util.EntityUtils;
import org.apache.http.client.config.RequestConfig;
import java.io.IOException;
public class HttpClientWithCacheControl {
public static void main(String[] args) {
// HTTP ক্লায়েন্ট কনফিগারেশন তৈরি করা
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
// HTTP GET রিকোয়েস্ট তৈরি
HttpGet request = new HttpGet("https://your-api-endpoint.com");
// Cache-Control হেডার যোগ করা
request.setHeader("Cache-Control", "max-age=3600"); // 1 ঘণ্টা ক্যাশে রাখবে
// রিকোয়েস্ট পাঠানো এবং রেসপন্স প্রাপ্তি
try (CloseableHttpResponse response = httpClient.execute(request)) {
String responseBody = EntityUtils.toString(response.getEntity());
System.out.println("Response: " + responseBody);
// Cache-Control হেডার থেকে রেসপন্সে ক্যাশিং সম্পর্কিত তথ্য বের করা
String cacheControl = response.getFirstHeader("Cache-Control").getValue();
System.out.println("Cache-Control in response: " + cacheControl);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
request.setHeader("Cache-Control", "max-age=3600")
লাইনটি দিয়ে ক্লায়েন্টের রিকোয়েস্টে Cache-Control হেডার সেট করা হয়েছে, যেখানে max-age=3600
মানে হলো রিকোয়েস্টের জন্য 1 ঘণ্টা পর্যন্ত ক্যাশড রেসপন্স ব্যবহার করা যাবে।Cache-Control: no-cache
ব্যবহার করবেন।Cache-Control: no-store
ব্যবহার করবেন।Cache-Control: private, max-age=600
।Cache-Control: public, max-age=86400
(24 ঘণ্টা)।Apache HTTP Client-এ Cache-Control হেডারের মাধ্যমে ক্যাশিং কনফিগার করা হয়। এটি সার্ভার থেকে প্রাপ্ত রেসপন্সের ক্যাশিং আচরণ নিয়ন্ত্রণ করতে সহায়ক। হেডারে বিভিন্ন ডিরেকটিভ যেমন max-age
, no-cache
, private
, এবং public
ব্যবহার করা যেতে পারে। এই হেডারের মাধ্যমে আপনি রিকোয়েস্ট এবং রেসপন্সের ক্যাশিং কৌশল নির্ধারণ করতে পারেন, যা কর্মক্ষমতা উন্নত করতে এবং অপ্রয়োজনীয় নেটওয়ার্ক ট্র্যাফিক কমাতে সাহায্য করে।
Conditional Requests হল HTTP প্রোটোকলে এমন অনুরোধ, যা শুধুমাত্র নির্দিষ্ট শর্ত পূরণ হলে সার্ভার থেকে রেসপন্স প্রাপ্ত হয়। এটি সাধারণত ব্রাউজার বা ক্লায়েন্টের জন্য উপকারী, কারণ এটি শুধুমাত্র সেই তথ্য পুনরায় পেতে সাহায্য করে যা পরিবর্তিত হয়েছে, বা যা আগে সংগ্রহ করা হয়নি। এটি নেটওয়ার্ক ট্রাফিক এবং সার্ভারের লোড কমাতে সহায়ক।
এগুলির মধ্যে প্রধান শর্তাবলী হল If-Modified-Since এবং ETag। এগুলি সার্ভারের কাছে একটি অনুরোধ পাঠানোর সময় কন্ডিশনাল চেক করতে ব্যবহৃত হয়। যদি শর্তটি পূর্ণ হয়, তবে সার্ভার রেসপন্স ফেরত দেয়; যদি না হয়, তবে ক্লায়েন্টকে পুরোনো বা অপরিবর্তিত তথ্য পাঠানো হয়।
Apache HTTP Client-এ If-Modified-Since এবং ETag হ্যান্ডেল করার জন্য, আমরা সাধারণত HttpGet
বা HttpRequestBase
ব্যবহার করি এবং কাস্টম হেডার যোগ করি। নিচে উদাহরণ দেওয়া হল কিভাবে এই কন্ডিশনাল রিকোয়েস্টগুলি ব্যবহৃত হতে পারে।
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();
}
}
}
httpGet.setHeader("If-Modified-Since", lastModified.toString());
lastModified
একটি Date
অবজেক্ট যা গত 24 ঘণ্টার আগে সেট করা হয়েছে। এটি সার্ভারকে বলে যে, কেবলমাত্র যদি রিসোর্সটি গত 24 ঘণ্টায় পরিবর্তিত হয়ে থাকে, তবেই নতুন কন্টেন্ট পাঠানো হবে।httpGet.setHeader("If-None-Match", etag);
etag
একটি স্ট্রিং যা সার্ভার থেকে প্রাপ্ত আগের ETag সনাক্তকারী ধারণ করে। এটি নিশ্চিত করে যে, কেবলমাত্র যদি রিসোর্সের সংস্করণ পরিবর্তিত হয়, তবেই সার্ভার থেকে নতুন কন্টেন্ট ফেরত আসবে।if (statusCode == 200)
চেক করে যদি রেসপন্স কোড 200 হয়, তবে নতুন কন্টেন্ট প্রদর্শিত হয়।else if (statusCode == 304)
চেক করে যদি রেসপন্স কোড 304 (Not Modified) হয়, তবে সার্ভার জানাচ্ছে যে রিসোর্স পরিবর্তিত হয়নি এবং ক্লায়েন্টকে পুরানো কন্টেন্ট ব্যবহার করার জন্য বলা হচ্ছে।Conditional Requests হল HTTP অনুরোধের একটি অত্যন্ত কার্যকরী কৌশল, যা রিসোর্সের পরিবর্তন সনাক্ত করে ক্লায়েন্টকে পুরানো বা অপরিবর্তিত কন্টেন্ট ফেরত পাঠাতে সহায়ক। Apache HTTP Client ব্যবহার করে If-Modified-Since এবং ETag হেডার সেট করা যায়, যা সার্ভার থেকে শুধুমাত্র পরিবর্তিত কন্টেন্ট প্রাপ্তি নিশ্চিত করে এবং নেটওয়ার্কের কার্যকারিতা বৃদ্ধি করে।
Cache Response Management হল একটি কার্যকরী পদ্ধতি যা ক্লায়েন্টের মধ্যে HTTP response-গুলি ক্যাশে করতে সহায়ক, যাতে পরবর্তী একই ধরনের request পাঠানোর সময় সার্ভার থেকে পুনরায় একই response নিতে না হয়। এটি সার্ভারের উপর অপ্রয়োজনীয় লোড কমাতে এবং অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করতে সাহায্য করে। Apache HTTP Client এ ক্যাশে ব্যবস্থাপনা করতে HTTP Cache সমর্থন করার জন্য HttpCache
এবং CacheManager
ব্যবহার করা হয়।
Apache HTTP Client এ cache management কার্যকরী করতে HttpClientCache এবং CacheManager ব্যবহার করতে হয়। ক্যাশে ব্যবস্থাপনা করতে HttpCache
এবং CacheManager
কনফিগারেশন ব্যবহৃত হয়, যা HTTP response ক্যাশে করতে এবং প্রয়োজন অনুযায়ী তা রিট্রিভ করতে সহায়ক।
import org.apache.http.HttpEntity;
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.cache.CacheConfig;
import org.apache.http.impl.client.cache.CachingHttpClient;
import org.apache.http.impl.client.cache.FileSystemCacheStorage;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.HttpHeaders;
import org.apache.http.util.EntityUtils;
import java.io.File;
public class HttpClientCacheExample {
public static void main(String[] args) {
// Set Cache directory
File cacheDirectory = new File("httpcache");
if (!cacheDirectory.exists()) {
cacheDirectory.mkdir(); // Create the cache directory if it doesn't exist
}
// Cache Configuration
CacheConfig cacheConfig = CacheConfig.custom()
.setMaxCacheEntries(1000) // Maximum cache entries
.setMaxObjectSize(1024 * 1024) // Maximum object size to cache (1 MB)
.build();
// Pooling Connection Manager for Connection Pooling
PoolingHttpClientConnectionManager poolingConnManager = new PoolingHttpClientConnectionManager();
// Create a CachingHttpClient
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(poolingConnManager) // Apply Connection Manager
.setDefaultRequestConfig(RequestConfig.custom()
.setConnectTimeout(5000) // Connection timeout
.setSocketTimeout(10000) // Socket timeout
.build())
.addInterceptorFirst(new CachingHttpResponseInterceptor()) // Cache response
.build();
// CachingHttpClient for HTTP Cache Management
CachingHttpClient cachingHttpClient = new CachingHttpClient(httpClient, cacheConfig, new FileSystemCacheStorage(cacheDirectory));
// Send a GET request and manage cache
String url = "https://jsonplaceholder.typicode.com/posts";
try {
HttpGet httpGet = new HttpGet(url);
httpGet.setHeader(HttpHeaders.USER_AGENT, "ApacheHttpClientCacheDemo");
// Send the request and get the response
HttpResponse response = cachingHttpClient.execute(httpGet);
// Handle the response
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("Response Code: " + statusCode);
HttpEntity entity = response.getEntity();
if (entity != null) {
String responseBody = EntityUtils.toString(entity);
System.out.println("Response Body: " + responseBody);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
CacheConfig
ব্যবহার করে ক্যাশে কনফিগার করা হয়, যেমন max cache entries (কতগুলি response ক্যাশে থাকবে) এবং max object size (কত বড় response ক্যাশে করা যাবে)।setMaxCacheEntries(1000)
: ক্যাশে সর্বোচ্চ 1000টি entry রাখা যাবে।setMaxObjectSize(1024 * 1024)
: ক্যাশে প্রতিটি object এর সাইজ 1MB এর বেশি হতে পারবে না।FileSystemCacheStorage
ব্যবহার করে ক্যাশে ফাইল সিস্টেমে সংরক্ষিত হয়। cacheDirectory
হল সেই ডিরেক্টরি যেখানে ক্যাশে ফাইলগুলি সঞ্চিত থাকবে।CachingHttpClient
মূল HttpClient
কে কাস্টম ক্যাশ কনফিগারেশন এবং ক্যাশ স্টোরেজের সাথে কনফিগার করে। এর মাধ্যমে HTTP response ক্যাশে করা হয় এবং পরে একই request আসলে ক্যাশে থেকে response ফেরত দেওয়া হয়।HttpGet
ব্যবহার করে HTTP GET request পাঠানো হয়েছে এবং response ক্যাশে পরিচালনা করা হয়েছে। CachingHttpResponseInterceptor
এর মাধ্যমে ক্যাশে response intercept করা হয়।Cache-Control
header ব্যবহার করা হয়, যা ক্যাশে করার শর্তাবলী নিয়ন্ত্রণ করে। উদাহরণস্বরূপ, Cache-Control: max-age=3600
মানে response 1 ঘণ্টা পর্যন্ত ক্যাশে থাকবে।Apache HttpClient এর মাধ্যমে Cache Response Management কার্যকর করতে CachingHttpClient এবং CacheConfig ব্যবহার করা হয়। এর মাধ্যমে HTTP response ক্যাশে করে রাখা হয়, যা পরবর্তী একে অপরের জন্য পুনরায় ব্যবহৃত হতে পারে। এটি পারফরম্যান্স উন্নত করতে এবং সার্ভারের ওপর লোড কমাতে সহায়ক।
common.read_more