在我的GAE应用程序中,我按如下方式提供静态内容(这些是我在app.yaml文件中的条目):
handlers:
- url: /css
static_dir: static/css
expiration: "10m"
- url: /js
static_dir: static/js
expiration: "10m"
尽管此处提供了相关信息:https://developers.google.com/appengine/docs/python/config/appconfig#expiration无论是使用开发服务器还是上传我的应用,内容都不会在浏览器中缓存。
我正在使用Chrome,请求标题为:
cache-control:max-age=0
,响应标题为:
cache-control:no-cache, must-revalidate
pragma:no-cache
server:Google Frontend
status:304 Not Modified
根据我能够找到的一些答案,我通过登录和退出我的谷歌管理员帐户进行了测试,但没有任何变化。
对此的任何帮助将不胜感激。非常感谢!
退出管理员帐户时收到的响应标头:
date:Fri, 25 Apr 2014 09:54:44 GMT
etag:"lhoIow"
server:Google Frontend
status:304 Not Modified
version:HTTP/1.1
答案 0 :(得分:3)
GAE应该可以正常使用#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
int value;
}Data;
/* Specs say that max_size should be an unsigned integer */
typedef struct{
size_t max_size; //initialize to 0
size_t current_size; //initialize to 0
Data *data; // array of integers we're storing
} Vector;
/* Modified function */
Vector * initVector(void){
Vector *v = malloc(sizeof(*v));
v->max_size=0;
v->current_size=0;
v->data = NULL;
return v;
}
int vectorInsert(Vector * array, size_t index, Data value)
{
if(index >= array->max_size)
{
array->max_size = index * 2 + 1;
printf("Inside Vect max_size is : %zu\n", array->max_size);
Data *new_array = malloc(sizeof(Data) * array->max_size);
/* Added check for allocation error */
if (new_array == NULL)
return 0;
if(array->data != NULL)
{
memcpy(new_array, array->data, sizeof(Data)*array->current_size);
free(array->data);
array->data = NULL;
}
array->data = new_array;
}
array->data[index] = value;
printf("Main : %d\n", array->data[index].value);
/* Modified current_size increment logic */
if(array->current_size <= index)
{
array->current_size += 1;
}
/* Successful insertion */
return 1;
}
int main(void)
{
size_t i;
Vector *vect = initVector();
Data data_array[20];
Data test_insert = { -5 }; // to test index insertion
for(i = 0 ; i < 20 ; i++){
data_array[i].value = (rand() % 20) + 1;
vectorInsert(vect, i, data_array[i]);
}
/* Display results */
printf("vect->max_size = %zu\n", vect->max_size);
printf("vect->current_size = %zu\n", vect->current_size);
printf("vect->data contains:\n");
for (i = 0; i < vect->current_size; i++)
printf("%d ", vect->data[i].value);
putchar('\n');
/* Insert test_insert at index 5 */
vectorInsert(vect, 5, test_insert);
/* Display results */
printf("vect->max_size = %zu\n", vect->max_size);
printf("vect->current_size = %zu\n", vect->current_size);
printf("vect->data contains:\n");
for (i = 0; i < vect->current_size; i++)
printf("%d ", vect->data[i].value);
putchar('\n');
/* Free memory allocations */
free(vect->data);
free(vect);
return 0;
}
值。
最有可能的原因是您使用谷歌管理员帐户登录。
GAE为此类帐户返回vect->max_size = 31
vect->current_size = 20
vect->data contains:
4 7 18 16 14 16 7 13 10 2 3 8 11 20 4 7 1 7 13 17
vect->max_size = 31
vect->current_size = 20
vect->data contains:
4 7 18 16 14 -5 7 13 10 2 3 8 11 20 4 7 1 7 13 17
。
尝试在隐身模式中打开同一页面会返回正确的缓存到期时间。
默认情况下,GAE将缓存设置为10分钟,因此即使您没有设置任何到期时间 - 您应该看到10分钟而不是无缓存。
答案 1 :(得分:1)
在上面的Martijn提示后,我将app.yaml中的过期值更改为:
handlers:
- url: /css
static_dir: static/css
expiration: "0d 10m"
- url: /js
static_dir: static/js
expiration: "0d 10m"
现在一切都按预期工作,我得到以下标题作为回应:
cache-control:public, max-age=600
content-encoding:gzip
现在一切似乎都按预期工作了。