您的位置:首页 > 理论基础 > 计算机网络

HTTP RFC 协议 笔记

2013-03-03 20:44 274 查看
作者: 溪水清澈

HTTP协议, 宽松的应用程序,

协议规定头域之间只有一个空格,

但是服务器和客户端应该可以解析多个空格存在的情况

返回码

"101" ; 10.1.2节: 转换协议

"200" ; 10.2.1节: OK

"201" ; 10.2.2节: 创建

"202" ; 10.2.3节: 接受

"203" ; 10.2.4节: 非权威信息

"204" ; 10.2.5节: 无内容

"205" ; 10.2.6节: 重置内容

"206" ; 10.2.7节: 局部内容

"300" ; 10.3.1节: 多样选择

"301" ; 10.3.2节: 永久移动

"302" ; 10.3.3节: 创建

"303" ; 10.3.4节: 观察别的部分

"304" ; 10.3.5节: 只读

"305" ; 10.3.6节: 用户代理

"307" ; 10.3.8节 临时重发

"400" ; 10.4.1节: 坏请求

"401" ; 10.4.2节: 未授权的

"402" ; 10.4.3节: 必要的支付

"403" ; 10.4.4节: 禁用

"404" ; 10.4.5节: 没找到

"405" ; 10.4.6节: 不允许的方式

"406" ; 10.4.7节: 不接受

"407" ; 10.4.8节: 需要代理验证

"408" ; 10.4.9节: 请求超时

"409" ; 10.4.10节; 冲突

"410" ; 10.4.11节: 停止

"411" ; 10.4.12节: 需要的长度

"412" ; 10.4.13节; 预处理失败

"413" ; 10.4.14节: 请求实体太大

"414" ; 10.4.15节; 请求-URI太大

"415" ; 10.4.16节: 不支持的媒体类型

"416" ; 10.4.17节: 请求的范围不满足

"417" ; 10.4.18节: 期望失败

"500" ; 10.5.1节: 服务器内部错误

"501" ; 10.5.2节: 不能实现

"502" ; 10.5.3节: 坏网关

"503" ; 10.5.4节: 服务不能实现

"504" ; 10.5.5节: 网关超时

"505" ; 10.5.6节: HTTP版本不支持

connection

keep-alive | close | upgrade

内容协商

Accept

Accept-Charset

Accept-Language

Accept-Encoding

User-Agent

Accept

Accept: (text/plain; q=0.5), text/html, (text/x-dvi; q=0.8), text/x-c

中文解释: (源代码中没有括号, 括号只是为了说明两个值有关联)

这些类型中, 我最喜欢text/html, text/x-c( 因为假定 q = 1),

如果没有, text/x-dvi 也可以接受,

如果还没有, 只能接受text/plain啦.

Accept-Ranges( 只有这个有s )

bytes

范围请求

Authorization

认证

Cache-Control

Pragma: no-cache // http/1.0

Content-Disposition

attachment; filename="fname.ext"

如果此头域用于一个

Content-Type: application/octet-stream

响应里,那么含义就是用户代理不应该展现响应,但是它应该直接进入一个‘保存响应为…’对话框。

文件名应该括起来

Content-Encoding

gzip

identity, 应该是不变吧??

deflate

Content-Language

Content-Length

除非被禁用, 否则必须有, 貌似由apache负责, PHP无能为力

Content-Location

Content-MD5

body的md5摘要

Content-Range

假定实体共含1234字节,

byte-content-range-spec值的例子如下:

. The first 500 bytes:

bytes 0-499/1234

. The second 500 bytes:

bytes 500-999/1234

. All except for the first 500 bytes:

bytes 500-1233/1234

. The last 500 bytes:

bytes 734-1233/1234

如果此头使用,

需要配合: Content-Length来确定实际传输的数据长度

断点续传

由客户端带 Range过来,

如果php不修改Content-Range,

那么apache会自己把php输出的信息,

再进行局部截取, 填写Content-Range,

并交给客户端

php发送header Content-Range的头,

然后发送局部数据.

说明:

Content-Length 可能不用处理, apache会处理好的.

Content-Type

Content-type: multipart/byteranges; boundary=分割符(应该不带引号, 随机字符串)

每部分数据会有Content-Type, Content-Range头

Date

Sun, 06 Nov 1994 08:49:37 GMT

Sunday, 06-Nov-94 08:49:37 GMT

Sun Nov 6 08:49:37 1994

必须

这三种都应该可以解析,

但是服务器只能发送第一种

星期: 可简写可全写

月: 必须简写

ETag

比较来自同一资源的不同实体

Expires

例: Thu, 01 Dec 1994 16:00:00 GMT

优先级低于 Cache-Control

From

用户Email: win@ab.com

机器人应该有这个头

Host

必须

If-Match

值为: ETag

条件方法

If-Modified-Since

值为 GMT时间, 见Date, 返回状态为: 304(未变)

条件方法

If-None-Match

Etag

如果不匹配

If-Range

Etag | Date

如果实体没有改变,发送我想要的部分

如果实体改变了,那就把整个新的实体发过来。

If-Unmodified-Since

Date

Last-Modified

Location

完整的URL, 包括http://前缀

Max-Forwards

ttl类似

Pragma

no-cache, *

包含特定执行指令

Proxy-Authenticate

407响应使用

Proxy-Authorization

Range

第一个500字节(字节偏移量0-499,包括0和499):

bytes=0-499

第二个500字节(字节偏移量500-999,包括500和999):

bytes=500-999

最后500字节(字节偏移量9500-9999,包括9500和9999):

bytes=-500 或 bytes=9500-

仅仅第一个和最后一个字节(字节0和9999):

bytes=0-0,-1

关于第二个500字节(字节偏移量500-999,包括500和999)的几种合法但不规范的叙述:

bytes=500-600,601-999

bytes=500-700,601-999

位于: RFC 14.35

Referer

本应是: Referrer, 出现了笔误, 延续至今

这个头, 可以允许服务器为维护而跟踪过时或写错的链接

Retry-After

Server

TE ( transfer-coding )

trailers 客户端愿意接受(chunked)传输编码响应的尾部(trailer)

块传输, 看起来像是传附件

Transfer-Encoding

Upgrade

Upgrade常用头域允许客户端指定它支持什么样的附加传输协议,如果服务器会切换到Upgrade指定的协议如果它觉得合适的话。

如果同意切换协议, 应该返回 101 状态

协议切换

如果使用这个头,

那么connection里面必须有upgrade

User-Agent

Vary

Via

常用头域必须被网关和代理使用

Warning

警告信息

WWW-Authenticate

Basic realm="服务器提示信息"

客户端用头:

Authorization: Basic MjM6MzIz

用户名和密码为: md5( 'user:password' );

必须包含在 401 中, 由服务器发出的头

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: