热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于HTTPHeader的讨论

2019独角兽企业重金招聘Python工程师标准关于HTTPHeaders的讨论前些天由于一些编程需要,接触到了HTTPheader的有关知识,于

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

                    关于HTTP Headers的讨论  

            前些天由于一些编程需要,接触到了HTTPheader的有关知识,于是就本着学习的目的索性把这个东西弄个明白。今天在这里总结一下,希望能帮助到一些有这方面知识要求的同学,也方便自己在以后的学习中作参考。由于我也是第一次接触到这个东西,如果有什么错误的理解和表述希望大家可以热心的及时提出来,以免误导了更多看到这篇文章的人,也方便我自己及时更正自己的错误。

下面入正题。

WHAT IS HTTP

HTTP是“Hypertext Transfer Protocol”的缩写,是一个应用层协议,整个万维网都在使用这种协议,几乎你在浏览器里看到的大部分内容都是通过http协议来传输的。

WHAT  IS  HTTPHEADER

HTTP Headers(HTTP头部)HTTP请求和相应的核心,它承载了关于客户端浏览器,请求页面,服务器等相关的信息。

HTTP Headers 中的 HTTP请求

当我们打开浏览器,点击一个超级链接的时候(比如https://www.google.com.hk/ )此时浏览器会做出类似如下的HTTP请求

182309_82se_1446623.jpg

这个图是我在打开这个网页的时候用HTTP Analyzer抓取的

下面我们一行一行的来解释各句话的的意思 

第一行,被称作“Request - Line”请求行它包括三个部分:183210_xP6y_1446623.jpg 

I)第一个字段为“method” 它表明这是何种类型的请求最常见的请求类型有 GET,     POST 和 HEAD.学过WEB的应该比较熟悉这三种方法的区别与联系,此处使用的GET 方法,这也是浏览器中比较常用的方法

II)第二个字段为“path” 它体现的是主机之后的路径例如,当你做出请求 

      GET /webhp?hl=zh-CN&sourceid=cnh path HTTP/1.1path就是

 “/webhp?hl=zh-CN&sourceid=cnhes/.它表示获取/webhp?hl=zh-CN目录下资源ID   cnhes的页面,再如GET /images/logo.gif HTTP/1.1,表示从/images目录下请求logo.gif   动态图片文件。

 III)第三个字段为“protocol” 包含有 “HTTP” 和版本号现代浏览器都会使用1.1.


剩下的部分每行都是一个“Name:Value”对。它们包含了各式各样关于请求和你浏览器的信息

    第二行,字段如下 183210_9nu2_1446623.jpg它指明了主机的名称很显然这是Googleweb服务器;


    第三行,字段如下183210_XglP_1446623.jpg它表明了链接状态

        如果为close 则表示告诉WEB服务器或者代理服务器,在完成本次请求的响应后,断开连接,不要等待本次连接的后续请求了;

        Keepalive 则表示告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求。

        Keep-Alive:如果浏览器请求保持连接,则该头部表明希望 WEB 服务器保持连接多长时间(秒)。例如:Keep-Alive:300


    第四行,183210_iJ4e_1446623.jpg

        是在告诉web服务器自己接受什么样的介质text/html表示接受text文档下的子文档html文档,*/*表示接受所有的文档


    第五行183210_vZSE_1446623.jpg

                它指明了  

                1、浏览器名,版本号,Moziall/5.0 Chrome/31.0.1650.63 Safari/537.36AppleWebKit/537.36 (KHTML, like Gecko)

                2、操作系统名,版本号Windows NT 6.1; WOW64

                3、默认的)语言等

    第六行,183210_uo75_1446623.jpg这应该是Chrome的一些变量参数,我也不太清楚这个东西

 

    第七行,183210_8T7o_1446623.jpg表示可以接受的编码,大部分的现代浏览器都支持gzip压缩,并会把这一信息报告给服务器。这时服务器就会压缩过的HTML发送给浏览器。

            这可以减少近80%的文件大小,以节省下载时间和带宽。

    第八行,183210_J1f1_1446623.jpg表示支持的语言

            这个信息可以说明用户的默认语言设置。如果网站有不同的语言版本,那么就可以通过这个信息来重定向用户的浏览器。它还可以通过逗号分割来携带多国语言。第一个会是首选的语                 言,其它语言会携带一个“q”值,来表示用户对该语言的喜好程度(0~1)。

        第九行,

        183210_i50v_1446623.jpg 

        是有关COOKIE的说明

 

    另外,还可能有如下字段一并整理如下

    Referer字段

      Referer字段允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。

        如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。

    Range字段

          Range字段可以请求实体的一个或者多个子范围。例如,

          表示头500个字节:bytes=0-499

          表示第二个500字节:bytes=500-999

          表示最后500个字节:bytes=-500

          表示500字节以后的范围:bytes=500-

          第一个和最后一个字节:bytes=0-0,-1

      同时指定几个范围:bytes=500-600,601-999

      但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200(OK)。

 

HTTP Headers 中的 HTTP响应

                这是HTTP响应的Header部分

                183211_84l7_1446623.jpg 

                第一行,“Status Header”称为状态行HTTP/1.1 302 Found意思是说,请求的资源现在临时从不同的 URI 响应请求。

                由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求,下附HTTP状态码表 

状态码

已定义范围

分类

1XX

100-101

信息提示

2XX

200-206

成功

3XX

300-305

重定向

4XX

400-415

客户端错误

5XX

500-505

服务器错误

                下面是详细更的解释    

   I)1XX信息状态码

状态码

 状态消息

 含义

100

Continue(继续)

收到了请求的起始部分,客户端应该继续请求

101

Switching Protocols(切换协议)

服务器正根据客户端的指示(Update Header)切换协议

  II)2XX成功状态码

状态码

状态消息

含义

200

OK

服务器成功处理了请求(这个是我们见到最多的)

201

Created(已创建)

对于那些要服务器创建对象的请求来说,资源已创建完毕。

202

Accepted(已接受)

请求已接受, 但服务器尚未处理

203

Non-Authoritative Information(非权威信息)

服务器已将事务成功处理,只是实体Header包含的信息不是来自原始服务器,而是来自资源的副本。

204

No Content(没有内容)

Response中包含一些Header和一个状态行, 但不包括实体的主题内容(没有response body)

205

Reset Content(重置内容)

 另一个主要用于浏览器的代码。意思是浏览器应该重置当前页面上所有的HTML表单。

206

Partial Content(部分内容)

 部分请求成功             

  III)3XX成功状态码

状态码

状态消息

含义

300

Multiple Choices(多项选择)

 客户端请求了实际指向多个资源的URL。这个代码是和一个选项列表一起返回的,然后用户就可以选择他希望的选项了

301

Moved Permanently(永久移除)

请求的URL已移走。Response中应该包含一个Location URL, 说明资源现在所处的位置

302

Found(已找到)

与状态码301类似。但这里的移除是临时的。 客户端会使用Location中给出的URL,重新发送新的HTTP request

303

 See Other(参见其他)

类似302

304

Not Modified(未修改)

客户的缓存资源是最新的, 要客户端使用缓存

305

 Use Proxy(使用代理)

必须通过代理访问资源, 代理的地址在Response Location

306

 未使用

 这个状态码当前没使用

307

Temporary Redirect(临时重定向

类似302

                 

                IV)客户端错误状态码

状态码

状态消息

含义

400

Bad Request(坏请求)

告诉客户端,它发送了一个错误的请求。

401

Unauthorized(未授权)

需要客户端对自己认证

402

Payment Required(要求付款)

这个状态还没被使用, 保留给将来用

403

Forbidden(禁止)

请求被服务器拒绝了

404

Not Found(未找到)

未找到资源

405

Method Not Allowed(不允许使用的方法)

不支持该Request的方法。

406

Not Acceptable(无法接受)


407

Proxy Authentication Required(要求进行代理认证)

与状态码401类似, 用于需要进行认证的代理服务器

408

Request Timeout(请求超时)

 如果客户端完成请求时花费的时间太长, 服务器可以回送这个状态码并关闭连接

409

Conflict(冲突)

发出的请求在资源上造成了一些冲突

410

Gone(消失了)

服务器曾经有这个资源,现在没有了, 与状态码404类似

411

Length Required(要求长度指示)

服务器要求在Request中包含Content-Length

412

Precondition Failed(先决条件失败)


413

Request Entity Too Large(请求实体太大)

客户端发送的实体主体部分比服务器能够或者希望处理的要大

414

Request URI Too Long(请求URI太长)

客户端发送的请求所携带的URL超过了服务器能够或者希望处理的长度

415

Unsupported Media Type(不支持的媒体类型)

服务器无法理解或不支持客户端所发送的实体的内容类型

416

Requested Range Not Satisfiable(所请求的范围未得到满足)


417

Expectation Failed(无法满足期望)

            

                VI)服务器端错误状态码  

状态码

状态消息

含义

500

Internal Server Error(内部服务器错误)

服务器遇到一个错误,使其无法为请求提供服务

501

Not Implemented(未实现)

客户端发起的请求超出服务器的能力范围(比如,使用了服务器不支持的请求方法)时,使用此状态码。

502

Bad Gateway(网关故障)

代理使用的服务器遇到了上游的无效响应

503

Service Unavailable(未提供此服务)

服务器目前无法为请求提供服务,但过一段时间就可以恢复服务

504

Gateway Timeout(网关超时)

与状态吗408类似, 但是响应来自网关或代理,此网关或代理在等待另一台服务器的响应时出现了超时

505

HTTP Version Not Supported(不支持的HTTP版本)

服务器收到的请求使用了它不支持的HTTP协议版本。 有些服务器不支持HTTP早期的HTTP协议版本,也不支持太高的协议版本

                第二行,

                184024_3jd2_1446623.jpg

                这个头部是用来重定向的。如果响应代码为 301 或者 302 ,服务器就必须发送该头部。


                第三行,

                184356_PHa1_1446623.jpg

                184356_THQb_1446623.jpg

                Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。

                请求时的缓存指令包括no-cacheno-storemax-agemax-stalemin-freshonly-if-cached,响应消息中的指令包括publicprivateno-cacheno-storeno-transformmust-revalidateproxy-revalidatemax-age。各个消息中的指令含义如下:

                  Public指示响应可被任何缓存区缓存。

                  Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。

                  no-cache指示请求或响应消息不能缓存

                  no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。

                  max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。

                  min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。

                max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。            

                第四行,183211_ZuD1_1446623.jpg

                                这个头部包含了文档的”mime-type”。浏览器将会依据该参数决定如何对文档进行解析。                     

                                Content-Type: text/html; charset=UTF-8

                               text’ 是文档类型,‘html’则是文档子类型。 这个头部还包括了更多信息,例如 charset 指明了字符集;

                如果是一个图片,将会发送这样的响应:Content-Type: image/gif  浏览器可以通过mime-type来决定使用外部程序还是自身扩展来打开该文档。

                                如下的例子将会调用Adobe Reader:

                                Content-Type: application/pdf

                                直接载入,Apache通常会自动判断文档的mime-type并且添加合适的信息到头部去。

                        并且大部分浏览器都有一定程度的容错,在头部未提供或者错误提供该信息的情况下它会去自动检测mime-type        


           第五行,183211_4uZy_1446623.jpg很显然,这是指明了响应的时间(GMT为格林威治世界时间)。


           第六行,184634_B3rf_1446623.jpg

                Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序显然,Google使用的是自家的Google Web Server

                下附国内网站的Web服务器表

业名称

  Web服务器

说明

谷歌中国

   Gws

谷歌自主开发的Google Web Server

百度

   BWS

由百度自主开发的Baidu Web Server

人人网

  Ngnix

 由Igor Sysoev为俄罗斯访问量第二

 的Rambler.ru站点开发的

 

腾讯

  Ngnix


163

  Ngnix


淘宝

  Tengine

(已开源)

 

 

 Ngnix的一个变种

 

 

Sina

  Apache


搜狐

  Apache

Apache旗下的开源http服务器

开心网

  Apache


优酷

  Apache


                第七行,185613_nwAp_1446623.jpg

                  Content-Length: WEB 服务器告诉浏览器自己响应的对象的长度。

                剩下的部分是有关安全的一些字段,这里不做过多讨论(暂不清楚具体意思)

                有的还有Set-COOKIE字段

                Set-COOKIE:BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; path=/; domain=.baidu.com

                Set-COOKIE:BD_CK_SAM=1;path=/

                Set-COOKIE:BDSVRTM=175; path=/

                Set-COOKIE:H_PS_PSSID=5013_5141_5041_1422_4261_4760; path=/; domain=.baidu.com

                当一个网站需要设置或者更新你浏览的COOKIE信息时,它就会使用这样的头部           

      

                还有的会有这些字段

                183211_ov0s_1446623.jpg 

                其中ExpireWEB服务器表明该实体将在什么时候过期,对于过期了的对象,只有在跟 WEB服务器验证了其有效性后,才能用来响应客户请求。

                 Last-Modified 顾名思义,这个头部信息用GMT格式表明了文档的最后修改时间;         

                Etag 服务器可能会将该信息和每个被发送文件一起响应给浏览器。该值可以包含文档    的最后修改日期,文件大小或者文件校验和。这是一个对象(比如URL)的标志值, 就一个对                象而言,比如一个 html 文件,如果被修改了,其 Etag 也会别修改, 所以, ETag 的作用跟 Last-Modified 的作用差不多,主要供 WEB 服务器 判断一个对象是 否改变了。比如前一次请              求某个 html 文件时,获得了其 ETag,当这次又请求这个文 件时,浏览器就会把先前获得的 ETag 值发送给 WEB 服务器,然后 WEB 服务器会 把这个 ETag 跟该文件的当前 ETag 进行              对比,然后就知道这个文件   有没有改变了。

               还有如下字段

                If-Match:如果对象的 ETag 没有改变,其实也就意味著对象没有改变, 才执行请求的动作。

                If-None-Match:如果对象的 ETag 改变了,其实也就意味著对象也改变了,才执行请求的动作。

                对于Accept-Ranges

                WEB服务器表明自己是否接受获取其某个实体的一部分(比如文件的一部分)的请求。

                bytes:表示接受,none:表示不接受

                另外,还有

                Vary:Accept-Encoding    诉代理服务器缓存两种版本的资源:压缩和非压缩,这有助于避免一些公共代理不能正确地检测Content-Encoding标头的问题

                Transfer-Encoding:chunked 当不能预先确定报文体的长度时,不可能在头中包含Content-Length域来指明报文体长度,此时就需要通过Transfer-Encoding域来确定报文体长度,通常情况                               下,Transfer-Encoding域的值应当为chunked,表明采用chunked编码方式来进行报文体的传输。

                基本上关于HTTP Headers的内容就到这里了。希望可以帮助到大家!

 



转:https://my.oschina.net/v5871314/blog/197044



推荐阅读
  • Windows 7 64位系统下Redis的安装与PHP Redis扩展配置
    本文详细介绍了在Windows 7 64位操作系统中安装Redis以及配置PHP Redis扩展的方法,包括下载、安装和基本使用步骤。适合对Redis和PHP集成感兴趣的开发人员参考。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 本文详细介绍如何使用CSS自定义HTML5视频播放器的样式,涵盖常见属性及跨浏览器兼容性问题。发布时间:2020-09-14 14:46:29;来源:亿速云;阅读量:58;作者:小新。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • 深入理解 .NET 中的中间件
    中间件是插入到应用程序请求处理管道中的组件,用于处理传入的HTTP请求和响应。它在ASP.NET Core中扮演着至关重要的角色,能够灵活地扩展和自定义应用程序的行为。 ... [详细]
  • Spring Boot单元测试中Redis连接失败的解决方案
    本文探讨了在Spring Boot项目中进行单元测试时遇到Redis连接问题的原因及解决方法,详细分析了配置文件加载路径不当导致的问题,并提供了有效的解决方案。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • 我有一个SpringRestController,它处理API调用的版本1。继承在SpringRestControllerpackagerest.v1;RestCon ... [详细]
  • 深入理解Vue.js:从入门到精通
    本文详细介绍了Vue.js的基础知识、安装方法、核心概念及实战案例,帮助开发者全面掌握这一流行的前端框架。 ... [详细]
  • Redux入门指南
    本文介绍Redux的基本概念和工作原理,帮助初学者理解如何使用Redux管理应用程序的状态。Redux是一个用于JavaScript应用的状态管理库,特别适用于React项目。 ... [详细]
  • 本文总结了优化代码可读性的核心原则与技巧,通过合理的变量命名、函数和对象的结构化组织,以及遵循一致性等方法,帮助开发者编写更易读、维护性更高的代码。 ... [详细]
author-avatar
Gefose-洋娃娃_357
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有