HTTP协议

作者: itsenlin | 来源:发表于2018-01-30 00:59 被阅读0次

简介

HTTP(HyperText Transfer Protocol),当前一直使用的译法是超文本传输协议。应该算是当前最广泛使用的一种网络协议,现在人们上网都少不了使用浏览器浏览网页,这里面使用的就是HTTP协议。

这里的Transfer是转移,转换的意思,不是传输的意思。当前的译法是一个历史遗留问题

发展史

HTTP协议更新还是比较慢的,也可以说明此协议还是比较稳定的,这么多年只发布了1.0、1.1、2.0三个版本。

  • 1989年3月Tim BernersLee博士提出的一种能让远隔两地的研究者们共享知识的设想:借助多文档之间相互关联形成的超文本,连成可相互参阅的万维网(World Wide Web, 简称WWW或者web)。
  • 1990年HTTP诞生,但是并没有形成一种标准,这时的HTTP被命名为HTTP/0.9
  • 1996年5月,时隔六年之久才正式将HTTP做为一个标准公布,命名为HTTP/1.0,并记载于RFC1945。
  • 1997年1月公布了HTTP/1.1版本是目前使用最为主流的HTTP协议版本。在HTTP/1.0的基础上增加了很多实用的特性。记载于RFC2068,后面又在RFC2626做了更新。
  • 2015年5月HTTP/2.0版本公布,并记载于RFC7540。此版本来源于谷歌的SPDY协议,主要目标是降低延迟。当前浏览器应该都已经支持此版本,但是使用最多的还是HTTP/1.1版本

特点

HTTP有很明显的优点,也有很明显的缺点,所以现在单单使用HTTP协议的极少

  • 原理简单。基于请求、响应方式来完成通信。客户端发出请求,服务端收到请求并处理返回响应信息。
  • 无连接。即每次连接只处理一个请求,完成之后连接断开。在一开始很少人上网的时候是优点,但是当前上网人太多的时候就是一个缺点了,像同时发送大量请求的时候会导致创建大量的连接,浪费计算机资源。这点已经通过keepalive机制解决。
  • 无状态。HTTP协议自身不对请求和响应之间的通信状态进行保存。这对于一个需要用户登录验证再操作的网站是一个灾难性的优点,因为每发一个请求都需要用户登录一次,不过当前已经通过cookie解决。
  • 安全性很差,这个可以通过结合SSL/TLS协议解决,即我们所说的HTTPS:
    1. 通信使用明文,内容可以被窃听。
    2. 不验证通信方的身份,有可能遭遇伪装。
    3. 无法证明报文的完整性,内容有可能遭到篡改。

HTTP协议所处位置

HTTP是应用层协议底层使用的TCP/IP,如下图:


http协议位置.jpg

HTTP报文

HTTP报文结构包含首部和主体两个部分。根据HTTP的通信原理分为请求报文和响应报文


请求报文结构jpg.jpg 响应报文结构png.png

HTTP请求方法

主要是为了告知服务端要做什么样的操作。HTTP/1.1中可用的有:

  • GET: 获取资源
  • POST: 传输实体主体
  • PUT: 传输文件,因安全性差一般不开启
  • DELETE: 删除文件
  • HEAD: 获取报文首部
  • OPTIONS: 询问支持的方法
  • TRACE: 追踪路径

PUT和POST是争议最大的两个方法,这两个方法都可以实现创建资源以及修改资源的目的,取决于设计实现。两者最主要的区别是PUT具有幂等性,而POST的具有。一般来讲都是使用PUT创建或者覆盖资源,而使用POST修改资源。

HTTP首部

HTTP首部由很多字段构成,每个字段由字段名和字段值构成,中间以":"分隔。字段值可以有多个以","分隔。每个字段值还可以设置属性以“;”分隔,q=[0,1]表示权重(即权重取值0到1,默认为1,越大权重越大)。
Accept-Language:zh-CN,zh;q=0.9

注意:当HTTP首部中出现了多个字段名一样的字段时,规范未做明确规定。所以结果也未可知,所以最好不要出现这种情况 。

4种HTTP首部

  1. 通用首部字段
    请求报文和响应报文都会使用的字段。
    常见的有:

    • Connection: 控制不在转发给代理的首部字段和管理持久连接
      Connection:close关闭连接
      Connection:Keep-AliveHTTP/1.0版本实现长连接的方法
    • Upgrade:用于检测HTTP协议及其他协议是否可以使用更改版本进行通信,其参数值可以用来指定一个完全不同的通信协议,像WebSocket协议,就可以使用下面方法:
      Connection: Upgrade
      Upgrade: websocket
      
  2. 请求首部
    从客户端向服务端发送请求时使用的首部。补充请求的附加内容、客户端信息、响应内容相关优先级等。
    常见的有:

    • Accept: 用户代码可处理的媒体类型
    • Accept-Charset: 优先处理的字符集
    • Accept-Encoding: 优先的内容编码
    • Accept-Language: 优先的语言(中文、英文等自然语言)
    • Host:请求资源所在服务器
    accept:text/plain, */*; q=0.01
    accept-encoding:gzip, deflate, br
    accept-language:zh-CN,zh;q=0.9
    
  3. 响应首部
    从服务端向客户端返回报文时使用的首部。补充了响应的附加内容。
    常见的有:

    • Location: 令客户端重定向到指定的URI
    • Retry-After: 对再次发起请求的时机要求
    • Server: HTTP服务器的安装信息
  4. 实体首部
    针对请求报文和响应报文的实体部分使用的首部。补充了与实体资源有关的信息。
    常用的有:

    • Content-Type: 实体主体的媒体类型
    • Content-Length: 实体主体的大小,单位字节
    • Content-Language: 实体主体的自然语言
    • Content-Encoding: 实体主体适用的编码方式
    • Expires: 实体主体过期时间
    • Last-Modified: 资源的最后修改时间
    content-length:5
    content-type:text/html; charset=utf-8
    

HTTP状态码

状态码主要是描述服务端对请求处理的返回结果。
状态码类别

状态码 类别 描述 常用
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕 200 OK,204 No Content,206 Partial Content
3XX Redirection(重定向状态码) 需求进行附加操作以完成 301 Moved Permanently, 302 Found, 303 See Other, 304 Not Modified, 307 Temporary Redirect
4XX Client Error(客户端错误码) 服务器无法处理请求 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found
5XX Server Error(服务端错误码) 服务器处理请求出错 500 Internal Server Error, 503 Service Unavailable

相关文章

网友评论

    本文标题:HTTP协议

    本文链接:https://www.haomeiwen.com/subject/okcdaxtx.html