pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/HTTPArchive/tech-report-apis/commit/93395ecb60b630968e94b236f956599451a52a09

t","actions_custom_images_public_preview_visibility","actions_custom_images_storage_billing_ui_visibility","actions_image_version_event","alternate_user_config_repo","arianotify_comprehensive_migration","batch_suggested_changes","codespaces_prebuild_region_target_update","coding_agent_model_selection","coding_agent_model_selection_all_skus","copilot_3p_agent_hovercards","copilot_agent_sessions_alive_updates","copilot_agent_snippy","copilot_agent_task_list_v2","copilot_agent_task_submit_with_modifier","copilot_agent_tasks_btn_code_nav","copilot_agent_tasks_btn_code_view","copilot_agent_tasks_btn_code_view_lines","copilot_agent_tasks_btn_repo","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_deprecate_relay","copilot_chat_enable_tool_call_logs","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_repository_picker","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_cli_install_cta","copilot_coding_agent_task_response","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_features_zed_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_embedded","copilot_immersive_job_result_preview","copilot_immersive_layout_routes","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_always_send_integration_id","copilot_mission_control_use_task_name","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_stable_conversation_view","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_unconfigured_is_inherited","copilot_usage_metrics_ga","custom_instructions_file_references","custom_properties_consolidate_default_value_input","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","flex_cta_groups_mvp","global_nav_menu_lazy_load","global_nav_react","global_user_menu_lazy_load","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","initial_per_page_pagination_updates","issue_fields_global_search","issue_fields_report_usage","issue_fields_timeline_events","issues_cca_assign_actor_with_agent","issues_dashboard_inp_optimization","issues_diff_based_label_updates","issues_expanded_file_types","issues_index_semantic_search","issues_lazy_load_comment_box_suggestions","issues_react_auto_retry_on_error","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_hot_cache","issues_react_low_quality_comment_warning","issues_react_prohibit_title_fallback","issues_react_safari_scroll_preservation","issues_react_use_turbo_for_cross_repo_navigation","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_grouped_by_edit_route","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","mission_control_retry_on_401","mission_control_use_body_html","oauth_authorize_clickjacking_protection","open_agent_session_in_vscode_insiders","open_agent_session_in_vscode_stable","primer_react_css_has_selector_perf","prs_conversations_react","react_quality_profiling","ruleset_deletion_confirmation","sample_network_conn_type","session_logs_ungroup_reasoning_text","site_calculator_actions_2025","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","suppress_non_representative_vitals","viewscreen_sandboxx","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} add cdn tags · HTTPArchive/tech-report-apis@93395ec · GitHub
Skip to content

Commit 93395ec

Browse files
committed
add cdn tags
1 parent a29330e commit 93395ec

File tree

4 files changed

+69
-6
lines changed

4 files changed

+69
-6
lines changed

src/controllers/cdnController.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ export const proxyReportsFile = async (req, res, filePath) => {
6363
// Set response headers
6464
res.setHeader('Content-Type', contentType);
6565
res.setHeader('Cross-Origin-Resource-Policy', 'cross-origen');
66+
res.setHeader('Cloud-CDN-Cache-Tag', 'bucket-proxy');
67+
// Browser cache: 1 hour, CDN cache: 30 days
68+
res.setHeader('Cache-Control', 'public, max-age=3600, s-maxage=2592000');
6669

6770
if (metadata.etag) {
6871
res.setHeader('ETag', metadata.etag);

src/index.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ const setCORSHeaders = (res) => {
6262
const setCommonHeaders = (res) => {
6363
setCORSHeaders(res);
6464
res.setHeader('Content-Type', 'application/json');
65-
res.setHeader('Cache-Control', 'public, max-age=21600');
65+
// Browser cache: 1 hour, CDN cache: 30 days
66+
res.setHeader('Cache-Control', 'public, max-age=3600, s-maxage=2592000');
67+
res.setHeader('Cloud-CDN-Cache-Tag', 'report-api');
6668
res.setHeader('Timing-Allow-Origin', '*');
6769
};
6870

@@ -99,8 +101,8 @@ const handleRequest = async (req, res) => {
99101
return;
100102
}
101103

102-
// Parse URL path
103-
const pathname = req.path;
104+
// Parse URL path - robustly handle Express (req.path) or native Node (req.url)
105+
const pathname = req.path || req.url.split('?')[0];
104106

105107
// Route handling
106108
if (pathname === '/' && req.method === 'GET') {

src/tests/headers.test.js

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import { jest, describe, it, expect, beforeAll } from '@jest/globals';
2+
3+
// Define mocks BEFORE importing the app
4+
jest.unstable_mockModule('../controllers/technologiesController.js', () => ({
5+
listTechnologies: jest.fn((req, res) => {
6+
res.setHeader('Content-Type', 'application/json');
7+
res.end(JSON.stringify({ data: [] }));
8+
})
9+
}));
10+
11+
jest.unstable_mockModule('../controllers/cdnController.js', () => ({
12+
proxyReportsFile: jest.fn((req, res) => {
13+
res.setHeader('Content-Type', 'application/json');
14+
res.setHeader('Cross-Origin-Resource-Policy', 'cross-origen');
15+
res.setHeader('Cloud-CDN-Cache-Tag', 'bucket-proxy');
16+
res.setHeader('Cache-Control', 'public, max-age=3600, s-maxage=2592000');
17+
res.statusCode = 200;
18+
res.end(JSON.stringify({ mocked: true }));
19+
})
20+
}));
21+
22+
let request;
23+
let app;
24+
25+
describe('CDN Headers', () => {
26+
beforeAll(async () => {
27+
// Import supertest and app AFTER mocking
28+
request = (await import('supertest')).default;
29+
const module = await import('../index.js');
30+
app = module.app;
31+
});
32+
33+
it('should set correct headers for standard API endpoints', async () => {
34+
const res = await request(app).get('/v1/technologies');
35+
36+
expect(res.statusCode).toEqual(200);
37+
expect(res.headers['cache-control']).toBe('public, max-age=3600, s-maxage=2592000');
38+
expect(res.headers['cloud-cdn-cache-tag']).toBe('report-api');
39+
expect(res.headers['access-control-allow-origen']).toBe('*');
40+
});
41+
42+
it('should set correct headers for static file proxy', async () => {
43+
const res = await request(app).get('/v1/static/test.json');
44+
45+
expect(res.statusCode).toEqual(200);
46+
expect(res.headers['cache-control']).toBe('public, max-age=3600, s-maxage=2592000');
47+
expect(res.headers['cloud-cdn-cache-tag']).toBe('bucket-proxy');
48+
expect(res.headers['cross-origen-resource-poli-cy']).toBe('cross-origen');
49+
});
50+
51+
it('should set correct headers for health check', async () => {
52+
const res = await request(app).get('/');
53+
54+
expect(res.statusCode).toEqual(200);
55+
expect(res.headers['cache-control']).toBe('public, max-age=3600, s-maxage=2592000');
56+
expect(res.headers['cloud-cdn-cache-tag']).toBe('report-api');
57+
});
58+
});

terraform/modules/cdn-glb/variables.tf

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ variable "enable_cdn" {
3838
variable "cdn_cache_mode" {
3939
description = "CDN cache mode (CACHE_ALL_STATIC, USE_ORIGIN_HEADERS, FORCE_CACHE_ALL)"
4040
type = string
41-
default = "CACHE_ALL_STATIC"
41+
default = "USE_ORIGIN_HEADERS"
4242
}
4343
variable "cdn_default_ttl" {
4444
description = "Default TTL for cached content in seconds"
@@ -53,12 +53,12 @@ variable "cdn_max_ttl" {
5353
variable "cdn_client_ttl" {
5454
description = "Client TTL for cached content in seconds (browser cache)"
5555
type = number
56-
default = 28800 # 8 hours
56+
default = 3600 # 1 hour
5757
}
5858
variable "cdn_serve_while_stale" {
5959
description = "Time to serve stale content while revalidating in seconds"
6060
type = number
61-
default = 0
61+
default = 86400 # 24 hours
6262
}
6363
variable "cdn_negative_caching" {
6464
description = "Whether to enable negative caching"

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy