HTTP协议的学习
标签(空格分隔): 前端 HTTP
HTTP过程
请求从客户端发出,服务器端响应请求并返回
URI 和 URL[^1]
URI 统一资源标识符
uniform resource identifier
,统一资源标识符,用来唯一的标识一个资源;URI是一种语义上的抽象概念,可以是绝对的,也可以是相对的.
URL 统一资源描述符
uniform resource locator
,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源.
HTTP报文[2]
HTTP报文分为请求报文和响应报文两种。报文由报文首部和报文主题两部分组成。报文首部一般由请求行(或状态行),首部字段,cookie组成。
请求端(客户端)的报文称为请求报文,响应端(服务器端)报文称为响应报文
图1. 请求报文首部
请求行 由 方法、URI、HTTP版本组成
图2. 响应报文首部
状态行 由 HTTP版本、状态码组成
HTTP状态码的学习
类别 | 含义 | 原因 |
---|---|---|
1XX | 信息码 | 请求正在处理 |
2XX | 成功状态码 | 请求正常处理完毕 |
3XX | 重定向 | 请求需要进一步处理 |
4XX | 客户端出错 | 服务器无法处理请求 |
5XX | 服务器端错误 | 服务器处理请求出错 |
2XX 成功
- 200 OK
请求被处理 - 202 No Content
请求被处理,返回内容中没有内容主题 - 206 Partial Content
服务器成功处理客户端的范围请求
3XX 重定向
- 301 Moved Permanently
永久性重定向,请求的资源被分配了新的URI,以后需要使用新的URI。 - 302 Found
临时重定向,请求的资源暂时被分配给了新的URI - 303 See Other
请求对应的资源存在另一个URI,应使用GET方法定向获取请求的资源 - 304 Not Modified
服务器允许访问资源,但为满足条件,返回的响应不包含主体部分
该状态码,通常用于缓存策略 - 307 Temporary Redirect
4XX 客户端错误
- 400 Bad Request
请求报文存在语法错误 - 401 Unauthorized
发送的请求需要通过HTTP认证 - 403 Forbidden
对请求资源的访问被拒绝 - 404 Not Found
服务器上无法找到该资源
5XX 服务器错误
- 500 Internel Server Error
服务器执行请求时发生错误 - 503 Service Unavailable
服务器暂时无法处理请求
HTTP首部
HTTP首部字段根据用途,分为了通用首部字段、请求首部字段、响应首部字段、实体响应字段。
通用首部字段
请求报文和响应报文都会使用的字段
- Cache-Control
控制缓存行为 Connection
- 管理持久连接
connection:keep-alive
- 控制不再转发给代理的首部字段
- 管理持久连接
Date
创建报文的日期和时间- Pragma:no-cache
客户端要求中间服务器不返回缓存的资源 - Transfer-Encoding
传输报文主题时采时采用的编码方式 - Warning
告知用户与缓存相关的问题
请求首部字段
客户端往服务器发送请求报文中所使用的字段
- Accept
用户代理能处理的媒体类型及媒体类型优先级 - Accept-Charset
用户代理能够处理的字符集 - Accept-Encoding
支持的内容编码 - Accept-Language
能够处理的自然语言 - Authorization
用户的认证信息 - Host
请求的资源所处互联网主机名和端口号
host:bcp.crwdcntrl.net
- If-Match;If-Modified-Since;If-None-Match;If-Range;If-Unmodified-Since
这类字段称为条件请求,服务器接收到附带条件的请求后,只有判断为真时,才会去执行请求
- If-Match:12345,告诉服务器资源所用的字体标记ETag值;
- If-Modified-Since:date ,如果该字段早于资源的更新时间,则处理该请求
- If-None-Match:与Etag值不相等时处理请求
- If-Range : 字段与Etag相等或者更新的日期时间匹配,则做范围处理请求,否则返回全部资源
- If-Unmodified-Since:指定的请求资源只有在指定时间之后未发生更新的情况下,处理请求
- User-Agent
创建请求的浏览器和用户代理名称等信息传达给服务器
响应首部字段
由服务器向客户端返回响应报文中的字段,补充相应的附加信息、服务器信息、以及对客户端的附加要求信息
- Accept-Ranges
告诉客户端服务器是否能处理范围请求 - Etag
告诉客户端实体标识,将资源以字符串形式作为唯一性标识。当资源更新时,Etag也需要更新。 - Server
服务器上安装的HTTP服务器应用程序信息 - WWW-Authenticate
用于HTTP访问认证 - Location
可以将响应接受方引导至某个与请求URI位置不同的资源,配合3XX重定向使用,浏览器会强制对重定向资源的访问
实体首部字段
实体部分所使用的首部,用于补充内容的更新时间等实体相关信息
- Content-Encoding
告知客户端或服务器对实体的主体部分选用的内容编码方式,指对内容的无损压缩方式:gzip
、compress
- Content-Language
实体部分所使用的自然语言 - Content-Length
实体主体部分的内容大小 - Content-Location
表示对报文主体返回资源对应的URI - Content-MD5
对报文主体执行MD5算法获得的值 - Content-Type
实体主体部分对象的媒体类型 - Content-Range
针对范围请求,告知客户端作为响应返回的实体哪个部分符合范围请求 - Expires
资源失效的日期,缓存服务器在接收到首部字段Expires的响应后,会缓存下来应答请求,在Expires字段到期时间之前,响应副本会一直被保存。 - Last-Modified
资源最终修改时间
Cookie
首部字段名 | 说明 | 首部类型 |
---|---|---|
Set-Cookie | 开始状态管理所使用的Cookie信息 | 响应首部字段 |
Cookie | 服务器收到的Cookie信息 | 请求首部字段 |
Set-Cookie:status=enable;expires=Thu, 10 Mar 2016 21:36:17 GMT;path=/;domain=.xx.com;
浏览器的缓存
Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于Expires[3].
Cache-Control参数说明
Cache-Control:private,max-age=0,no-cache
指定 | 说明 |
---|---|
no-cache | 强制向源服务器再次验证 |
no-store | 不缓存请求或响应的内容 |
max-age(s-maxage) | 响应的最大Age值 |
max-stale | 缓存资源即使过期了也可以接受 |
min-fresh | 期望在指定时间内的响应仍有效 |
no-transform | 代理不开更改媒体类型 |
only-if-cached | 要求缓存服务器不重新加载响应,也不会确认资源的有效性 |
public | 可向任何人提供缓存 |
private | 仅向指定的用户返回响应 |
HTTPS安全通信步骤
参考资料
[1]: http://www.cnblogs.com/skynet/archive/2012/11/28/2792503.html url
[2]: https://book.douban.com/subject/25863515/ 图解HTTP请求
[3]: http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html 浏览器缓存机制