HTTP常见头部

293 阅读4分钟

请求头相关:

  • User-Agent:用户代理字符串,可以读到浏览器的内核,版本,所在操作系统的版本等信息。

  • Host:浏览器是用什么域名进行的该次http请求。

    因为一个服务器上可以有多个网站,不同的网站域名不同,但此种情况下ip是相同的,对于客户端来说,连接的ip就是相同的,而ip是在连接之前就解析的,在tcp/ip层服务器是不知道对方用什么域名连接的自己。

    GET /index.html HTTP/1.1  
    Host: lily.github.io
    
  • Referer:当前资源的引用者是哪个页面(当前请求的资源取回来后被哪个页面使用)。

    可以实现防盗链,即如果服务器通过此头发现资源返回后是被别家网站使用,则可以返回空内容,或者返回一个版权声明的图片(仅对图片请求适用)。

    由于会把当前用户地址栏里的完全地址发给资源所在服务器, 有一定的隐私风险,现在可以通过一些手段禁止浏览器发Referer头

  • Accept:可以接受的资源的媒体类型,其中q的值代表期望值的大小。

  • Accept-Encoding:可以接受的资源的响应体的压缩算法。

  • Accept-Language:期望接收的页面的自然语言的语种。q同上

  • Content-Type:请求体/响应体的媒体类型及编码方式

    text/html; charset=UTF-8
    application/javascript; charset=UTF-8
    application/json; charset=UTF-8
    image/jpeg
    image/webp 
    
  • If-Modified-Since/Last-Modified :基于时间的协商缓存,协商成功的话返回304状态码。

  • If-None-Match/ETag:基于内容的协商缓存,协商成功的话返回304状态码。

  • Content-Length:请求体的长度。

  • Connection: keep-alive,协商承载该http请求的tcp连接的状态,以在同一个tcp上执行多个http请求/响应,需要配合Content-Length使用。

    • Pipeline:管线化请求/响应,即无需等待响应收到后再在同一个连接上发下一个请求,而是可以一次性把所有请求都发过去,等待所有响应按序收到。

响应投相关:

  • Date:日期

  • Content-Encoding:响应体的压缩算法

  • Content-Length:响应体的长度(如果压缩则是压缩之后的长度)

  • Content-Type:响应体的媒体类型及编码方式

  • ETag:响应体的哈希值

  • Last-Modified:本资源的最后修改时间

  • Server:服务器所使用的软件,一般服务器是不会响应这个头的,因为如果某个服务器软件有漏洞,这么做相当于告诉别人服务器有漏洞。

  • Expires:本资源的过期时间,在这个过期时间之前,浏览器重新使用这个资源时可以不发请求。

  • Accept-Range:bytes(断电续传相关)

  • Referrer-Policy: origin-when-cross-origin,strict-origin-when-cross-origin

    设置浏览器发送Referer策略,只需要在html(即页面)的响应头里设置

  • Transfer-Encoding: chunked

    响应数据的传输方式,一段一段的发,当服务器无法预测响应体长度时使用。 当使用这个功能时,一个tcp上就只能走这一个http请求了,tcp连接断开时响应结束(有这个头时就没有Content-Length)。

  • content-disposition: attachment; filename="index.html"

    该响应头触发浏览器弹出下载对话框,并在对话框里填写默认文件名为filename。

  • X-Frame-Options:设置本页面能否被放入其它页面的iframe

    • deny:完全不允许被放入任何iframe。

    • same-origin:可以被放入同源页面的iframe里。

  • Content-Security-Policy:内容安全策略,只对html页面响应,设置本页面的各项安全相关的配置。

  • Cache-Control:缓存控制。

    可以做为请求头,也可以做为响应头,提供对缓存策略的精细控制,内容可以是给浏览器看的,也可以是给服务器看的,还可以是给中间服务器看。

例如:

default-src:'none';
    
base-uri:'self';
    
block-all-mixed-content;
禁用所有混合内容(即https页面里的http内容)
    
connect-src:'self' uploads.github.com www.githubstatus.comcollector.githubapp.com api.github.com www.google-analytics.comgithub-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com cdn.optimizely.com logx.optimizely.com/v1/events wss://alive.github.com;
页面里的js能够连接的目标服务器(ajax,其它方式的连接如websocket)
    
font-src:github.githubassets.com;
页面能够加载的字体来源
    
form-action:'self' github.com gist.github.com;
表单能够提交到的目标服务器

frame-ancestors:'none';
谁能做为本页面的frame祖先
    
frame-src:render.githubusercontent.com;
本页面的iframe可以加载来自哪里的页面
    
img-src:'self' data: github.githubassets.com identicons.github.com collector.githubapp.com github-cloud.s3.amazonaws.com *.githubusercontent.com customer-stories-feed.github.com spotlights-feed.github.com;
图片能够加载来自哪里的
    
manifest-src:'self';
manifest能够加载来自哪里的
    
media-src:'none';
media能够加载来自哪里的
    
script-src:github.githubassets.com;
脚本能够加载来自哪里的 
<div onclick="alert(2)"></div>//会报错,不允许内联,只允许服务器上的脚本。
    
style-src:github.githubassets.com;
样式能够加载来自哪里的
<div style="color:red"></div>;
    
worker-src:github.com/socket-worker.js gist.github.com/socket-worker.js
worker的代码能够加载来自哪里的