http 协议的理解与认识

1,300 阅读6分钟

HTTP 的特性

  1. HTTP 协议构建于 TCP/IP 协议之上,是一个应用层协议,默认端口号是 80。
  2. HTTP 是无连接无状态的。

HTTP 请求

HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成:状态行、请求头(Request Header) 、请求正文。

<method> <request-URL> <version>
<headers> 

<entity-body>
  1. 状态行包含:请求方法/URI协议/版本。根据HTTP标准,HTTP请求可以使用多种请求方法。例如:GET、POST、PUT、DELETE。
  2. 请求头包含:许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。
  3. 请求正文中包含:客户提交的查询字符串信息。

HTTP 请求方法详述

Http定义了与服务器交互的不同方法(如下),最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL统一资源定位符我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GETPOSTPUTDELETE就对应着对这个资源的查,改,增,删4个操作。

  1. GET 请求获取由Request-URI所标识的资源。
  2. POST 在Request-URI所标识的资源后附加新的数据。
  3. PUT 请求服务器存储一个资源,并用Request-URI作为其标识。
  4. DELETE 请求服务器删除由Request-URI所标识的资源。
  5. HEAD 请求获取由Request-URI所标识的资源的响应消息报头。
  6. OPTIONS 请求查询服务器的性能,或查询与资源相关的选项和需求。
  7. TRACE 请求服务器回送收到的请求信息,主要用语测试或诊断。

HTTP中GET方法与POST方法的区别

根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。

  1. 所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。 * 注意:这里安全的含义仅仅是指是否修改信息。
  2. 幂等的意味着对同一URL的多个请求应该返回同样的结果。
幂等(idempotent、idempotence)是一个数学或计算机学概念,常见于抽象代数中。幂等有一下几种定义:
1. 对于单目运算,如果一个运算对于在范围内的所有的一个数多次进行该运算所得的结果和进行一次该运算所得的结果是一样的,那么我们就称该运算是幂等的。比如绝对值运算就是一个例子,在实数集中,有abs(a)=abs(abs(a))。 
2. 对于双目运算,则要求当参与运算的两个值是等值的情况下,如果满足运算结果与参与运算的两个值相等,则称该运算幂等,如求两个数的最大值的函数,有在在实数集中幂等,即max(x,x) = x。

根据HTTP规范,POST表示可能修改变服务器上的资源的请求。

改变服务器上的资源这件事往往是有副作用的,不幂等的。不幂等也就意味着不能随意多次执行。因此也就不能缓存。

区别总结:

  1. GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=April&type=1。当数据包含中文、url等都需要作为 URI组件进行编码。POST把提交的数据则放置在是HTTP包的包体中。
  2. 传输大小限制的不同。GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了。而实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。实际操作中一般GET方式提交的数据保持在1024字节以内。POST是没有大小限制的。起限制作用的是服务器的处理程序的处理能力。
  3. POST的安全性要比GET的安全性高。比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为页面有可能被浏览器缓存,或者其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击。

Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为"GET",实质上,GET和POST只是发送机制不同,并不是一个取一个发!

HTTP 响应

HTTP 响应与 HTTP 请求相似,HTTP响应也由3个部分构成,分别是: 状态行、响应头(Response Header)、响应正文。

HTTP 状态码

常见的状态码有如下几种:

  1. 200 OK 客户端请求成功
  2. 301 Moved Permanently 请求永久重定向
  3. 302 Moved Temporarily 请求临时重定向
  4. 304 Not Modified 文件未修改,可以直接使用缓存的文件。
  5. 400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解。
  6. 401 Unauthorized 请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用
  7. 403 Forbidden 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因
  8. 404 Not Found 请求的资源不存在,例如,输入了错误的URL
  9. 500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。
  10. 503 Service Unavailable 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。