无法在app.yaml中为python应用程序设置缓存过期

时间:2014-04-25 09:53:15

标签: python google-app-engine caching

在我的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

2 个答案:

答案 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

现在一切似乎都按预期工作了。