代码之家  ›  专栏  ›  技术社区  ›  Rotem jackoby

docker上的Nginx-Vary:缺少Accept编码头

  •  1
  • Rotem jackoby  · 技术社区  · 6 年前

    我正在为nginx的一个静态网站提供服务,它运行在 码头工人 基于 nginx:阿尔卑斯山 基本图像。

    我的卷宗文件:

    FROM nginx:alpine
    COPY --from=angular-built app/dist/dayTwoApp /usr/share/nginx/html
    COPY ./default.conf /etc/nginx/conf.d/default.conf
    

    default.conf文件:

    server {
       listen 80;
    
        gzip on;
        gzip_vary on;
        gzip_types    text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
    
        access_log  /var/log/nginx/access.log;
        error_log   /var/log/nginx/error.log;
    
        root /usr/share/nginx/html;
        index index.html index.htm;
    
        location / {
            try_files $uri $uri/ /index.html;
        }
    }
    

    我在一个服务的html文件的响应中看到了vary:Accept编码头(见下文)。

    但由于某些原因,我在js和css响应中看不到头部。

    (*)不起作用的相关参考资料:

    答复详情:

    html文件: enter image description here

    js文件(也用于css):

    enter image description here

    2 回复  |  直到 6 年前
        1
  •  1
  •   ET-CS    6 年前

    请尝试添加到nginx配置:

    gzip_proxied any
    gzip_types
        text/plain
        text/css
        text/js
        text/xml
        text/javascript
        application/javascript
        application/x-javascript
        application/json
        application/xml
        application/rss+xml
        image/svg+xml;
    

    (只有text/html类型的响应是 always compressed .)

        2
  •  0
  •   miknik    6 年前

    在第二个示例中,Nginx返回HTTP响应代码304,这表示内容没有从缓存副本中修改。根据HTTP规范:

    304响应不能包含消息体,因此总是 以标题字段后的第一个空行结束。

    响应必须包含以下头字段:

      - Date, unless its omission is required by section 14.18.1
      - ETag and/or Content-Location, if the header would have been sent
        in a 200 response to the same request
      - Expires, Cache-Control, and/or Vary, if the field-value might
        differ from that sent in any previous response for the same
        variant
    

    因此,如果原始缓存响应已经包含Vary头,那么这个304响应不包含Vary头是非常正确的。