1、MIME

媒体类型

因特网上有数千种不同的数据类型,HTTP仔细地给每种要通过Web传输的对

象都打上了名为MIME类型(MIME type)的数据格式标签。最初设计MIME

(Multipurpose Internet Mail Extension,多用途因特网邮件扩展)是为了解决在不同

的电子邮件系统之间搬移报文时存在的问题。MIME在电子邮件系统中工作得非常

好,因此HTTP也采纳了它,用它来描述并标记多媒体内容。

Web服务器会为所有HTTP对象数据附加一个MIME类型(参见图1-3)。当Web

浏览器从服务器中取回一个对象时,会去查看相关的MIME类型,看看它是否知道

应该如何处理这个对象。大多数浏览器都可以处理数百种常见的对象类型:显示图

片文件、解析并格式化HTML文件、通过计算机声卡播放音频文件,或者运行外部

5插件软件来处理特殊格式的数据。

MIME类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间

由一条斜杠来分隔。

HTML格式的文本文档由text/html类型来标记。

普通的ASCII文本文档由text/plain类型来标记。

JPEG格式的图片为p_w_picpath/jpeg类型。

GIF格式的图片为p_w_picpath/gif类型。

总结:WEB服务器为web客户端请求的资源加一个MIME类型,就是为了让web客户端(浏览器)能区别不同的对象,该如何处理。

2、统一资源标识符(Uniform Resource Identifier,URI)

URI有两种形式,分别称为URL和URN

url:统一资源定位符(URL)

大部分URL都遵循一种标准格式,这种格式包含三个部分。

URL的第一部分被称为方案(scheme),说明了访问资源所使用的协议类型。这

部分通常就是HTTP协议(http://)。

第二部分给出了服务器的因特网地址(比如,www.joes-hardware.com)。

其余部分指定了Web服务器上的某个资源(比如,/specials/saw-blade.gif)。

现在,几乎所有的URI都是URL。

urn: URI的第二种形式就是统一资源名(URN)URN仍然处于试验阶段

比如,不论因特网标准文档RFC 2141位于何处(甚至可以将其复制到多个地方),

都可以用下列URN来命名它:

urn:ietf:rfc:2141

3、方法

HTTP支持几种不同的请求命令,这些命令被称为HTTP方法(HTTP method)

4、状态码

每条HTTP响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,

告知客户端请求是否成功,或者是否需要采取其他动作。

200 OK。文档正确返回

302 Redirect(重定向)。到其他地方去获取资源

404 Not Found(没找到)。无法找到这个资源

注:伴随着每个数字状态码,HTTP还会发送一条解释性的“原因短语”文本(参见图

1-5中的响应报文)。包含文本短语主要是为了进行描述,所有的处理过程使用的都

是数字码。

5、HTTP报文

HTTP报文包括以下三个部分。

起始行

报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说

明出现了什么情况。

首部字段

起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为

了便于解析,两者之间用冒号(:)来分隔。首部以一个空行结束。添加一个首

部字段和添加新行一样简单。

主体

空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括

了要发送给Web服务器的数据;响应主体中装载了要返回给客户端的数据。起

始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意

的二进制数据(比如图片、视频、音轨、软件程序)。当然,主体中也可以包含

文本。

浏览器发送了一条HTTP请求报文。这条请求的起始行中有一个GET

命令,且本地资源为/tools.html。这条请求说明它使用的是1.0版的HTTP协议。请

求报文没有主体,因为从服务器上GET一个简单的文档不需要请求数据。

服务器会回送一条HTTP响应报文。这条响应中包含了HTTP的版本号(HTTP/1.0)、

一个成功状态码(200)、一个描述性的原因短语(OK),以及一块响应首部字

段,在所有这些内容之后跟着包含了所请求文档的响应主体。Content-Length

首部说明了响应主体的长度,Content-Type首部说明了文档的MIME类型。

6、url转码

这种转义表示法包含一个百分号(%),后面跟着两个表示字符ASCII码的十六进制数。

最适合判断是否需要对字符进行编码的程序就是从用户处获取URL的源端应用程

序。URL的每个组件都会有自己的安全/不安全字符,哪些字符是安全/不安全的

与方案有关,因此只有从用户那里接收URL的应用程序才能够判断需要对哪些字符

进行编码。

7、url组件

大多数URL方案的URL语法都建立在这个由9部分构成的通用格式上:

://:@:/;?#

8、状态码分类

使用HEAD,可以:

在不获取资源的情况下了解资源的情况(比如,判断其类型);

通过查看响应中的状态码,看看某个对象是否存在;

通过查看首部,测试资源是否被修改了。

9、HTTP和HTTPS网络协议栈

10、缓存过期日期

服务器用HTTP/1.0+ 的Expires 首部或HTTP/1.1 的Cache-Control: max-age 响应首

部来指定过期日期,同时还会带有响应主体。Expires 首部和Cache-Control:

max-age 首部所做的事情本质上是一样的,但由于Cache-Control 首部使用的是

相对时间而不是绝对日期,所以我们更倾向于使用比较新的Cache-Control 首部。

绝对日期依赖于计算机时钟的正确设置。

11、robots.txt

12、主体编码

Accept-Encoding 字段包含用逗号分隔的支持编码的列表,下面是一些例子:

Accept-Encoding: compress, gzip

Accept-Encoding:

Accept-Encoding: *

Accept-Encoding: compress;q=0.5, gzip;q=1.0

Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0

客户端可以给每种编码附带Q(质量)值参数来说明编码的优先级。Q 值的范围从

0.0 到1.0,0.0 说明客户端不想接受所说明的编码,1.0 则表明最希望使用的编码。

“*”表示“任何其他方法”。

内容编码是和内容的具体格式细节紧密相关的。例如,你可能会用gzip 压缩文本文件,但不是JPEG 文件,因为JPEG 这类东西用gzip 压缩的不够好。

分块编码是一种传输编码(传输编码包括分块编码),使用传输编码是为了改变报文中的数据在网络上传输的方式。

13、验证码分为强验证码和弱验证码

强:Etag(md5只要内容变了,不管大小是否改变,校验和都会改变;b版本号)

弱:大小(内容变了可能大小没变)

时间(修改时间只能精确到1秒,WEB同时处理很多请求,可以1秒内多次改变)

注:如果客户端在请求时想使用弱验证,首部值添加一个W/,如:W/"v3.0"

14、差异编码

A-IM 是Accept-Instance-Manipulation(接受实例操控)的缩写。

15、字符集 字符集是把字符转换为二进制码的编码

HTTP 字符集的值说明如何把实体内容的二进制码转换为特定字母表中的字符(反之亦然)

字符集不对,字符就不对

语言标记有一个或多个部分,用连字号分隔,称为子标记:

第一个子标记称为主子标记,其值是标准化的;

第二个子标记是可选的,遵循它自己的命名标准;

其他尾随的子标记都是未注册的。

标记的大小写问题:

所有的标记都是不区分大小写的,也就是说,标记en 和eN 是等价的。但是,习惯

上用全小写来表示一般的语言,而用全大写来表示特定的国家。例如,fr 表示所有

分类为法语的语言,而FR 表示国家法国19。

17、URI

需要注意的是,要转义的值本身应该在US-ASCII 代码值的范围内(0 ~ 127)。

例如,文件名Sven lssen.html(包含了一个元音变音)可能被网站服务器编码为

Sven%20%D6lssen.html。把空格编码为%20 是对的,但从技术上说,把 编码为

%D6 是非法的,因为代码D6 (十进制值214)落在了ASCII 代码范围之外。ASCII

只定义了最大值为0x7F(十进制值127)的代码。

18、内容协商

由于缓存需要尽力提供所缓存文档中正确的“最佳”版本,HTTP 协议定义了服务器

在响应中发送的Vary 首部。这个首部告知缓存(还有客户端和所有下游的代理)服

务器根据哪些首部来决定发送响应的最佳版本。

apache用以下两种方式可以启用内容协商。

在网站目录中,为网站中每个有变体的URI 创 建一个 type-map(类型映射)文件。

这个type-map 文件列出了每个变体和其相关的内容协商首部集。

启用 MultiViews 指令,这样会使 Apache 自动为目录创建 type-map 文件。

这里给出一个type-map 文件示例:

URI: joes-hardware.html

URI: joes-hardware.en.html

Content-type: text/html

Content-language: en

URI: joes-hardware.fr.de.html

Content-type: text/html;charset=iso-8859-2

Content-language: fr, de

根据这个type-map 文件,Apache 服务器就知道要发送joes-hardware.en.html 给请求

英语版的客户端,发送joes-hardware.fr.de.html 给请求法语版的客户端。Apache 服

务器也支持质量值,具体信息请参阅它相关文档。

19、转码

有3 种类别的转码:格式转换、信息综合以及内容注入。

20、主机 托管

对内容资源的存储、协调以及管理的职责统称为Web 主机托管。

21、重定向

notepad格式化报文_HTTP学习笔记相关推荐

  1. oracle中如何格式化输出,【学习笔记】数据库日期时间格式化输出案例

    天萃荷净 分享一篇关于开发DBA在工作中常用到的日期时间格式化输出方法案例,含:mysql.sql server.oracle 3种数据库日期时间格式化输出 1.mysql数据库时间格式化输出 DAT ...

  2. Python中字符串格式化输出的学习笔记

    1 前言 此笔记讲述了如何对字符串进行格式化输出- 2 改变print()输出的颜色 这里我们可以通过字符串命令来改变**print()**输出的颜色: 例如下面的代码: def warning(*a ...

  3. bum报文_Vxlan学习笔记——原理

    1. 为什么需要Vxlan 普通的VLAN数量只有4096个,无法满足大规模云计算IDC的需求,而IDC为何需求那么多VLAN呢,因为目前大部分IDC内部结构主要分为两种L2,L3.L2结构里面,所有 ...

  4. python 之 print函数的格式化输出(学习笔记)

    本文章内容为我在学习Python时对print()函数的格式化输出内容的一点总结. print()函数格式化输出 print()函数支持格式化输出,有两种格式化方法可以使用,一种是以"%&q ...

  5. oracle 日期格式化 修改_java学习笔记:时间日期类

    一.Date类 Date类表示时间日期类,属于java.util包,使用需要导包.需要了解的是,计算机中时间原点为:1970年1月1日 00:00:00,了解一下这个时间就好.时间换算单位为:1秒 = ...

  6. 数字签名和报文摘要学习笔记

    数字签名:用于对发送的报文进行签名. 认证发送方: 发送方不可抵赖: 接收方不可编造. 主要使用公开密钥加密系统实现,如RSA:发送者通过私钥加密,接收方通过公秘解密. 报文摘要:用于对发送的报文生成 ...

  7. Mr.J-- HTTP学习笔记(三)-- HTTP报文

    HTTP 报文是在 HTTP 应用程序之间发送的数据块. 报文在客户端. 服务器和代理之间流动. 术语"流入"."流出"."上游" 及&qu ...

  8. CanOpen协议栈学习笔记1-帧格式,SYNC和NMT报文介绍

    前面已经记录过can协议,后面开始CanOpen协议栈学习.其实协议栈代码已经看过了,而且已经在开发板上跑过了.这里回过头来,重新看下之前遇到的坑,记录下学习笔记.下面均以标准帧为例 文章目录 1.C ...

  9. Liunx学习笔记 - 07 - 02 正则表达式与文件格式化处理

    Liunx学习笔记 - 07 - 02 正则表达式与文件格式化处理 1 前言:啥是正则表达式 简单来讲,正则表达式是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的 ...

最新文章

  1. React Native学习笔记-1:JSC profiler is not supported.(转载)
  2. python爬虫高考成绩
  3. Expo大作战(十二)--expo中的自定义样式Custom font,以及expo中的路由RouteNavigation
  4. [react] 使用PropTypes和Flow有什么区别?
  5. TypeScript入门教程 之 为什么使用TypeScript
  6. Java 中关键字transient引出序列化与反序列化
  7. 使用dbca创建oracle实例
  8. RPC(远程过程调用)原理及应用
  9. http抓包实践--(一)--fiddler和http(s)
  10. 超级计算机比赛规则,介绍围棋的规则与玩法
  11. RS232、RS485、RS422、RJ45接口有什么区别?
  12. 数独基本规则_数独基本规则(数独游戏规则和技巧)
  13. python 设置输入法为英文_python 怎么转化输入法
  14. 计算机组成原理——存储器(一)
  15. 【FXCG】海龟交易法的使用方法和注意事项
  16. does not specify a Swift version and none of the targets (`packager`) integrating it have the `SWIFT
  17. 怎么开发联机小游戏_微信小游戏创意大赛火热进行中,小游戏联机对战引擎免费用...
  18. 微信小程序开发13 云开发:云原生一体化应用开发平台
  19. 爬在NLP的大道上——Question Answering Infused Pre-training of General-Purpose Contextualized Representations
  20. 世界十大骨传导耳机排行榜、实测主流骨传导耳机推荐解析必看榜单

热门文章

  1. 「新品速递」AHE100无线温湿度传感器
  2. 从零开始搭建仿抖音短视频APP-后端开发消息业务模块(1)
  3. 计算机程序设计c++ 7-2:函数与指针
  4. Python爬虫工程师是干什么的?能赚多少钱?需要掌握哪些技术?
  5. nginx 地址映射
  6. 【日常小问题1】U盘写入速度变慢的解决方法(适用于win10)
  7. EPANET系统学习 day1
  8. 互联网电视的囚徒困境,价格与营销之外,还得看产品本身
  9. word2vec——高效word特征求取
  10. BootstrapTable Export导出xlsx格式