HTTP中的请求头和响应头属性解析

HTTP中的请求头和响应头属性解析

下面总结一下平时web开发中,HTTP请求的相关过程以及重要的参数意义

一次完整的HTTP请求所经历的7个步骤

说明:HTTP通信机制是在一次完整的HTTP通信过程中,web浏览器与web服务器之间将完成下列7个步骤:

       1.  建立TCP连接

       2.  Web浏览器向web服务器发送请求命令  例如:GET /sample/hello.jsp HTTP 1.1

       3.  Web浏览器发送请求头信息

       4.  Web服务器应答  例如:HTTP/1.1 200 ok

       5.  Web服务器发送应答头信息

       6.  Web服务器向浏览器发送数据

       7.  Web服务器关闭TCP连接

一、General  Headers 通用信息头

  既能用于请求消息中,也能用于响应信息中,但与被传输的实体内容没有关系的信息头。

    

       1.  Request  URL         请求的地址

       2.  Request  Method    请求的方法类型

       3.  Status  Code          响应状态码

       4.  Remote  Address    表示远程服务器地址       

       5.  Referrer Policy        用于指定浏览器在发送referrer信息时的策略

        rel 属性只能定制单个元素的Referer行为,而且选择比较少,只能发送或不发送。W3C 为此制定了更强大的 Referrer Policy。

        Referrer Policy 可以设定8个值。

        1)no-referrer   不发送Referer字段。

        2)no-referrer-when-downgrade

        如果从 HTTPS 网址链接到 HTTP 网址,不发送Referer字段,其他情况发送(包括 HTTP 网址链接到 HTTP 网址)。这是浏览器的默认行为。

        其他的值,这里就不做介绍了,感兴趣的可以自行查看相关资料。

二、Response Headers   响应头

 

    1.  Content-Length      响应体的长度

    2.  Content-Type        响应的MIME类型与字符编码:告诉浏览器它发送的数据属于什么文件类型   

    3.  Content-Encoding  响应的内容编码格式

    4.  Cache-Control       指定响应遵循的缓存机制

  •     public       响应可被任何缓存区缓存
  •     private      对于单个用户的整个或部分响应消息,不能被共享缓存处理
  •     no-cache  表示响应消息不能缓存

    5.  date         原始服务器消息发出的时间

    6.  Server        web服务器软件名称

    7.  Last-Modified   标记请求的资源在服务器端最后被修改的时间

三、Request  Headers  请求头

       

       1.   Accept        告诉服务器可以接受的文件格式。根据Accept头的不同,按照相应的顺序进行produces的匹配。

       2.   Accept-Encoding  gzip,deflate,sdch,br 指定浏览器可以支持的web服务器返回的内容压缩编码类型

       3.   Accept-Language  浏览器支持的语言

       4.   Cache-Control   指定请求遵循的缓存机制

  •    public       请求信息可被任何缓存区缓存
  •    private      对于单个用户的整个或部分请求消息,不能被共享缓存处理
  •    no-cache  表示请求消息不能缓存

       5.   Connection  用于控制是否在完成请求/响应后关闭网络连接 

        1) keep-alive:表示客户端希望与服务器保持持久连接,以便在同一连接上发送多个请求和接收多个响应。这样可以减少连接的建立和关闭开销,提高性能。

      说明:使用同一个 TCP 连接来发送和接收多个 HTTP 请求/应答,避免了连接建立和释放的开销,这个方法称为 HTTP 长连接

       2) close:表示客户端要求在完成当前请求/响应后立即关闭连接。这意味着每次请求都会建立一个新的连接。

       3) Upgrade:用于升级协议,通常与WebSocket协议相关,表示客户端希望升级到WebSocket协议。

       4) keep-alive, Upgrade:表示同时启用持久连接和协议升级。

       6.   Cookie        HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器

       7.   Host         指定请求的服务器的域名和端口号

       8.   Referer       告诉服务器是从哪个网站链接过来的,提供访问来源的信息

       1) 拼写问题

       Referer的正确拼写是Referrer,但是写入标准的时候,不知为何,没人发现少了一个字母r。标准定案以后,只能将错就错,所有头信息的该字段都一律错误拼写成Referer。

       2)可选字段

       这个字段是可选的。客户端发送请求的时候,自主决定是否加上该字段。浏览器提供一系列手段,允许改变默认的Referer行为。

       对于用户来说,可以改变浏览器本身的全局设置,也可以安装浏览器扩展。这里就不详细介绍了。

       对于开发者来说,rel="noreferrer"属性是最简单的一种方法。<a>、<area>和<form>三个标签可以使用这个属性,一旦使用,该元素就不会发送Referer字段。

       3)应用场景

一个典型的应用是,防盗链:有些网站不允许图片外链,只有自家的网站才能显示图片,外部网站加载图片就会报错。它的实现就是基于Referer字段,如果该字段的网址是自家网址,就放行。

       4)不适合使用的情况

      由于涉及隐私,很多时候不适合发送Referer字段。

      这里举两个例子,都不适合暴露 URL。一个是功能 URL,即有的 URL 不要登录,可以访问,就能直接完成密码重置、邮件退订等功能。另一个是内网 URL,不希望外部用户知道内网有这样的地址。Referer字段很可能把这些 URL 暴露出去。

       9.   User-Agent     用户代理:简称UA。内容包含发出请求的用户信息,使得服务器能够识别客户端使用的操作系统及版本、CPU类型、浏览器及版本、浏览器渲染引擎、浏览器语言、插件等。

       10.  Authorization   当客户端访问受口令保护时,服务器端会发送401状态码和www-authenticate 响应,要求客户端使用Authorization来应答 

 

参考链接:

http://www.ruanyifeng.com/blog/2019/06/http-referer.html

 

posted @ 2019-05-14 12:24  欢乐豆123  阅读(5057)  评论(0编辑  收藏  举报