-
我们在浏览器输入网址到看到网页,这期间发生了什么?
浏览器---URL------>服务器主机名----IP----端口号---->TCP连接------->HTTP请求报文--------->HTTP响应报文-------关闭连接------->浏览器显示数据
-
URL中包含了哪些信息?
方案-用户名-密码-主机-端口-路径-参数-查询-片段
GET 从服务器向客户端发送命名资源
PUT 将来自客户端的数据存储到一个命名的服务器资源中去
DELETE 从服务器中删除命名资源
POST 将客户端数据发送到一个服务器网关应用程序
HEAD 仅发送命名资源响应中的 HTTP 首部
GET 方法负责从服务器获取一个文档
浏览器
url中数据可见
协议上没什么区别
携带参数发送时放在头信息里
POST 方法会向服务器发送需要处理的数据
浏览器
url中数据不可见
协议上
携带参数发送时放在主体里
OPTIONS 方法用于确定 Web服务器的一般功能,或者 Web 服务器处理特定资源的能力
-
HTTP状态码常用的有哪些,分别是什么含义?
200 OK。文档正确返回
302 Redirect(重定向)。到其他地方去获取资源
404 Not Found(没找到)。无法找到这个资源
100 ~ 101 信息提示
200 ~ 206 成功
300 ~ 305 重定向
400 ~ 415 客户端错误
500 ~ 505 服务器错误
-
HTTP请求报文格式是什么?
起始行+首部+主体
-
HTTP响应报文格式是什么?
起始行+首部+主体
-
用于Web浏览器和Web服务器和Web应用程序相互通信
-
1-4章 Web的基础构件与HTTP的核心技术
-
1:HTTP
-
2:URL(统一资源定位符)
-
统一资源名(URN)的演变过程
-
-
3:HTTP报文是如何传送Web内容的
-
4:HTTP连接管理过程中一些容易误解的规则和行为
HTTP如何传输Web流量
-
Web 内容(数据)都是存储在 Web 服务器上的
-
Web 服务器( HTTP 服务器)所使用的是 HTTP 协议
-
HTTP 客户端 --> HTTP请求---->Web 服务器----->数据---->HTTP 客户端
-
-
Web 服务器是 Web 资源(文件)的宿主
-
Web 资源 是 Web 内容的源头(即提供Web内容的东西)
-
包括
静态文件
(文本文件、图片、文档...) -
动态内容
软件程序
-
-
Web 服务器会为所有 HTTP 对象数据加上
-
MIME 类型
它来描述并标记多媒体内容 (即数据类型 用于转化输出) -
text/html类型
-
image/jpeg类型
-
URL
-
Web服务器资源的名字 用于定位信息资源
-
两种形式
-
URL 统一资源定位符 (协议+服务器+本地资源)
-
对于
http://www.joes-hardware.com/specials/saw-blade.gif
-
使用HTTP协议 进入www.joes-hardware.com 获取名为/specials/saw-blade.gif的资源
-
-
URN 统一资源名
-
事务
-
HTTP 报文
传输内容的格式化数据块 -
客户端--> 包含命令和URI的HTTP请求报文------因特网---->服务器
-
---->包含事务结果的HTTP响应报文------因特网----->客户端
-
-
完成一项任务时, 事务时多个的
方法
-
五种常见的HTTP 方法
HTTP方法 | 描 述 |
---|---|
GET | 从服务器向客户端发送命名资源 |
PUT | 将来自客户端的数据存储到一个命名的服务器资源中去 |
DELETE | 从服务器中删除命名资源 |
POST | 将客户端数据发送到一个服务器网关应用程序 |
HEAD | 仅发送命名资源响应中的 HTTP 首部 |
状态码
-
报文返回是携带的
三位数字的代码
-
告知客户端请求是否成功
-
或者是否需要采取其他动作
-
使用时会加带
文本短语
进行描述-
200 OK
-
200 Success
-
-
HTTP状态码 | 描 述 |
---|---|
200 | OK。文档正确返回 |
302 | Redirect(重定向)。到其他地方去获取资源 |
404 | Not Found(没找到)。无法找到这个资源 |
Web页面中可以包含多个对象
-
多个HTTP事务访问多个资源形成个自独立的单个事务 完成一项任务
报文
-
纯文本 字符串
-
请求报文
GET /test/hi-there.txt HTTP/1.0 起始行
Accept: text/* 首部
Accept-Language: en,fr 首部
-
响应报文
HTTP/1.0 200 OK 起始行
(协议版本号)
Content-type: text/plain 首部 (数据类型)
Content-length: 19 首部 (长度)
Hi! I’m a message! 主体
-
起始行 (请求------------响应)
-
做什么 做的怎么样
-
-
首部字段 (>=0 以空行结束首部)
-
名字:值
名字:值
-
-
主体
-
数据 数据
-
-
其中起始行和首部都是
结构化
的文本形式 -
主体可以是任意的二进制数据包括文本
连接
-
TCP/IP(因特网传输协议)
-
无差错的数据传输
-
按序传输(数据总是会按照发送的顺序到达)
-
未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)
-
-
TCP/IP 连接
-
服务器的
IP 地址
+特定软件相关端口号
(默认80) -
从URL中来获取
http://207.200.83.29:80/index.html
-
域名------->DNS(域名服务)--------->IP
-
-
浏览器---URL------>服务器主机名----IP----端口号---->TCP连接------->HTTP请求报文--------->HTTP响应报文-------关闭连接------->浏览器显示数据
Telnet程序
-
与Web 服务器通信
协议版本
协议版本 | 描述 |
---|---|
HTTP/0.9 | |
HTTP/1.0 | |
HTTP/1.0+ | |
HTTP/1.1 | |
HTTP-NG(HTTP/2.0) |
Web的结构组件
代理
-
位于客户端和服务器之间的 HTTP 中间实体
-
接收客户端的请求(可对请求修改操作)---------------------------转发给服务器
-
中间做过滤作用
-
HTTP代理服务器
缓存
-
HTTP 的仓库,使常用页面的副本可以保存在离客户端更近的地方
-
Web缓存或代理缓存, 特殊的HTTP代理缓存
-
将访问同一文本缓存下来,下次访问提高性能
网关
-
连接其他应用程序的特殊 Web 服务器
-
近似源端服务器
隧道
-
对 HTTP 通信报文进行盲转发的特殊代理
-
数据不可见
-
SSL加密
Agent代理(如:Web浏览器)
-
发起自动 HTTP 请求的半智能 Web 客户端
-
可以在无人监视的情况下,发布 HTTP 事务并获取内容
-
比如“网络蜘蛛” 或者 “Web 机器人” ,自动获取链接文档的程序
URL
开场
-
URI 是一类更通用的资源标识符
-
URL 通过描述资源的位置来标识资源
-
URN 通过名字来识别资源
-
-
URL 因特网资源的标准化名称 为URI子集
-
协议(方案)+服务器(主机)+资源路径
scheme +www.joes-hardware.com+/seasonal/index-fall.html
-
方案:
-
HTTP协议
http://www.joes-hardware.com/seasonal/index-fall.html
-
E-mail账户
mailto:president@whitehouse.gov
-
FTP协议
ftp://ftp.lots-o-books.com/pub/complete-price-list.xls
-
流视频服
rtsp://www.joes-hardware.com:554/interview/cto_video
-
语法
* `<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>`
* URL 最重要的 3 个部分是方案(scheme)、主机(host)和路径(path)
* 方案-用户名-密码-主机-端口-路径-参数-查询-片段
组 件 | 描 述 | 默 认 值 |
---|---|---|
方案 | 协议 | 无 |
用户 | 用户名 | 匿名(anonymous) |
密码 | 密码,用冒号(:)分隔用户名 | <E-mail 地址 > |
主机 | 服务器的主机名或点分IP 地址 | 无 |
端口 | 服务器正在监听的端口号(HTTP的80) | 每个方案特有 |
路径 | 资源路径 | 无 |
参数 | 用(;)相隔的参数或值对 | 无 |
查询 | ?开头的参数 | 无 |
片段 | #开头的参数 | 无 |
方案
-
解析URL所用的协议
-
用
:
相隔URL其余部分, 不区分大小写
主机与端口
-
主机 需要访问度服务器
-
IP
-
-
端口 服务器资源的所在入口
用户名和密码
-
通常在ftp协议中常见
-
默认插入匿名用户和默认密码 (两者使用
:
隔开与URL其余部分用@
相隔)
-
-
ftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnu
-
http://joe:joespasswd@www.joes-hardware.com/sales_info.txt
路径
-
分级的分拣系统路径
-
http://www.joes-hardware.com:80/seasonal/index-fall.html
-
路径为:
/seasonal/index-fall.html
-
参数
-
向应用程序提供它们所需的输入参数,以便正确地与服务器进行交互
-
ftp://prep.ai.mit.edu/pub/gnu;type=d
-
使用
;
隔开 -
多路径下
-
http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true
-
参数: sale=false 和 graphics=true
-
查询字符串
-
可以缩小检索的范围
-
http://www.joes-hardware.com/inventory-check.cgi?item=12731&color=blue&size=large
-
?
隔开&
相连
片段
-
获取资源指定部分
-
#
相隔 -
http://www.joes-hardware.com/tools.html#drills
-
浏览器获取的是服务器资源的整个文档 片段是浏览器本身过滤的
URL快捷方式
-
绝对URL和相对URL和基础URL
-
相对 URL 转换成绝对 URL
-
基础URL:
http://www.joes-hardware.com/tools.html
-
相对URL:
./hammers.html
-
新的绝对URL:
http://www.joes-hardware.com/hammers.html
-
(1)路径为 ./hammers.html,基础 URL 为 http://www.joes-hardware.com/tools.html。 (2)方案为空 继承基础URL的HTTP (3)至少一个组件非空,一直处理到底端,继承主机和端口组件 (4)将来自相对 URL(路径:./hammers.html)的组件与我们继承来的组件(方案: http,主机:www.joes-hardware.com,端口:80)合并起来,得到新的绝对 URL:http ://www.joes-hardware.com/hammers.html
自动扩展URL
-
提示补全
-
分类
-
主机名扩展
-
历史扩展
-
-
和代理有所排斥
URL字符集
HTTP(超文本传输协议)
-
我们在浏览器输入网址到看到网页,这期间发生了什么?
浏览器---URL------>服务器主机名----IP----端口号---->TCP连接------->HTTP请求报文--------->HTTP响应报文-------关闭连接------->浏览器显示数据
-
URL中包含了哪些信息?
方案-用户名-密码-主机-端口-路径-参数-查询-片段
-
HTTP请求方法有哪些?GET与POST有何区别?
GET 从服务器向客户端发送命名资源 PUT 将来自客户端的数据存储到一个命名的服务器资源中去 DELETE 从服务器中删除命名资源 POST 将客户端数据发送到一个服务器网关应用程序 HEAD 仅发送命名资源响应中的 HTTP 首部GET 方法负责从服务器获取一个文档
浏览器
url中数据可见
协议上没什么区别
携带参数发送时放在头信息里
POST 方法会向服务器发送需要处理的数据
浏览器
url中数据不可见
协议上
携带参数发送时放在主体里
OPTIONS 方法用于确定 Web服务器的一般功能,或者 Web 服务器处理特定资源的能力
-
HTTP状态码常用的有哪些,分别是什么含义?
200 OK。文档正确返回 302 Redirect(重定向)。到其他地方去获取资源 404 Not Found(没找到)。无法找到这个资源100 ~ 101 信息提示
200 ~ 206 成功
300 ~ 305 重定向
400 ~ 415 客户端错误
500 ~ 505 服务器错误
-
HTTP请求报文格式是什么?
起始行+首部+主体
-
HTTP响应报文格式是什么?
起始行+首部+主体
-
用于Web浏览器和Web服务器和Web应用程序相互通信
-
1-4章 Web的基础构件与HTTP的核心技术
-
1:HTTP
-
2:URL(统一资源定位符)
-
统一资源名(URN)的演变过程
-
-
3:HTTP报文是如何传送Web内容的
-
4:HTTP连接管理过程中一些容易误解的规则和行为
HTTP如何传输Web流量
-
Web 内容(数据)都是存储在 Web 服务器上的
-
Web 服务器( HTTP 服务器)所使用的是 HTTP 协议
-
HTTP 客户端 --> HTTP请求---->Web 服务器----->数据---->HTTP 客户端
-
-
Web 服务器是 Web 资源(文件)的宿主
-
Web 资源 是 Web 内容的源头(即提供Web内容的东西)
-
包括
静态文件
(文本文件、图片、文档...) -
动态内容
软件程序
-
-
Web 服务器会为所有 HTTP 对象数据加上
-
MIME 类型
它来描述并标记多媒体内容 (即数据类型 用于转化输出) -
text/html类型
-
image/jpeg类型
-
URL
-
Web服务器资源的名字 用于定位信息资源
-
两种形式
-
URL 统一资源定位符 (协议+服务器+本地资源)
-
对于
http://www.joes-hardware.com/specials/saw-blade.gif
-
使用HTTP协议 进入www.joes-hardware.com 获取名为/specials/saw-blade.gif的资源
-
-
URN 统一资源名
-
事务
-
HTTP 报文
传输内容的格式化数据块 -
客户端--> 包含命令和URI的HTTP请求报文------因特网---->服务器
-
---->包含事务结果的HTTP响应报文------因特网----->客户端
-
-
完成一项任务时, 事务时多个的
方法
-
五种常见的HTTP 方法
HTTP方法 | 描 述 |
---|---|
GET | 从服务器向客户端发送命名资源 |
PUT | 将来自客户端的数据存储到一个命名的服务器资源中去 |
DELETE | 从服务器中删除命名资源 |
POST | 将客户端数据发送到一个服务器网关应用程序 |
HEAD | 仅发送命名资源响应中的 HTTP 首部 |
状态码
-
报文返回是携带的
三位数字的代码
-
告知客户端请求是否成功
-
或者是否需要采取其他动作
-
使用时会加带
文本短语
进行描述-
200 OK
-
200 Success
-
-
HTTP状态码 | 描 述 |
---|---|
200 | OK。文档正确返回 |
302 | Redirect(重定向)。到其他地方去获取资源 |
404 | Not Found(没找到)。无法找到这个资源 |
Web页面中可以包含多个对象
-
多个HTTP事务访问多个资源形成个自独立的单个事务 完成一项任务
报文
-
纯文本 字符串
-
请求报文
GET /test/hi-there.txt HTTP/1.0 起始行Accept: text/* 首部
Accept-Language: en,fr 首部
-
响应报文
HTTP/1.0 200 OK 起始行 (协议版本号) Content-type: text/plain 首部 (数据类型) Content-length: 19 首部 (长度)Hi! I’m a message! 主体
-
起始行 (请求------------响应)
-
做什么 做的怎么样
-
-
首部字段 (>=0 以空行结束首部)
-
名字:值
名字:值
-
-
主体
-
数据 数据
-
-
其中起始行和首部都是
结构化
的文本形式 -
主体可以是任意的二进制数据包括文本
连接
-
TCP/IP(因特网传输协议)
-
无差错的数据传输
-
按序传输(数据总是会按照发送的顺序到达)
-
未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)
-
-
TCP/IP 连接
-
服务器的
IP 地址
+特定软件相关端口号
(默认80) -
从URL中来获取
http://207.200.83.29:80/index.html
-
域名------->DNS(域名服务)--------->IP
-
-
浏览器---URL------>服务器主机名----IP----端口号---->TCP连接------->HTTP请求报文--------->HTTP响应报文-------关闭连接------->浏览器显示数据
Telnet程序
-
与Web 服务器通信
协议版本
协议版本 | 描述 |
---|---|
HTTP/0.9 | |
HTTP/1.0 | |
HTTP/1.0+ | |
HTTP/1.1 | |
HTTP-NG(HTTP/2.0) |
Web的结构组件
代理
-
位于客户端和服务器之间的 HTTP 中间实体
-
接收客户端的请求(可对请求修改操作)---------------------------转发给服务器
-
中间做过滤作用
-
HTTP代理服务器
缓存
-
HTTP 的仓库,使常用页面的副本可以保存在离客户端更近的地方
-
Web缓存或代理缓存, 特殊的HTTP代理缓存
-
将访问同一文本缓存下来,下次访问提高性能
网关
-
连接其他应用程序的特殊 Web 服务器
-
近似源端服务器
隧道
-
对 HTTP 通信报文进行盲转发的特殊代理
-
数据不可见
-
SSL加密
Agent代理(如:Web浏览器)
-
发起自动 HTTP 请求的半智能 Web 客户端
-
可以在无人监视的情况下,发布 HTTP 事务并获取内容
-
比如“网络蜘蛛” 或者 “Web 机器人” ,自动获取链接文档的程序
URL
开场
-
URI 是一类更通用的资源标识符
-
URL 通过描述资源的位置来标识资源
-
URN 通过名字来识别资源
-
-
URL 因特网资源的标准化名称 为URI子集
-
协议(方案)+服务器(主机)+资源路径
scheme +www.joes-hardware.com+/seasonal/index-fall.html
-
方案:
-
HTTP协议
http://www.joes-hardware.com/seasonal/index-fall.html
-
E-mail账户
mailto:president@whitehouse.gov
-
FTP协议
ftp://ftp.lots-o-books.com/pub/complete-price-list.xls
-
流视频服
rtsp://www.joes-hardware.com:554/interview/cto_video
-
语法
* `<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>`
* URL 最重要的 3 个部分是方案(scheme)、主机(host)和路径(path)
* 方案-用户名-密码-主机-端口-路径-参数-查询-片段
组 件 | 描 述 | 默 认 值 |
---|---|---|
方案 | 协议 | 无 |
用户 | 用户名 | 匿名(anonymous) |
密码 | 密码,用冒号(:)分隔用户名 | <E-mail 地址 > |
主机 | 服务器的主机名或点分IP 地址 | 无 |
端口 | 服务器正在监听的端口号(HTTP的80) | 每个方案特有 |
路径 | 资源路径 | 无 |
参数 | 用(;)相隔的参数或值对 | 无 |
查询 | ?开头的参数 | 无 |
片段 | #开头的参数 | 无 |
方案
-
解析URL所用的协议
-
用
:
相隔URL其余部分, 不区分大小写
主机与端口
-
主机 需要访问度服务器
-
IP
-
-
端口 服务器资源的所在入口
用户名和密码
-
通常在ftp协议中常见
-
默认插入匿名用户和默认密码 (两者使用
:
隔开与URL其余部分用@
相隔)
-
-
ftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnu
-
http://joe:joespasswd@www.joes-hardware.com/sales_info.txt
路径
-
分级的分拣系统路径
-
http://www.joes-hardware.com:80/seasonal/index-fall.html
-
路径为:
/seasonal/index-fall.html
-
参数
-
向应用程序提供它们所需的输入参数,以便正确地与服务器进行交互
-
ftp://prep.ai.mit.edu/pub/gnu;type=d
-
使用
;
隔开 -
多路径下
-
http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true
-
参数: sale=false 和 graphics=true
-
查询字符串
-
可以缩小检索的范围
-
http://www.joes-hardware.com/inventory-check.cgi?item=12731&color=blue&size=large
-
?
隔开&
相连
片段
-
获取资源指定部分
-
#
相隔 -
http://www.joes-hardware.com/tools.html#drills
-
浏览器获取的是服务器资源的整个文档 片段是浏览器本身过滤的
URL快捷方式
-
绝对URL和相对URL和基础URL
-
相对 URL 转换成绝对 URL
-
基础URL:
http://www.joes-hardware.com/tools.html
-
相对URL:
./hammers.html
-
新的绝对URL:
http://www.joes-hardware.com/hammers.html
-
(1)路径为 ./hammers.html,基础 URL 为 http://www.joes-hardware.com/tools.html。 (2)方案为空 继承基础URL的HTTP (3)至少一个组件非空,一直处理到底端,继承主机和端口组件 (4)将来自相对 URL(路径:./hammers.html)的组件与我们继承来的组件(方案: http,主机:www.joes-hardware.com,端口:80)合并起来,得到新的绝对 URL:http ://www.joes-hardware.com/hammers.html
自动扩展URL
-
提示补全
-
分类
-
主机名扩展
-
历史扩展
-
-
和代理有所排斥
URL字符集
-
US-ASCII 使用 7 位二进制码来表示
编码机制
-
对不安全字符进行编码
-
“转义”表示法 包含一个百分号(%),后面跟着两个表示字符 ASCII 码的十六进制数
字 符 | ASCII码 | 示例URL |
---|---|---|
~ | 126(0x7E) | http://www.joes-hardware.com/%7Ejoe |
空格 | 32(0x20) | http://www.joes-hardware.com/more%20tools.html |
% | 37(0x25) | http://www.joes-hardware.com/100%25satisfaction.html |
保留及受限字符
字 符 | 保留/受限 |
---|---|
% | 保留作为编码字符的转义标志 |
/ | 保留作为路径组件中分隔路径段的定界符 |
. | 保留在路径组件中使用 |
.. | 保留在路径组件中使用 |
# | 保留作为分段定界符使用 |
? | 保留作为查询字符串定界符使用 |
; | 保留作为参数定界符使用 |
: | 保留作为方案、用户 / 口令,以及主机 / 端口组件的定界符使用 |
$ , + | 保留 |
@ & = | 在某些方案的上下文中有特殊的含义,保留 |
{} | \ ^ ~ [] ' | 由于各种传输 Agent 代理,比如各种网关的不安全处理,使用受限 |
< > " | 不安全;这些字符在 URL 范围之外通常是有意义的,比如在文档中对 URL 自身进行定界(比如 http://www.joes-hardware.com),所以应该对其进行编码 |
0x00-0x1F, 0x7F | 受限,这些十六进制范围内的字符都在 US-ASCII 字符集的不可打印区间内 |
>0x7F | 受限,十六进制值在此范围内的字符都不在 US-ASCII 字符集的 7 比特范围内 |
方案
方 案 | 名称 | 描 述 |
---|---|---|
http | 超文本传输协议方案: http://<host>:<port>/<path>?<query>#<frag> | 默认端口为 80 http://www.joes-hardware.com:80/index.html |
https | 与http相似 https://<host>:<port>/<path>?<query>#<frag> | SSL加密 https://www.joes-hardware.com/secure.html |
mailto | 指向E-mail 地址 mailto:<RFC-822-addr-spec> | mailto:joe@joes-hardware.com |
ftp | 文件传输协议 ftp://<user>:<password>@<host>:<port>/<path>;<params> | ftp://anonymous:joe%40joes-hardware.com@prep.ai.mit.edu:21/pub/gnu/ |
| rtsp,rtspu | 实时流传输协议(Real Time Streaming Protocol)解析的音 / 视频 媒体资源的标识符 rtsp://<user>:<password>@<host>:<port>/<path> rtspu://<user>:<password>@<host>:<port>/<path> | rtsp://www.joes-hardware.com:554/interview/cto_video
| | file | 通过本地磁盘、网络文件系统或其他一些文件共享系统 file://<host>/<path> | 默认为正在使用URL 的本地主机 file://OFFICE-FS/policies/casual-fridays.doc | | news | 特定的文章或新闻组 news:<newsgroup> news:<news-article-id> | news:rec.arts.startrek
| | telnet | 访问交互式业务 telnet://<user>:<password>@<host>:<port>/ | telnet://slurp:webhound@joes-hardware.com:23/
|
报文
概念
-
HTTP 报文是在 HTTP 应用程序之间发送的数据块
-
向下流动
-
请求报文(流入)
<method> <request-URL> <version> <headers><entity-body>
-
响应报文(流出)
<version> <status> <reason-phrase> <headers><entity-body>
-
方法(method)
-
请求URL(request-URL)
-
版本(version)
-
状态码(status-code)
-
原因短语(reason-phrase)
-
首部(header)
-
实体的主体部分(entity-body)
HTTP方法
方 法 | 描 述 | 是否包含主体 |
---|---|---|
GET | 从服务器获取一份文档 | 否 |
HEAD | 只从服务器获取文档的首部 | 否 |
POST | 向服务器发送需要处理的数据 | 是 |
PUT | 将请求的主体部分存储在服务器上 | 是 |
TRACE | 对可能经过代理服务器传送到服务器上去的报文进行追踪 | 否 |
OPTIONS | 决定可以在服务器上执行哪些方法 | 否 |
DELETE | 从服务器上删除一份文档 | 否 |
状态码
整体范围 | 已定义范围 | 分 类 |
---|---|---|
100 ~ 199 | 100 ~ 101 | 信息提示 |
200 ~ 299 | 200 ~ 206 | 成功 |
300 ~ 399 | 300 ~ 305 | 重定向 |
400 ~ 499 | 400 ~ 415 | 客户端错误 |
500 ~ 599 | 500 ~ 505 | 服务器错误 |
-
如果收到了状态码 515(在表 所列 5XX 代码的已定义范围之外),就应该认为这条响应指出了服务器的错误,这是 5XX 报文的通用类别
常见状态码
状 态 码 | 原因短语 | 含 义 |
---|---|---|
200 | OK | 成功。请求的所有数据都在响应主体中 |
401 | Unauthorized(未授权) | 需要输入用户名和密码 |
404 | Not Found(未找到) | 服务器无法找到所请求 URL 对应的资源 |
状态码 | 原因短语 | 含义 |
---|---|---|
信息性状态码 | ||
100 | Continue | 请客户端继续 |
101 | Switching Protocols | 说明服务器正在根据客户端的指定,将协议切换成 Update 首部所列的协议 |
成功状态码 | ||
200 | Accepted | 请求没问题 |
201 | Accepted | 用于创建服务器对象的请求 |
202 | Accepted | 请求已被接受,但服务器还未对其执行任何动作 |
| 203 | Non-Authoritative Information | 信息来自资源的一份副本 | | 204 | No Content | 响应报文中包含若干首部和一个状态行,但没有实体的主体部分 | | 205 | Reset Content | 浏览器清除当前页面中的所有 HTML 表单元素 | | 206 | Partial Content | 成功执行了一个部分或 Range(范围)请求 | | 重定向状态码 | | | | 300 | Multiple Choices | 客户端请求一个实际指向多个资源的 URL 时会返回这个状 态码,比如服务器上有某个 HTML 文档的英语和法语版本 | | 301 | Moved Permanently | 在请求的 URL 已被移除时使用 | | 302 | Found | 与 301 状态码类似 | | 303 | See Other | 知客户端应该用另一个 URL 来获取资源 | | 304 | Not Modified | 客户端可以通过所包含的请求首部,使其请求变成有条件的 | | 305 | Use Proxy | 用来说明必须通过一个代理来访问资源 | | 306 | (未使用) | 当前未使用 | | 307 | Temporary Redirect | 与 301 状态码类似 | | 客户端错误 | | | | 400 | Bad Request | 用于告知客户端它发送了一个错误的请求 | | 401 | Unauthorized | 对自己进行认证 | | 402 | Payment Required | 还未使用 | | 403 | Forbidden | 用于说明请求被服务器拒绝了 | | 404 | Not Found | 用于说明服务器无法找到所请求的 URL | | 405 | Method Not Allowed | 起的请求中带有所请求的 URL 不支持的方法 | | 406 | Not Acceptable | 客户端可以指定参数来说明它们愿意接收什么类型的实体 | | 407 | Proxy Authentication Required | 与 401 状态码类似, 但用于要求对资源进行认证的代理服务器 | | 408 | Request Timeout | 请求所花的时间太长 | | 409 | Conflict | 用于说明请求可能在资源上引发的一些冲突 | | 410 | Gone | 与 404 类似,只是服务器曾经拥有过此资源 | | 411 | Length Required | 服务器要求在请求报文中包含 Content-Length 首部 | | 412 | Precondition Failed | 客户端发起了条件请求,且其中一个条件失败了 | | 413 | Request Entity Too Large | 客户端发送的实体主体部分比服务器能够或者希望处理的要大 | | 414 | Request URI Too Long | 客户端所发请求中的请求 URL 比服务器能够或者希望处理的要长 | | 415 | Unsupported Media Type | 服务器无法理解或无法支持客户端所发实体的内容类型 | | 416 | Requested Range Not Satisfiable | 请求报文所请求的是指定资源的某个范围,而此范围无效或无法满足 | | 417 | Expectation Failed | 请求的 Expect 请求首部包含了一个期望,但服务器无法满足此期望 | | 服务器错误 | | | | 500 | Internal Server Error | 服务器遇到一个妨碍它为请求提供服务的错误 | | 501 | Not Implemented | 客户端发起的请求超出服务器的能力范围 | | 502 | Bad Gateway | 作为代理或网关使用的服务器从请求响应链的下一条链路上收到了一条伪响应 | | 503 | Service Unavailable | 用来说明服务器现在无法为请求提供服务,但将来可以 | | 504 | Gateway Timeout | 与状态码 408 类似 | | 505 | HTTP Version Not Supported | 服务器收到的请求使用了它无法或不愿支持的协议版本 |
原因短语
-
为状态码提供了文本形式的解释
版本号
-
HTTP/x.y 的形式
-
HTTP/1.0 中的 1和 0 都会被当作一个单独的数字来处理
-
HTTP/2.22 就比 HTTP/2.3 的版本要高,因为 22 比 3 大
-
首部
-
常见的首部
首部实例 | 描 述 |
---|---|
Date:Tue,3Oct 1997 02:16:03 GMT | 服务器产生响应的日期 |
Content-length:15040 | 实体的主体部分包含了 15 040 字节的数据 |
Content-type:image/gif | 实体的主体部分是一个 GIF 图片 |
Accept: image/gif, image/jpeg, text/html | 客户端可以接收 GIF 图片和 JPEG 图片以及 HTM |
-
分隔用空格 跨行用空格/Tab
方法
-
安全方法
-
GET
-
HEAD
-
-
GET
-
请求服务器发送某个资源
-
-
HEAD
-
请求服务器发送某个资源
-
服务器在响应中只返回首部。不会返回实 体的主体部分
-
-
PUT
-
向服务器写入文档
-
-
POST
-
向服务器输入数据的
-
通常指表单数据
-
-
TRACE
-
客户端发起一个请求
-
客户端可以看到请求修改的内容
-
-
OPTIONS
-
请求 Web 服务器告知其支持的各种功能
-
比如 询问服务器通常支持 哪些方法,或者对某些特殊资源支持哪些方法
-
-
DELETE
-
请服务器删除请求 URL 所指定的资源
-
扩展方法
方 法 | 描 述 |
---|---|
LOCK | 允许用户“锁定”资源——比如,可以在编辑某个资源的时候将其锁定,防别人同时对其进行修改 |
MKCOL | 允许用户创建资源 |
COPY | 便于在服务器上复制资源 |
MOVE | 在服务器上移动资源 |
首部
首 部 | 描 述 |
---|---|
信息性首部 |
|
Connection | 允许客户端和服务器指定与请求 / 响应连接有关的选项 |
Date | 提供日期和时间标志,说明报文是什么时间创建的 |
MIME-Version | 给出了发送端使用的 MIME 版本 |
Trailer | 如果报文采用了分块传输编码(chunked transfer encoding)方式,就可以用这个首部列出位于报文拖挂(trailer)部分的首部集合 |
Transfer-Encoding | 告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式 |
Update | 给出了发送端可能想要“升级”使用的新版本或协议 |
Via | 显示了报文经过的中间节点(代理、网关) |
缓存首部 |
|
Cache-Control | 用于随报文传送缓存指示 |
Pragma | 另一种随报文传送指示的方式,但并不专用于缓存 |
请求首部 |
|
Client-IP | 提供了运行客户端的机器的 IP 地址 |
From | 提供了客户端用户的 E-mail 地址 |
Host | 给出了接收请求的服务器的主机名和端口号 |
Referer | 提供了包含当前请求 URI 的文档的 URL |
UA-Color | 提供了与客户端显示器的显示颜色有关的信息 |
UA-CPU | 给出了客户端 CPU 的类型或制造商 |
UA-Disp | 提供了与客户端显示器(屏幕)能力有关的信息 |
UA-OS | 给出了运行在客户端机器上的操作系统名称及版本 |
UA-Pixels | 提供了客户端显示器的像素信息 |
User-Agent | 将发起请求的应用程序名称告知服务器 |
Accept 首部 |
|
Accept | 告诉服务器能够发送哪些媒体类型 |
Accept-Charset | 告诉服务器能够发送哪些字符集 |
Accept-Encoding | 告诉服务器能够发送哪些编码方式 |
Accept-Language | 告诉服务器能够发送哪些语言 |
TE | 告诉服务器可以使用哪些扩展传输编码 |
条件请求首部 |
|
Expect | 允许客户端列出某请求所要求的服务器行为 |
If-Match | 如果实体标记与文档当前的实体标记相匹配,就获取这份文档 |
If-Modified-Since | 除非在某个指定的日期之后资源被修改过,否则就限制这个请求 |
If-None-Match | 如果提供的实体标记与当前文档的实体标记不相符,就获取文档 |
If-Range | 允许对文档的某个范围进行条件请求 |
If-Unmodified-Since | 除非在某个指定日期之后资源没有被修改过,否则就限制这个请求 |
Range | 如果服务器支持范围请求,就请求资源的指定范围 |
安全请求首部 |
|
Authorization | 包含了客户端提供给服务器,以便对其自身进行认证的数据 |
| Cookie | 客户端用它向服务器传送一个令牌——它并不是真正的安全首部,但确实 隐含了安全功能 | | Cookie2 | 用来说明请求端支持的 cookie 版本 | | 代理请求首部| | | Max-Forward | 在通往源端服务器的路径上,将请求转发给其他代理或网关的最大次 <br/>数——与 TRACE 方法一同使用 | | Proxy-Authorization | 与 Authorization 首部相同,但这个首部是在与代理进行认证时使用的 | | Proxy-Connection | 与 Connection 首部相同,但这个首部是在与代理建立连接时使用的 | |
响应的信息性首部| | | Age | (从最初创建开始)响应持续时间 | | Public | 服务器为其资源支持的请求方法列表 | | Retry-After | 如果资源不可用的话,在此日期或时间重试 | | Server | 服务器应用程序软件的名称和版本 | | Title | 对 HTML 文档来说,就是 HTML 文档的源端给出的标题 | | Warning | 比原因短语中更详细一些的警告报文 | |
协商首部| | | Accept-Ranges | 对此资源来说,服务器可接受的范围类型 | | Vary | 服务器查看的其他首部的列表,可能会使响应发生变化 | |
安全响应首部| | | Proxy-Authenticate | 来自代理的对客户端的质询列表 | | Set-Cookie | 不是真正的安全首部,但隐含有安全功能;可以在客户端设置一个令牌, <br/>以便服务器对客户端进行标识 | | Set-Cookie2 | 与 Set-Cookie 类似,RFC 2965 Cookie 定义 | | WWW-Authenticate | 来自服务器的对客户端的质询列表 | |
实体的信息性| | | Allow | 列出了可以对此实体执行的请求方法 | | Location | 告知客户端实体实际上位于何处 | |
内容首部| | | Content-Base | 解析主体中的相对 URL 时使用的基础 URL | | Content-Encoding | 对主体执行的任意编码方式 | | Content-Language | 理解主体时最适宜使用的自然语言 | | Content-Length | 主体的长度或尺寸 | | Content-Length | 资源实际所处的位置 | | Content-MD5 | 主体的 MD5 校验和 | | Content-Range | 在整个资源中此实体表示的字节范围 | | Content-Type | 这个主体的对象类型 | |
实体缓存首部` | | | ETag | 与此实体相关的实体标记 | | Expires | 实体不再有效,要从原始的源端再次获取此实体的日期和时间 | | Last-Modified | 这个实体最后一次被修改的日期和时间 |
连接管理TCP
TCP/IP
-
一种常用的分组交换网络分层协议集
-
URL----域名(主机名)解析(DNS)------IP------端口------建立连接--------请求报文-------响应报文-----关闭连接
-
TCP连接(数据管道)------>分段(小数据块)------IP分组
-
IP分组
-
一个 IP 分组首部 (通常为 20 字节)
-
包含了源和目的 IP 地址、长度和其他一些标记
-
-
一个 TCP 段首部(通常为 20 字节)
-
包含了 TCP端口号、TCP 控制标记,以及用于数据排序和完整性检查的一些数字值
-
-
一个 TCP 数据块(0 个或多个字节)
-
-
TCP 连接是通过 4 个值来识别的
-
< 源 IP 地址、源端口号、目的 IP 地址、目的端口号 >
-
-
常见套接字接口函数
套接字API调用 | 描 述 |
---|---|
s = socket(<parameters>) | 创建一个新的、未命名、未关联的套接字 |
bind(s,<local IP:port | 向套接字赋一个本地端口号和接口 |
connect(s, <remote IP:port>) | 创建一条连接本地套接字与远程主机及端口的连接 |
listen(s,...) | 标识一个本地套接字,使其可以合法接受连接 |
s2 = accept(s) | 等待某人建立一条到本地端口的连接 |
n = read(s, buffer, n) | 尝试从套接字向缓冲区读取n 个字节 |
n = write(s, buffer, n) | 尝试从缓冲区中向套接字写入n 个字节 |
close(s) | 完全关闭 TCP 连接 |
shutdown(s,<side>) | 只关闭 TCP 连接的输入或输出端 |
getsockopt(s,... | 读取某个内部套接字配置选项的值 |
setsockopt(s,...) | 修改某个内部套接字配置选项的值 |
TCP性能
HTTP 事务的时延的原因
-
(1) 客户端首先需要根据 URI 确定 Web 服务器的 IP 地址和端口号。如果最近没有对 URI 中的主机名进行访问,通过 DNS 解析系统将 URI 中的主机名转换成一个 IP 地址可能要花费数十秒的时间
-
(2) 接下来,客户端会向服务器发送一条 TCP 连接请求,并等待服务器回送一个请 求接受应答。每条新的 TCP 连接都会有连接建立时延。这个值通常最多只有一 两秒钟,但如果有数百个 HTTP 事务的话,这个值会快速地叠加上去
-
(3) 一旦连接建立起来了,客户端就会通过新建立的 TCP 管道来发送 HTTP 请求。 数据到达时,Web 服务器会从 TCP 连接中读取请求报文,并对请求进行处理因特网传输请求报文,以及服务器处理请求报文都需要时间
-
(4) 然后,Web 服务器会回送 HTTP 响应,这也需要花费时间
TCP 连接握手
-
(1) 请求新的 TCP 连接时,客户端要向服务器发送一个小的 TCP 分组(通常是 40 ~ 60 个字节)。这个分组中设置了一个特殊的 SYN 标记,说明这是一个连接请求
-
(2) 如果服务器接受了连接,就会对一些连接参数进行计算,并向客户端回送一个 TCP 分组,这个分组中的 SYN 和 ACK 标记都被置位,说明连接请求已被接受
-
(3) 最后,客户端向服务器回送一条确认信息,通知它连接已成功建。
各种连接方式
关闭情况
-
US-ASCII 使用 7 位二进制码来表示
编码机制
-
对不安全字符进行编码
-
“转义”表示法 包含一个百分号(%),后面跟着两个表示字符 ASCII 码的十六进制数
字 符 | ASCII码 | 示例URL |
---|---|---|
~ | 126(0x7E) | http://www.joes-hardware.com/%7Ejoe |
空格 | 32(0x20) | http://www.joes-hardware.com/more%20tools.html |
% | 37(0x25) | http://www.joes-hardware.com/100%25satisfaction.html |
保留及受限字符
字 符 | 保留/受限 |
---|---|
% | 保留作为编码字符的转义标志 |
/ | 保留作为路径组件中分隔路径段的定界符 |
. | 保留在路径组件中使用 |
.. | 保留在路径组件中使用 |
# | 保留作为分段定界符使用 |
? | 保留作为查询字符串定界符使用 |
; | 保留作为参数定界符使用 |
: | 保留作为方案、用户 / 口令,以及主机 / 端口组件的定界符使用 |
$ , + | 保留 |
@ & = | 在某些方案的上下文中有特殊的含义,保留 |
{} | \ ^ ~ [] ' | 由于各种传输 Agent 代理,比如各种网关的不安全处理,使用受限 |
< > " | 不安全;这些字符在 URL 范围之外通常是有意义的,比如在文档中对 URL 自身进行定界(比如 http://www.joes-hardware.com),所以应该对其进行编码 |
0x00-0x1F, 0x7F | 受限,这些十六进制范围内的字符都在 US-ASCII 字符集的不可打印区间内 |
>0x7F | 受限,十六进制值在此范围内的字符都不在 US-ASCII 字符集的 7 比特范围内 |
方案
方 案 | 名称 | 描 述 |
---|---|---|
http | 超文本传输协议方案: http://<host>:<port>/<path>?<query>#<frag> | 默认端口为 80 http://www.joes-hardware.com:80/index.html |
https | 与http相似 https://<host>:<port>/<path>?<query>#<frag> | SSL加密 https://www.joes-hardware.com/secure.html |
mailto | 指向E-mail 地址 mailto:<RFC-822-addr-spec> | mailto:joe@joes-hardware.com |
ftp | 文件传输协议 ftp://<user>:<password>@<host>:<port>/<path>;<params> | ftp://anonymous:joe%40joes-hardware.com@prep.ai.mit.edu:21/pub/gnu/ |
| rtsp,rtspu | 实时流传输协议(Real Time Streaming Protocol)解析的音 / 视频 媒体资源的标识符 rtsp://<user>:<password>@<host>:<port>/<path> rtspu://<user>:<password>@<host>:<port>/<path> | rtsp://www.joes-hardware.com:554/interview/cto_video
| | file | 通过本地磁盘、网络文件系统或其他一些文件共享系统 file://<host>/<path> | 默认为正在使用URL 的本地主机 file://OFFICE-FS/policies/casual-fridays.doc | | news | 特定的文章或新闻组 news:<newsgroup> news:<news-article-id> | news:rec.arts.startrek
| | telnet | 访问交互式业务 telnet://<user>:<password>@<host>:<port>/ | telnet://slurp:webhound@joes-hardware.com:23/
|
报文
概念
-
HTTP 报文是在 HTTP 应用程序之间发送的数据块
-
向下流动
-
请求报文(流入)
<method> <request-URL> <version> <headers><entity-body>
-
响应报文(流出)
<version> <status> <reason-phrase> <headers><entity-body>
-
方法(method)
-
请求URL(request-URL)
-
版本(version)
-
状态码(status-code)
-
原因短语(reason-phrase)
-
首部(header)
-
实体的主体部分(entity-body)
HTTP方法
方 法 | 描 述 | 是否包含主体 |
---|---|---|
GET | 从服务器获取一份文档 | 否 |
HEAD | 只从服务器获取文档的首部 | 否 |
POST | 向服务器发送需要处理的数据 | 是 |
PUT | 将请求的主体部分存储在服务器上 | 是 |
TRACE | 对可能经过代理服务器传送到服务器上去的报文进行追踪 | 否 |
OPTIONS | 决定可以在服务器上执行哪些方法 | 否 |
DELETE | 从服务器上删除一份文档 | 否 |
状态码
整体范围 | 已定义范围 | 分 类 |
---|---|---|
100 ~ 199 | 100 ~ 101 | 信息提示 |
200 ~ 299 | 200 ~ 206 | 成功 |
300 ~ 399 | 300 ~ 305 | 重定向 |
400 ~ 499 | 400 ~ 415 | 客户端错误 |
500 ~ 599 | 500 ~ 505 | 服务器错误 |
-
如果收到了状态码 515(在表 所列 5XX 代码的已定义范围之外),就应该认为这条响应指出了服务器的错误,这是 5XX 报文的通用类别
常见状态码
状 态 码 | 原因短语 | 含 义 |
---|---|---|
200 | OK | 成功。请求的所有数据都在响应主体中 |
401 | Unauthorized(未授权) | 需要输入用户名和密码 |
404 | Not Found(未找到) | 服务器无法找到所请求 URL 对应的资源 |
状态码 | 原因短语 | 含义 |
---|---|---|
信息性状态码 | ||
100 | Continue | 请客户端继续 |
101 | Switching Protocols | 说明服务器正在根据客户端的指定,将协议切换成 Update 首部所列的协议 |
成功状态码 | ||
200 | Accepted | 请求没问题 |
201 | Accepted | 用于创建服务器对象的请求 |
202 | Accepted | 请求已被接受,但服务器还未对其执行任何动作 |
| 203 | Non-Authoritative Information | 信息来自资源的一份副本 | | 204 | No Content | 响应报文中包含若干首部和一个状态行,但没有实体的主体部分 | | 205 | Reset Content | 浏览器清除当前页面中的所有 HTML 表单元素 | | 206 | Partial Content | 成功执行了一个部分或 Range(范围)请求 | | 重定向状态码 | | | | 300 | Multiple Choices | 客户端请求一个实际指向多个资源的 URL 时会返回这个状 态码,比如服务器上有某个 HTML 文档的英语和法语版本 | | 301 | Moved Permanently | 在请求的 URL 已被移除时使用 | | 302 | Found | 与 301 状态码类似 | | 303 | See Other | 知客户端应该用另一个 URL 来获取资源 | | 304 | Not Modified | 客户端可以通过所包含的请求首部,使其请求变成有条件的 | | 305 | Use Proxy | 用来说明必须通过一个代理来访问资源 | | 306 | (未使用) | 当前未使用 | | 307 | Temporary Redirect | 与 301 状态码类似 | | 客户端错误 | | | | 400 | Bad Request | 用于告知客户端它发送了一个错误的请求 | | 401 | Unauthorized | 对自己进行认证 | | 402 | Payment Required | 还未使用 | | 403 | Forbidden | 用于说明请求被服务器拒绝了 | | 404 | Not Found | 用于说明服务器无法找到所请求的 URL | | 405 | Method Not Allowed | 起的请求中带有所请求的 URL 不支持的方法 | | 406 | Not Acceptable | 客户端可以指定参数来说明它们愿意接收什么类型的实体 | | 407 | Proxy Authentication Required | 与 401 状态码类似, 但用于要求对资源进行认证的代理服务器 | | 408 | Request Timeout | 请求所花的时间太长 | | 409 | Conflict | 用于说明请求可能在资源上引发的一些冲突 | | 410 | Gone | 与 404 类似,只是服务器曾经拥有过此资源 | | 411 | Length Required | 服务器要求在请求报文中包含 Content-Length 首部 | | 412 | Precondition Failed | 客户端发起了条件请求,且其中一个条件失败了 | | 413 | Request Entity Too Large | 客户端发送的实体主体部分比服务器能够或者希望处理的要大 | | 414 | Request URI Too Long | 客户端所发请求中的请求 URL 比服务器能够或者希望处理的要长 | | 415 | Unsupported Media Type | 服务器无法理解或无法支持客户端所发实体的内容类型 | | 416 | Requested Range Not Satisfiable | 请求报文所请求的是指定资源的某个范围,而此范围无效或无法满足 | | 417 | Expectation Failed | 请求的 Expect 请求首部包含了一个期望,但服务器无法满足此期望 | | 服务器错误 | | | | 500 | Internal Server Error | 服务器遇到一个妨碍它为请求提供服务的错误 | | 501 | Not Implemented | 客户端发起的请求超出服务器的能力范围 | | 502 | Bad Gateway | 作为代理或网关使用的服务器从请求响应链的下一条链路上收到了一条伪响应 | | 503 | Service Unavailable | 用来说明服务器现在无法为请求提供服务,但将来可以 | | 504 | Gateway Timeout | 与状态码 408 类似 | | 505 | HTTP Version Not Supported | 服务器收到的请求使用了它无法或不愿支持的协议版本 |
原因短语
-
为状态码提供了文本形式的解释
版本号
-
HTTP/x.y 的形式
-
HTTP/1.0 中的 1和 0 都会被当作一个单独的数字来处理
-
HTTP/2.22 就比 HTTP/2.3 的版本要高,因为 22 比 3 大
-
首部
-
常见的首部
首部实例 | 描 述 |
---|---|
Date:Tue,3Oct 1997 02:16:03 GMT | 服务器产生响应的日期 |
Content-length:15040 | 实体的主体部分包含了 15 040 字节的数据 |
Content-type:image/gif | 实体的主体部分是一个 GIF 图片 |
Accept: image/gif, image/jpeg, text/html | 客户端可以接收 GIF 图片和 JPEG 图片以及 HTM |
-
分隔用空格 跨行用空格/Tab
方法
-
安全方法
-
GET
-
HEAD
-
-
GET
-
请求服务器发送某个资源
-
-
HEAD
-
请求服务器发送某个资源
-
服务器在响应中只返回首部。不会返回实 体的主体部分
-
-
PUT
-
向服务器写入文档
-
-
POST
-
向服务器输入数据的
-
通常指表单数据
-
-
TRACE
-
客户端发起一个请求
-
客户端可以看到请求修改的内容
-
-
OPTIONS
-
请求 Web 服务器告知其支持的各种功能
-
比如 询问服务器通常支持 哪些方法,或者对某些特殊资源支持哪些方法
-
-
DELETE
-
请服务器删除请求 URL 所指定的资源
-
扩展方法
方 法 | 描 述 |
---|---|
LOCK | 允许用户“锁定”资源——比如,可以在编辑某个资源的时候将其锁定,防别人同时对其进行修改 |
MKCOL | 允许用户创建资源 |
COPY | 便于在服务器上复制资源 |
MOVE | 在服务器上移动资源 |
首部
首 部 | 描 述 |
---|---|
信息性首部 |
|
Connection | 允许客户端和服务器指定与请求 / 响应连接有关的选项 |
Date | 提供日期和时间标志,说明报文是什么时间创建的 |
MIME-Version | 给出了发送端使用的 MIME 版本 |
Trailer | 如果报文采用了分块传输编码(chunked transfer encoding)方式,就可以用这个首部列出位于报文拖挂(trailer)部分的首部集合 |
Transfer-Encoding | 告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式 |
Update | 给出了发送端可能想要“升级”使用的新版本或协议 |
Via | 显示了报文经过的中间节点(代理、网关) |
缓存首部 |
|
Cache-Control | 用于随报文传送缓存指示 |
Pragma | 另一种随报文传送指示的方式,但并不专用于缓存 |
请求首部 |
|
Client-IP | 提供了运行客户端的机器的 IP 地址 |
From | 提供了客户端用户的 E-mail 地址 |
Host | 给出了接收请求的服务器的主机名和端口号 |
Referer | 提供了包含当前请求 URI 的文档的 URL |
UA-Color | 提供了与客户端显示器的显示颜色有关的信息 |
UA-CPU | 给出了客户端 CPU 的类型或制造商 |
UA-Disp | 提供了与客户端显示器(屏幕)能力有关的信息 |
UA-OS | 给出了运行在客户端机器上的操作系统名称及版本 |
UA-Pixels | 提供了客户端显示器的像素信息 |
User-Agent | 将发起请求的应用程序名称告知服务器 |
Accept 首部 |
|
Accept | 告诉服务器能够发送哪些媒体类型 |
Accept-Charset | 告诉服务器能够发送哪些字符集 |
Accept-Encoding | 告诉服务器能够发送哪些编码方式 |
Accept-Language | 告诉服务器能够发送哪些语言 |
TE | 告诉服务器可以使用哪些扩展传输编码 |
条件请求首部 |
|
Expect | 允许客户端列出某请求所要求的服务器行为 |
If-Match | 如果实体标记与文档当前的实体标记相匹配,就获取这份文档 |
If-Modified-Since | 除非在某个指定的日期之后资源被修改过,否则就限制这个请求 |
If-None-Match | 如果提供的实体标记与当前文档的实体标记不相符,就获取文档 |
If-Range | 允许对文档的某个范围进行条件请求 |
If-Unmodified-Since | 除非在某个指定日期之后资源没有被修改过,否则就限制这个请求 |
Range | 如果服务器支持范围请求,就请求资源的指定范围 |
安全请求首部 |
|
Authorization | 包含了客户端提供给服务器,以便对其自身进行认证的数据 |
| Cookie | 客户端用它向服务器传送一个令牌——它并不是真正的安全首部,但确实 隐含了安全功能 | | Cookie2 | 用来说明请求端支持的 cookie 版本 | | 代理请求首部| | | Max-Forward | 在通往源端服务器的路径上,将请求转发给其他代理或网关的最大次 <br/>数——与 TRACE 方法一同使用 | | Proxy-Authorization | 与 Authorization 首部相同,但这个首部是在与代理进行认证时使用的 | | Proxy-Connection | 与 Connection 首部相同,但这个首部是在与代理建立连接时使用的 | |
响应的信息性首部| | | Age | (从最初创建开始)响应持续时间 | | Public | 服务器为其资源支持的请求方法列表 | | Retry-After | 如果资源不可用的话,在此日期或时间重试 | | Server | 服务器应用程序软件的名称和版本 | | Title | 对 HTML 文档来说,就是 HTML 文档的源端给出的标题 | | Warning | 比原因短语中更详细一些的警告报文 | |
协商首部| | | Accept-Ranges | 对此资源来说,服务器可接受的范围类型 | | Vary | 服务器查看的其他首部的列表,可能会使响应发生变化 | |
安全响应首部| | | Proxy-Authenticate | 来自代理的对客户端的质询列表 | | Set-Cookie | 不是真正的安全首部,但隐含有安全功能;可以在客户端设置一个令牌, <br/>以便服务器对客户端进行标识 | | Set-Cookie2 | 与 Set-Cookie 类似,RFC 2965 Cookie 定义 | | WWW-Authenticate | 来自服务器的对客户端的质询列表 | |
实体的信息性| | | Allow | 列出了可以对此实体执行的请求方法 | | Location | 告知客户端实体实际上位于何处 | |
内容首部| | | Content-Base | 解析主体中的相对 URL 时使用的基础 URL | | Content-Encoding | 对主体执行的任意编码方式 | | Content-Language | 理解主体时最适宜使用的自然语言 | | Content-Length | 主体的长度或尺寸 | | Content-Length | 资源实际所处的位置 | | Content-MD5 | 主体的 MD5 校验和 | | Content-Range | 在整个资源中此实体表示的字节范围 | | Content-Type | 这个主体的对象类型 | |
实体缓存首部` | | | ETag | 与此实体相关的实体标记 | | Expires | 实体不再有效,要从原始的源端再次获取此实体的日期和时间 | | Last-Modified | 这个实体最后一次被修改的日期和时间 |
连接管理TCP
TCP/IP
-
一种常用的分组交换网络分层协议集
-
URL----域名(主机名)解析(DNS)------IP------端口------建立连接--------请求报文-------响应报文-----关闭连接
-
TCP连接(数据管道)------>分段(小数据块)------IP分组
-
IP分组
-
一个 IP 分组首部 (通常为 20 字节)
-
包含了源和目的 IP 地址、长度和其他一些标记
-
-
一个 TCP 段首部(通常为 20 字节)
-
包含了 TCP端口号、TCP 控制标记,以及用于数据排序和完整性检查的一些数字值
-
-
一个 TCP 数据块(0 个或多个字节)
-
-
TCP 连接是通过 4 个值来识别的
-
< 源 IP 地址、源端口号、目的 IP 地址、目的端口号 >
-
-
常见套接字接口函数
套接字API调用 | 描 述 |
---|---|
s = socket(<parameters>) | 创建一个新的、未命名、未关联的套接字 |
bind(s,<local IP:port | 向套接字赋一个本地端口号和接口 |
connect(s, <remote IP:port>) | 创建一条连接本地套接字与远程主机及端口的连接 |
listen(s,...) | 标识一个本地套接字,使其可以合法接受连接 |
s2 = accept(s) | 等待某人建立一条到本地端口的连接 |
n = read(s, buffer, n) | 尝试从套接字向缓冲区读取n 个字节 |
n = write(s, buffer, n) | 尝试从缓冲区中向套接字写入n 个字节 |
close(s) | 完全关闭 TCP 连接 |
shutdown(s,<side>) | 只关闭 TCP 连接的输入或输出端 |
getsockopt(s,... | 读取某个内部套接字配置选项的值 |
setsockopt(s,...) | 修改某个内部套接字配置选项的值 |
TCP性能
HTTP 事务的时延的原因
-
(1) 客户端首先需要根据 URI 确定 Web 服务器的 IP 地址和端口号。如果最近没有对 URI 中的主机名进行访问,通过 DNS 解析系统将 URI 中的主机名转换成一个 IP 地址可能要花费数十秒的时间
-
(2) 接下来,客户端会向服务器发送一条 TCP 连接请求,并等待服务器回送一个请 求接受应答。每条新的 TCP 连接都会有连接建立时延。这个值通常最多只有一 两秒钟,但如果有数百个 HTTP 事务的话,这个值会快速地叠加上去
-
(3) 一旦连接建立起来了,客户端就会通过新建立的 TCP 管道来发送 HTTP 请求。 数据到达时,Web 服务器会从 TCP 连接中读取请求报文,并对请求进行处理因特网传输请求报文,以及服务器处理请求报文都需要时间
-
(4) 然后,Web 服务器会回送 HTTP 响应,这也需要花费时间
TCP 连接握手
-
(1) 请求新的 TCP 连接时,客户端要向服务器发送一个小的 TCP 分组(通常是 40 ~ 60 个字节)。这个分组中设置了一个特殊的 SYN 标记,说明这是一个连接请求
-
(2) 如果服务器接受了连接,就会对一些连接参数进行计算,并向客户端回送一个 TCP 分组,这个分组中的 SYN 和 ACK 标记都被置位,说明连接请求已被接受
-
(3) 最后,客户端向服务器回送一条确认信息,通知它连接已成功建。