`
LiZn
  • 浏览: 10229 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

HTTP Developer’s Handbook 中文翻译 Chapter 5: 第三节 请求(消息)头部(一)

 
阅读更多

原文地址: HTTP Developer’s Handbook 中文翻译 Chapter 5: 第三节 请求(消息)头部(一)

 

Request Headers

每一个HTTP请求都有一个消息头部(HTTP headers)的集合。这些消息头部提供了那些能够使Web服务器更好地满足请求的信息。尽管这些头部被分成 请求头部,通用头部和实体头部3类,但是每一个头部都有着自己的特有的功能。

Request headers (请求头部)只适用于HTTP请求。HTTP/1.1定义了19个请求头部。我将逐一介绍这些头部,另外还有一个已经被广泛支持并且定义在RFC2109“HTTP状态管理机制”中的Cookie头。

The Accept Header

Accept头的基本功能就是告知Web服务器该请求接受哪些种类的内容类型(Content type),以及在可接受的内容类型的权重(即更倾向于接受哪一种类型的内容)。

使用第一节给出的例子,当我们在Google中搜索“HTTP”关键字时,你可以检查该请求中的Accept头。

1
2
3
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,
        text/plain;q=0.8, video/x-mng,image/png,image/jpeg,image/gif;q=0.2,
        text/css,*/*;q=0.1

拆解来看,你会发现有几部分拥有相同的格式:

1
2
3
4
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9
text/plain;q=0.8
video/x-mng,image/png,image/jpeg,image/gif;q=0.2
text/css,*/*;q=0.1

这些条目中的每一个都是由“,”分隔的一或多个内容类型(也可以说是媒体类型(media type))后面紧跟一个由“;”分隔的权重系数(q)组成的。q值越高,请求越倾向于获得其“;”之前的类型的内容。这个q值可以取0到1之间(包含0和1)的任何数,如果没有指定q值的话默认为1。被赋值为0则用于提醒服务器哪些是我不接受的内容类型。但是由于浏览器需要尽可能的兼容已经过时的内容类型,指定不接受某些类型的做法是不常见的。

每一种内容类型都被分成类型(type)和子类型(subtype)。*号可以被用于像 */html这样的类型中,也可以被用于像 text/* 这样的子类型中。常会见到 */*这样的用法。这基本上就允许了接收任何类型的内容(尽管这通常会被赋予最低的权重),因此也是浏览器最后的应急措施。如果浏览器没有明确指定的可接受的内容类型,那么所有内容类型的权重将被赋值为0。就类似于浏览器会无视他们不认识的标签一样。

Accept头并不是用来告诉浏览器允许它支持某一指定类型的内容的。浏览器原生支持哪些种类的内容是由它自己决定的,一些插件能够增强浏览器的支持能力,像是能够浏览Adobe Acrobat文档或者Flash动画的插件。当浏览器不能决定如何处理接收到的内容时,它一般会尝试让用户来决定是打开文件还是下载到硬盘。

如果Web服务器由于Accept系列头部(Accept, Accept-Charset, Accept-Encoding 和 Accept-Language)的限制而不能满足请求的话,将会返回一个406 Not Acceptable响应。

The Accept-Charset Header

所有的Accept系列的头部都有着相似的语法,因此就语义来讲之前关于Accept头的讨论也适用于该系列中的其他头部。

Accept-Charset头部告知Web服务器哪些字符编码是可以接受的,而且也可以使用q值来指定其更乐于接受的字符编码。用第一节的例子,你可以检查其Accept-Charset头部的内容。

1
Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66

你可以看到这里也是用了*号来匹配所有的字符编码。虽然有着相同q值,但是因为明确指定了ISO-8859-1和utf-8,它们拥有更高的优先级。

ISO-8859-1编码默认被假设为q值为1。另外要注意的一点是,事实上HTTP消息本身(除去实体内容)是由ISO-8859-1编码的。能够被使用的字符集是注册在IANA(Internet Assigned Numbers Authority,互联网编号分配组织)上的(详情请见http://www.iana.org/)。

Note
字符集(Character set)和字符编码(character encoding)条目是可以相互替换使用的。然而,不要假设Accept-Encoding头与字符编码有关系。下面会介绍Accept-Encoding头部,所以要注意它和Accept-Charset的不同。

The Accept-Encoding Header

Accept-Encoding头部说明了哪些内容编码是浏览器有能力解码的。这与Accept-Charset头部中指定的字符集的概念完全不同。

为了确保能够协同工作,与字符编码一样,Accept-Encoding头部可以使用的值也是注册在IANA的。

最常用的内容编码是一些压缩类的,比如像是gzip(GNU zip)之类的通用压缩算法。这能够使内容传输的更快,因为内容被压缩的更小了。

同Accept头的语法一样,在Accept-Encoding头中也可以使用q值来指定更希望接受的内容编码。

The Accept-Language Header

Accept-Language头允许浏览器指明用户更希望使用的语言。一般的格式是一个主要语种的标签后面跟着一个可选的子标签。例如en和en-US。可用的语言标签也是有IANA来维护的。

1
Accept-Language: en

本例中只接受英语,因为没有列出子类型,所以这会匹配所有的英语子类型比如en-US。

The Authorization Header

Authorization头部允许浏览器向Web服务器验证自己的身份。HTTP授权机制将在Chapter 18有更详细的介绍。

当浏览器向那些敏感的或者受用户名和密码保护的资源发出请求时会发生一系列事件。第一次的请求将会被服务器返回一个401 Unauthorized响应来通知浏览器它必须提供一个正确的Authorization头部来获得访问权限。为了提供这些信息,浏览器将会提示用户需要输入用户名和密码。

一旦浏览器通过这种方式成功通过了一个Web服务器的授权,它将表现的就如同以后的请求都不再需要验证了一样。然而,由于Web的无状态特性,每一次请求都必须包含Authorization头部,否则服务器仍然会返回401 Unauthorized响应。现代浏览器会存储授权证书,对之前受保护的域名下的URL的所有HTTP请求添加Authorization头部。因为这种做法是利用了浏览器的内存,所以这个方便的功能只能持续到浏览器关闭。用户不会察觉到接下来的请求都还进行了验证。当你调试HTTP授权机制的时候这是十分重要的因素,因为如果你接收到了401响应却没有被浏览器提示需要输入用户名和密码,那么就说明浏览器是在使用错误的证书来经行验证。重启浏览器就可以解决这种情况了。

Note
关于WWW-Authenticate response header的资料可以在Chapter 6“HTTP Response”中找到。

 

本博客文章由LiZn创作或分享,以创作公用CC 姓名标示-非商业性-相同方式分享 3.0 Unported 授权条款共享。 
转载请注明 转自: HTTP Developer’s Handbook 中文翻译 Chapter 5: 第三节 请求(消息)头部(一) 

1
2
分享到:
评论

相关推荐

    HTTP+Developer_s+Handbook+.pdf

    ### HTTP Developer's Handbook 知识点总结 #### 一、HTTP简介 - **HTTP协议的重要性:** HTTP(HyperText Transfer Protocol)是支持万维网运行的协议,随着Web应用程序变得越来越复杂以及新兴技术对HTTP的高度...

    [HTTP] HTTP Developer's Handbook [Sams]

    The HTTP Developer's Handbook is written specifically for Web developers. It begins by introducing the protocol and explaining it in a straightforward manner. It then illustrates how to leverage this ...

    Python Developer's Handbook

    《Python Developer's Handbook》是由 André Dos Santos Lessa 编著,由Sams Publishing出版的一本专为Python开发者量身打造的指南。这本书深入探讨了Python编程的各个方面,旨在帮助读者从初学者到熟练掌握,乃至...

    HTTP Developer's Handbook.doc

    《HTTP开发者手册》是由Chris Shiflett撰写的一本专业书籍,旨在帮助Web开发者深入理解HTTP协议,提升他们的专业技能,创建更可靠、更快、更安全的Web应用。这本书由Sams Publishing出版,于2003年3月21日发布,共...

    HTTP Developer's Handbook.chm

    HTTP Developer's Handbook.chm 关于 http,很好的

    HTTP Developer's Handbook开发手册英文

    在学习了基础之后,第三章讲解了HTTP事务,即客户端和服务器之间的请求和响应过程,以及连接的建立和关闭。第四章则集中讨论了如何实际使用HTTP,包括对Web服务器和客户端的调试、性能优化以及安全分析。这些内容...

    Java EE 7 Developer Handbook.pdf

    《Java EE 7 Developer Handbook》是一本专为Java EE 7开发者编写的参考指南,它旨在帮助读者开发出专业级别的应用程序。该手册为Java EE 7技术栈提供了详尽的指导和参考资料,是Java EE开发者必备的专业文献。书中...

    Bluetooth Low Energy The Developer-'s Handbook.pdf

    In Bluetooth Low Energy, one of the standard's developers has written the first comprehensive, accessible introduction to BLE for every system developer, designer, and engineer. Robin Heydon, a ...

    3个HTTP协议书打包HTTP Developer's Handbook,HTTP--The Definitive Guide,RFC2616 HTTP1.1 PDF

    压缩包包含3个文件 HTTP Developer's Handbook.chm HTTP--The Definitive Guide.chm RFC2616 HTTP1.1 PDF,比看网页舒服,呵呵 全是英文的

    Nios II Software Developer’s Handbook

    《Nios II Software Developer’s Handbook》是一份由Altera公司发布的官方手册,主要面向使用Nios II软核处理器进行软件开发的工程师和技术人员。该手册详细介绍了Nios II处理器的软件开发环境、开发流程以及相关的...

    Object Pascal Handbook,最新Ddelphi书籍,for XE7

    Chapter 5: Arrays and Records Chapter 6: All About Strings Part II Chapter 7: Objects Chapter 8: Inheritance Chapter 9: Handling Exceptions Chapter 10: Properties and Events Chapter 11: Interfaces ...

    Delphi 2009 Handbook.part1.rar

    带书签完全版 刚刚找到呵呵 第一部分 Delphi 2009 Handbook 包含源代码 Chapters List This is the list of the book chapters: Part I: Unicode * Chapter 1: What is Unicode? * Chapter 2: The UnicodeString ...

    The Agile Developer's Handbook EPUB格式

    这是一本敏捷开发的入门书,总结了敏捷开发方法的常用实践。可作为敏捷开发的参考手册。

    Cocoa Programming Developer's Handbook

    Cocoa Programming Developer's Handbook 英文版 about cocoa apis development skills

    Nios II Software Developer's handbook

    除了Altera官方提供的工具和支持外,还有许多第三方工具和服务支持Nios II嵌入式开发,例如仿真器、调试器、性能分析工具等。这些工具进一步增强了Nios II开发者的开发能力。 #### 四、开始使用图形用户界面 **4.1...

Global site tag (gtag.js) - Google Analytics