http协议基础知识
URI
统一资源标识符,为服务器上每个资源提供一个名字
包含url和urn
urn
统一资源名,这些名字与服务器位置无关,没有大范围使用
例子:
urn:ietf:rfc:2141
url
url是统一资源定位符,url描述了一台特定服务器上某资源的特定位置
是标识资源的最常见形式
url语法
由九个部分构成
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
scheme: 方案,大小写无关,指定了使用协议
user:用户名,常见在ftp
password: 密码, 常见在ftp
host: 域名或ip
port: 服务器正在监听的端口, 下层使用了TCP协议的话,HTTP协议的端口是80
path: 路径,类似分级的文件系统路径,指定资源在服务器的位置
params: 参数
http://www.a.com/a;id=1/index.html;name=y
这个例子中有两个路径一个是a,其参数为id值为1
另一个路径段位index.html,其参数为name值为y
query: 查询字符串,查询组件
http://www.a.com/index.php?a=1&b=y
查询组件中有两个名/值对: a = 1 和 b = y
frag : 片段组件
示例
http://www.a.com/index.html#name
http报文流
http报文的发送方为上游,接收方为下游
请求的时候用户为上游,响应的时候服务器为上游
http报文的组成部分
起始行,首部和主体
报文格式
请求报文
<method> <request-URL> <version>
<headers>
<entity-body>
响应报文
<version> <status> <reason-phrase>
<headers>
<entity-body>
method: 请求方法
客户端希望服务器对资源执行的动作,如get或post
request-url: 资源地址
version: 版本,主版本和次要版本号都是整数
HTTP/<major>.<minor>
status-code: 状态码,描述了请求过程中发生的情况
reason-phrase: 数字状态码的可读版本
headers: 首部,可以有零或多个首部
Content-type: text/plain
Content-length: 10
entity-body: 实体主体,可以是html文档,文件,程序,邮件
通用首部
Connection 允许客户端和服务器指定与请求/响应连接有关的选项
Date 指定报文的创建时间
MIME-Version 发送方使用的MIME版本
Via 显示报文经过的中间代理,网关
Cache-Control 报文传送缓存指示
请求首部
Client-Ip 客户端的机器ip
Host 接收服务器的主机和端口号
referer 请求文档的url
User-Agent 发送请求的应用程序名称
From 客户端用户的email地址
Accept 通知服务器响应的媒体类型
Accept-Charset 告诉服务器响应的字符集
Accept-Language 告诉服务器响应的语言
Authorization 安全认证的数据
Cookie 客户端用此来向服务器传送一个令牌
Proxy-Authorization 代理认证使用
Proxy-Connection 代理连接使用
响应首部
Age 响应持续时间
Public 服务器为其资源支持的请求方法列表
Server 服务器应用程序名称和版本
Title 如果是html文档, 就是源文档标题
Set-Cookie 用此为客户端设置一个令牌
Allow 可对此实体执行的请求方法
Location 告知客户端实体实际位置,将接收端定向到资源的url
Content-Base 解析主体中相对url时使用的基础url
Content-Encoding 对主体执行的编码方式
Content-Language 主体的语言
Content-Length 主体的长度大小
Content-MD5 主体的MD5校验和
Content-Type 主体的类型
Last-Modified 实体最后一次被修改的日期时间