HTTP协议的学习

HTTP协议的学习

标签(空格分隔): 前端 HTTP


HTTP过程

请求从客户端发出,服务器端响应请求并返回

Created with Raphaël 2.1.0 client client server server GET / HTTP/1.1;Host:baidu.com HTTP/1.1 200 OK Data:XXX;Content-Type:text/html

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 成功

  1. 200 OK
    请求被处理
  2. 202 No Content
    请求被处理,返回内容中没有内容主题
  3. 206 Partial Content
    服务器成功处理客户端的范围请求

3XX 重定向

  1. 301 Moved Permanently
    永久性重定向,请求的资源被分配了新的URI,以后需要使用新的URI。
  2. 302 Found
    临时重定向,请求的资源暂时被分配给了新的URI
  3. 303 See Other
    请求对应的资源存在另一个URI,应使用GET方法定向获取请求的资源
  4. 304 Not Modified
    服务器允许访问资源,但为满足条件,返回的响应不包含主体部分
    该状态码,通常用于缓存策略
  5. 307 Temporary Redirect

4XX 客户端错误

  1. 400 Bad Request
    请求报文存在语法错误
  2. 401 Unauthorized
    发送的请求需要通过HTTP认证
  3. 403 Forbidden
    对请求资源的访问被拒绝
  4. 404 Not Found
    服务器上无法找到该资源

5XX 服务器错误

  1. 500 Internel Server Error
    服务器执行请求时发生错误
  2. 503 Service Unavailable
    服务器暂时无法处理请求

HTTP首部

HTTP首部字段根据用途,分为了通用首部字段、请求首部字段、响应首部字段、实体响应字段。

通用首部字段

请求报文和响应报文都会使用的字段

  1. Cache-Control
    控制缓存行为
  2. Connection

    • 管理持久连接
      connection:keep-alive
    • 控制不再转发给代理的首部字段
      Created with Raphaël 2.1.0 client client middle middle server server GET / HTTP/1.1;upgrade:HTTP/1.1; connection:upgrade GET / HTTP/1.1
  3. Date
    创建报文的日期和时间

  4. Pragma:no-cache
    客户端要求中间服务器不返回缓存的资源
  5. Transfer-Encoding
    传输报文主题时采时采用的编码方式
  6. Warning
    告知用户与缓存相关的问题

请求首部字段

客户端往服务器发送请求报文中所使用的字段

  1. Accept
    用户代理能处理的媒体类型及媒体类型优先级
  2. Accept-Charset
    用户代理能够处理的字符集
  3. Accept-Encoding
    支持的内容编码
  4. Accept-Language
    能够处理的自然语言
  5. Authorization
    用户的认证信息
  6. Host
    请求的资源所处互联网主机名和端口号
    host:bcp.crwdcntrl.net
  7. 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:指定的请求资源只有在指定时间之后未发生更新的情况下,处理请求
  8. User-Agent
    创建请求的浏览器和用户代理名称等信息传达给服务器

响应首部字段

由服务器向客户端返回响应报文中的字段,补充相应的附加信息、服务器信息、以及对客户端的附加要求信息

  1. Accept-Ranges
    告诉客户端服务器是否能处理范围请求
  2. Etag
    告诉客户端实体标识,将资源以字符串形式作为唯一性标识。当资源更新时,Etag也需要更新。
  3. Server
    服务器上安装的HTTP服务器应用程序信息
  4. WWW-Authenticate
    用于HTTP访问认证
  5. Location
    可以将响应接受方引导至某个与请求URI位置不同的资源,配合3XX重定向使用,浏览器会强制对重定向资源的访问
Created with Raphaël 2.1.0 client client server server otherserver otherserver GET / XXX.html 302 Found;Location:XXX.html GET / XXX.html 200 OK

实体首部字段

实体部分所使用的首部,用于补充内容的更新时间等实体相关信息

  1. Content-Encoding
    告知客户端或服务器对实体的主体部分选用的内容编码方式,指对内容的无损压缩方式:gzipcompress
  2. Content-Language
    实体部分所使用的自然语言
  3. Content-Length
    实体主体部分的内容大小
  4. Content-Location
    表示对报文主体返回资源对应的URI
  5. Content-MD5
    对报文主体执行MD5算法获得的值
  6. Content-Type
    实体主体部分对象的媒体类型
  7. Content-Range
    针对范围请求,告知客户端作为响应返回的实体哪个部分符合范围请求
  8. Expires
    资源失效的日期,缓存服务器在接收到首部字段Expires的响应后,会缓存下来应答请求,在Expires字段到期时间之前,响应副本会一直被保存。
  9. Last-Modified
    资源最终修改时间
首部字段名说明首部类型
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安全通信步骤

Created with Raphaël 2.1.0 client client server server 客户端发送Client Hello报文开始SSL通信,其中包含了SSL版本和加密组件 服务器可进行SSL通信时,回应Server Hello报文。 服务器发送Certificate报文,包含公开密钥 服务器发送Server Hello Done报文,通知客户端,最初阶段的SSL协商结束 客户端以Client Key Exchange报文作为回应,该报文包含了通信加密使用的Pre-master secret随机字符串 客户端继续发送Change Cipher Spec报文,提示服务器,此后的通信会使用Pre-master secret密码加密 Client发送Finised报文。 服务器发送Change Cipher Spec报文 服务器发Finised报文 SSL连接建立,开始http通信,发送HTTP请求。 发送HTTP响应 客户端断开连接,发送close_notify报文

参考资料
[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 浏览器缓存机制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值