HTTP之我见

引子

HTTP(HyperText Transfer Protocol),超文本传输协议,是一个应用层协议,它是互联网上应用最为广泛的一种网络协议,都听说过HTTP协议,但是HTTP协议到底用来干啥,有什么特点,可能就不是很清楚了,在这里我写一些对HTTP的介绍和常见HTTP状态码的解析,帮助大家也帮助自己加深对HTTP的理解。

什么是HTTP

HTTP,超文本传输协议,是一种应用层协议,最初是为了约定HTML的发布与接受方法和规范,它使用在客户端与服务端之间,确保计算机能够正确快速的传输超文本文档,属于TCP/IP的一个子集。

HTTP的特点

HTTP特点有很多,在这里重点阐述HTTP的一个重要特点——无状态。

HTTP早期为了便于使用与设计,是一种无状态的应用层协议,所谓无状态,就是说我第一次请求A数据和我第二次请求A数据,两者之间是相互独立的,并没有什么关系,协议本身是不会保存之前一切的请求和响应报文的信息,这个特性使得HTTP能够更简单的实现,同时能够更快的处理事务。

但是随着网络的发展,我们的网页常常需要对用户的状态做一些处理,例如用户登录某个电商网站,那么在一定时间内,用户使用电商网站的时候就不该再次重新登录,而是网站能够记录用户的登录状态。所以再HTTP 1.1中引入了cookie技术用来最用户的状态做存储。

HTTP消息的简要组成

HTTP消息简单来说由两部分组成,一个是头部(Header),另一部分即体(Body)。

头部大小一般不超过32K,用来存储报文信息的一些属性,请求报文的头部一般包括如下内容:

  • 请求行
  • 请求首部字段
  • 通用首部字段
  • 实体首部字段

响应报文头部如下:

  • 状态行
  • 响应首部字段
  • 通用首部字段
  • 实体首部字段

另一部分,主体部分则是需要传输的具体信息,例如请求主体中的一些参数,响应主体中的HTML文档等等。

HTTP的建立连接过程

HTTP是应用层协议,它是基于TCP这个传输层协议的,所以在建立连接时也需要经历TCP三次握手:

  1. 客户端发送一个带有SYN标志的数据包(喂喂喂,服务器,我想和你通信)
  2. 服务端响应,返回一个SYN/ACK标志的数据包(嗯明白,我收到了你的通信请求了)
  3. 客户端返回一个ACK标志的数据包,握手结束(嗯,明白了)。

那么我们平时的HTTP数据具体是怎么传输的呢,这里就要说到一点网络分层的知识了,网络一般分为五层,自上而下如下:

  • 应用层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层

而HTTP报文发送就是从应用层开始,图如下:

HTTP.jpg

发送端在层与层之间传输信息时,每经过一层就会打上一层的首部,反之,接收端就会逐层解包,最后拿到自己想要的信息。

HTTP常见状态码解释

1XX 消息

以1开头的状态码一般用来表示一些消息,代表请求已接收,需要继续处理,由于在HTTP 1.0 协议中没有定义任何1xx状态码,所以除非在某些实验条件下,一般服务器禁止向此类客户端发送1xx响应。

  • 100

    客户端应该继续发送请求,这个状态码表示服务器已经受到了客户端的部分请求,请求没有被拒绝,客户端应该继续发送请求的剩余部分,如果客户端请求已经完成,那就忽略该响应,等待服务器的最终响应。

2xx 成功

这一类状态码一般表示服务器已经成功接收、理解并接受了客户端请求。

  • 200 OK

    表示从客户端发送来的请求已经被服务端正确处理了。

  • 204 No Content

    表示请求处理已经成功,但是并没有资源可以返回,即响应报文没有实体部分,一般在客户端需要向服务端发送消息,但是不需要对客户端发送新的信息时使用。

  • 206 Partial Content

    表示客户端对请求的内容有范围要求,而服务端返回了符合要求的范围部分的内容。

3xx 重定向

这一类状态码表示服务器需要对请求做一些特殊的跳转处理,以保证能正确的处理请求。

  • 301 Moved Permanently

    永久重定向,表示客户端请求的内容以及被分配到了一个新的URL,以后应该使用资源现在所致的URI,也就是说,如果以及把资源保存成为了某个书签的话,需要更新书签的引用。

  • 302 Found

    临时重定向,表示客户端请求的资源暂时被分配到了某个新的URI,希望本次请求能使用新的URI访问,一般像跳转进行手机端页面还是PC端页面的展示时会用到这个状态码。

  • 303 See Other

    与302类似,但是该状态码明确要求客户端已GET方法重定向到某个新的URI上。

    当 301、302、303 响应状态码返回时,几乎所有的浏览器都会把POST 改成 GET,并删除请求报文内的主体,之后请求会自动再次发送。
    301、302 标准是禁止将 POST 方法改变成 GET 方法的,但实际使用时大家都会这么做。

  • 304 Not Modified

    客户端发送了一个带有附送条件的其请求,服务端表示资源能够找到,但是并没有符合条件的资源。

  • 307 Temporary Redirect

    与302相同,但是会遵守标准,不会把POST请求转成GET请求。

4XX 客户端错误

这一类状态表示响应发送错误,并且这个这个错误是由于客户端发生错误引起的。

  • 400 Bad Request

    服务端无法理解这个请求,请求是不是错了。

  • 401 Unauthorized

    请求页面需要认证,此时会弹出一个用于认证的对话框。

  • 403 Forbidden

    客户端没有权限访问该内容,所以服务端拒绝客户端的访问请求,一般在FTP控制中会用到,在某些后台管理系统中,从未授权的IP源发送的请求也会被拒绝。

  • 404 Not Found

    这几乎是最常见的客户端错误了,平时在生活中就能碰到,表示请求的资源在服务器中没有,找不到所请求的资源。

5XX 服务器错误

这一类状态码表示遇到了错误,并且错误是由服务器本身的问题所引起的。

  • 500 Internal Server Error

    服务器内部错误,表示服务器内部程序出错了。

  • 503 Service Unavailable

    服务器不可用,有两种情况,一种是服务器处于维护中,另一种就是服务器处于超负荷状态,例如抢票、秒杀等活动。

常见的状态码就是上面这些了,了解HTTP状态码的含义,对WEB开发时遇到的问题能够准确的定位,也能加深对WEB的理解,同时,某些时候状态码也会与状况不一致,有时候WEB应用程序内部发生错误,依旧会返回200 OK,这种时候就要具体问题具体分析了。

小结

HTTP的简要说明就到这里了,但是HTTP远不止这点内容,关于HTTP有两个资源推荐大家阅读。

图解HTTP:这本书用配图的方式介绍了HTTP,比较适合学习理解。

HTTP协议:这是HTTP的官方文档,英语不错还有时间的筒子们可以看看,也可以作为查阅地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值