http简介
http(hypertext transfer protocol),即超文本传输协议。因特网的多媒体信息,有如下特点:
- 可靠传输,基于TCP/IP链接
- 位于应用层上
重点内容
http链接处理
- 浏览器从URL中解析出服务器的主机名
- 浏览器将服务器的主机名转换成服务器的IP地址
- 浏览器将端口号(如果有的话)从URL解析出来
- 浏览器建立一条与WEB服务器的TCP链接
- 浏览器向服务器发送一条HTTP请求报文
- 服务器向浏览器回送一条HTTP请求报文
- 关闭链接,浏览器显示文档
URI
URI(Uniform Resource Identifier),即统一资源定位符。URI的作用在于将网上的资源命名规范化,客户端能够通过其定位每一个资源,就像生活中地址一样,从国家、省份一直到街道门牌号。
在URI出现前地址并不是规范化的,因此你需要自己通过ftp的方式登陆远程服务器进行一些操作才能拿访问到资源。
URI将资源地址规范化,使得大众能够直接通过URI地址获得资源。
URI的结构
<scheme>://<user>:<password>@<host><port>/<path>;<params>?<query>#<flag>
组件 | 描述 | 默认值 |
---|---|---|
scheme/方案 | 访问服务器以获取资源的协议 | 无 |
use/用户 | 访问服务器需要的用户名 | 匿名 |
密码/password | 用户名对应的密码 | E-mail地址 |
host/主机 | 资源服务器的IP地址或主机名 | 无 |
port/端口 | 资源服务器监听的端口号(HTTP默认80) | 每个方案特有 |
path/路径 | 资源在服务器上的本地名 | 无 |
params/参数 | 某些方案会用这个组件来输入参数,格式:参数名=值 | 无 |
query/查询 | 某些方案会用这个组件传递参数以激活程序 | 无 |
flag/标志 | 一小片或一部分资源的名字,这部分只会在客户端处理,不会传递到服务器 | 无 |
报文结构
以下会用charles工具来分析报文的结构,你可以在这里下载charles
request
格式
如上图为request报文的结构,一般包括三部分
- 请求行
请求行请求的方法,请求的链接以及HTTP的版本号 - 首部
可以有零个首部或多个首部,每个首部的形式为”首部名: 值”,首部是以空行结束的 - 实体的主体部分
实体是一个由任意数据组成的数据块,也可以只是一个空行
下面是报文结构的模板
<method> <request-URL> <version>
<header>
<entity-body>
method/方法
方法 | 描述 | 是否包含主体 |
---|---|---|
GET | 从服务器取一份文档 | 否 |
HEAD | 只从服务器取文档的首部 | 否 |
POST | 向服务器发送需要处理的数据 | 是 |
PUT | 将请求的主体部分存储在服务器上 | 是 |
TRACE | 对可能经过代理服务器上取的报文进行追踪 | 否 |
OPTIONS | 决定可以在服务器上执行哪些方法 | 否 |
DELETE | 从服务器上删除一份文档 | 否 |
response
格式
如上图,响应报文的格式包括三行,
- 响应行
包括版本号、状态码、原因短语 - 首部
与request报文一样的格式 - 实体的主题部分
<version> <status-code> <reason-phrase>
<header>
<entity-body>
链接
我是如何讲清楚TCP运输链接管理的
http://blog.csdn.net/shawjan/article/details/45130531
我是如何讲清楚TCP/IP是如何实现可靠传输的
http://blog.csdn.net/shawjan/article/details/45117945