热门标签 | 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



推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文介绍了一些好用的搜索引擎的替代品,包括网盘搜索工具、百度网盘搜索引擎等。同时还介绍了一些笑话大全、GIF笑话图片、动态图等资源的搜索引擎。此外,还推荐了一些迅雷快传搜索和360云盘资源搜索的网盘搜索引擎。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的步骤和方法
    本文介绍了在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的详细步骤和方法。首先需要下载最新的Java SE Development Kit 9发行版,然后按照给出的Shell命令行方式进行安装。详细的步骤和方法请参考正文内容。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • phpcomposer 那个中文镜像是不是凉了 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
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社区 版权所有