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



推荐阅读
  • 最近在学Python,看了不少资料、视频,对爬虫比较感兴趣,爬过了网页文字、图片、视频。文字就不说了直接从网页上去根据标签分离出来就好了。图片和视频则需要在获取到相应的链接之后取做下载。以下是图片和视 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 文章目录简介HTTP请求过程HTTP状态码含义HTTP头部信息Cookie状态管理HTTP请求方式简介HTTP协议(超文本传输协议)是用于从WWW服务 ... [详细]
  • Scrapy 爬取图片
    1.创建Scrapy项目scrapystartprojectCrawlMeiziTuscrapygenspiderMeiziTuSpiderhttps:movie.douban.c ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
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社区 版权所有