HTTP
概念
1、HTTP是Hypertext Transfer Protocol超文本传输协议,是一种应用协议
2、HTTP协议是无状态的
3、HTTP事务是指一次request-response的完整过程
4、HTTP协议是构建在TCP协议之后的,传输过程中的分组、重排与防止丢包是TCP进行控制,减少了HTTP协议的复杂性
5、HTTP是端到端,一次HTTP可以明确区分客户端和服务端,发送请求的为客户端
6、HTTP当前的协议版本为HTTP/1.1,HTTP/2.0还没有普及
7、HTTP最新版的RFChttp://www.ietf.org/rfc/rfc2616.txt
8、WEB组件包括:代理、缓存、网关、隧道、Agent代理
协议详解
协议栈位置
链路层头 IP头 TCP头 HTTP
报文封装
报文首部 请求行
状态行 请求的方法 请求URL HTTP协议版本
HTTP协议版本 响应结构 原因短语
请求首部字段
响应首部字段 请求首部:
1、请求报文特有的,如Accept: /
响应首部:
1、响应报文特有的,如Server: Tiki-Hut/1.0
通用首部字段 1、客户端和服务器都可以使用的通用首部,提供一些非常有用的通用功能
2、比如, Date 首部就是一个通用首部,每一端都可以用它来说明构建报文的时间和日期
实体首部字段 1、实体首部指的是用于应对实体主体部分的首部,用实体首部来说明实体主体部分的数据类型如Content-Type: text/html; charset=iso-latin-1
扩展首部字段 扩展首部是非标准的首部,由应用程序开发者创建,但还未添加到已批准的HTTP 规范中去。即使不知道这些扩展首部的含义,HTTP 程序也要接受它们并对其进行转发
空白行 CTRL + LF
报文主体
资源与URL
URI 1、URI 是一类更通用的资源标识符
2、由两个主要的子集 URL 和 URN 构成
URL 1、URL 实际上是URI的一个子集
2、URL 分以下三部分:URL 方案(schema)、服务器的位置(www.joes-hardware.com)、资源路径(/index.html)
3、格式:
://:@:/;?#
4、如图
URN
URL编码
方法、状态码、首部
方法
方法 协议版本 说明
GET 1.0、1.1 获取资源
POST 1.0、1.1 1、POST 方法起初是用来向服务器输入数据的
2、向服务器发送表单数据
HEAD 1.0、1.1 HEAD 方法与 GET 方法的行为很类似,但服务器在响应中只返回首部。不会返回实体的主体部分
1、在不获取资源的情况下了解资源的情况(比如,判断其类型)
2、通过查看响应中的状态码,看看某个对象是否存在
3、通过查看首部,测试资源是否被修改了
PUT 1.0、1.1 与 GET 从服务器读取文档相反,PUT 方法会向服务器写入文档
如:/PUT.txt ddddd 将ddddd写入到文档中
DELETE 1.0、1.1 请服务器删除请求 URL 所指定的资源
TRACE 1.1 客户端发起一个请求时,这个请求可能要穿过防火墙、代理、网关或其他一些应用程序。每个中间节点都可能会修改原始的 HTTP 请求。TRACE 方法允许客户端在最终将请求发送给服务器时,看看它变成了什么样子
OPTIONS 1.1 OPTIONS 方法请求 Web 服务器告知其支持的各种功能
CONNECT 1.1
LINK 1.0
UNLINK 1.0
状态码
仅记录在 RFC2616 上的 HTTP 状态码就达 40 种,若再加上WebDAV(Web-based Distributed Authoring and Versioning,基于万维网的分布式创作和版本控制)(RFC4918、5842) 和附加 HTTP 状态码(RFC6585)等扩展,数量就达 60 余种。别看种类繁多,实际上经常使用的大概只有 14 种
类别 原因短语
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错
常用的状态码
状态码
200 OK
表示从客户端发来的请求在服务器端被正常处理了
204 No Content
该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体
206 Partial Content
该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET 请求。响应报文中包含由 Content-Range 指定范围的实体内容
301 Moved Permanently
永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后
应使用资源现在所指的 URI
如果已经把资源对应的 URI保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保存
302 Found
临时性重定向
该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问
303 See Other
该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET方法定向获取请求的资源
304 Not Modified
该状态码表示客户端发送附带条件的请求时,服务器端允许请求访
问资源,但未满足条件的情况
304 状态码返回时,不包含任何响应的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关系
307 Temporary Redirect
临时重定向
尽管 302 标准禁止 POST 变换成 GET,但实际使用时大家并不遵守。307 会遵照浏览器标准,不会从 POST 变成 GET。但是,对于处理响应时的行为,每种浏览器有可能出现不同的情况
400 Bad Request
该状态码表示请求报文中存在语法错误
401 Unauthorized
该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息
403 Forbidden
该状态码表明对请求资源的访问被服务器拒绝了
404 Not Found
该状态码表明服务器上无法找到请求的资源
500 Internal Server Error
该状态码表明服务器端在执行请求时发生了错误
503 Service Unavailable
该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求
首部
1、HTTP1.1中RFC中定义了47个首部,详见RFC2616
通用首部字段
Cache-Control 控制缓存的行为
Connection 逐跳首部、连接的管理
Date 创建报文的日期时间
Pragma 报文指令
Trailer 报文末端的首部一览
Transfer-Encoding 指定报文主体的传输编码方式
Upgrade 升级为其他协议
Via 代理服务器的相关信息
Warning 错误通知
请求首部字段
Accept 用户代理可处理的媒体类型
Accept-Charset 优先的字符集
Accept-Encoding 优先的内容编码
Accept-Language 优先的语言(自然语言)
Authorization Web认证信息
Expect 期待服务器的特定行为
From 用户的电子邮箱地址
Host 请求资源所在服务器
If-Match 比较实体标记(ETag)
If-Modified-Since 比较资源的更新时间
If-None-Match 比较实体标记(与 If-Match 相反)
If-Range 资源未更新时发送实体 Byte 的范围请求
If-Unmodified-Since 比较资源的更新时间(与If-Modified-Since相反)
Max-Forwards 最大传输逐跳数
Proxy-Authorization 代理服务器要求客户端的认证信息
Range 实体的字节范围请求
Referer 对请求中 URI 的原始获取方
TE 传输编码的优先级
User-Agent HTTP 客户端程序的信息
响应首部字段
Accept-Ranges 是否接受字节范围请求
Age 推算资源创建经过时间
ETag 资源的匹配信息
Location 令客户端重定向至指定URI
Proxy-Authenticate 代理服务器对客户端的认证信息
Retry-After 对再次发起请求的时机要求
Server HTTP服务器的安装信息
Vary 代理服务器缓存的管理信息
WWW-Authenticate 服务器对客户端的认证信息
实体首部字段
Allow 资源可支持的HTTP方法
Content-Encoding 实体主体适用的编码方式
Content-Language 实体主体的自然语言
Content-Length 实体主体的大小(单位:字节)
Content-Location 替代对应资源的URI
Content-MD5 实体主体的报文摘要
Content-Range 实体主体的位置范围
Content-Type 实体主体的媒体类型
Expires 实体主体过期的日期时间
Last-Modified 资源的最后修改日期时间
一次HTTP请求
HTTP身份认证
BASIC
DIGEST
详见
http://blog.csdn.net/andrewpj/article/details/45727853
http://www.ietf.org/rfc/rfc2617.txt
SSL客户端
FORM表单
最常见的认证方式