计算机网络-HTTP协议

92 阅读5分钟

HTTP协议是用于从www服务器传输超文本到本地浏览器的传送协议,在Internet中所有的传输都是通过TCP/IP进行的,HTTP协议通常承载于TCP协议之上,有时也承载于TLS或者SSL协议层之上,因此就形成了我们常说的HTTPS

image.png

HTTP协议的特点

HTTP协议永远是客户端发起请求,服务器端回复响应,因此HTTP协议永远无法实现在客户端没有发起请求的时候,因此服务器也无法将消息发送给客户端。

  1. 支持客户端/服务器模式,支持基本认证和安全认证。
  2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。其中请求方法常用的有GET、HEAD、POST,每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因此通信速度很快。
  3. 灵活:HTTP允许传输任意类型的数据对象,正在传输的类型由Content-Type加以标记。
  4. HTTP0.9和1.0采用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求并收到答复后即断开连接,HTTP1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象,采用这种方式能够节省传输时间。
  5. 无状态:HTTP协议是无状态协议。无状态表示对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据增加。

一次完整的HTTP请求过程

image.png

HTTP请求报文

一个HTTP请求由请求行、请求头部、空行和请求数据4个部分组成:

  1. 请求行
  • 请求行:请求方法、请求地址和协议版本
  • 请求方法:HTTP/1.1定义的请求方法有8种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE。
  • 协议版本:常用的有HTTP/1.0和HTTP/1.1
  1. 请求头部 请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,中间用冒号分割。

image.png

请求头部的最后会有一个空行,表示请求头部结束,接下来为请求数据,这一行非常重要必不可少。

  1. 请求数据 可选部分,GET请求就没有请求数据,POST请求由请求数据。

HTTP响应报文

HTTP响应报文主要由状态行、响应头部、空行和响应数据组成。

  1. 状态行
  • 1xx:指示信息--表示请求已接收,继续处理。
  • 2xx:成功--表示请求已被成功接收、理解、接受。
  • 3xx:重定向--要完成请求必须进行更进一步的操作。
  • 4xx:客户端错误--请求有语法错误或请求无法实现。
  • 5xx:服务器端错误--服务器未能实现合法的请求 详细介绍:
  • 100:客户端在发送POST数据给服务器前,征询服务器情况,看服务器是否处理POST的数据,如果不处理,客户端则不上传POST数据,如果处理,则POST上传数据。常用于POST大数据传输
  • 206:一般用来做断点续传,或者是视频文件等大文件的加载
  • 301:永久重定向会缓存。新域名替换旧域名,旧的域名不再使用时,用户访问旧域名时用301就重定向到新的域名
  • 302:临时重定向不会缓存,常用 于未登陆的用户访问用户中心重定向到登录页面
  • 304:协商缓存,告诉客户端有缓存,直接使用缓存中的数据,返回页面的只有头部信息,是没有内容部分
  • 400:参数有误,请求无法被服务器识别
  • 403:告诉客户端进制访问该站点或者资源,如在外网环境下,然后访问只有内网IP才能访问的时候则返回
  • 404:服务器找不到资源时,或者服务器拒绝请求又不想说明理由时
  • 503:服务器停机维护时,主动用503响应请求或 nginx 设置限速,超过限速,会返回503
  • 504:网关超时
  1. 响应头部

image.png

  1. 响应数据 用于存放需要返回给客户端的数据信息。

Session和Cookie

HTTP协议本身是无状态的,所以服务器无法判断用户身份,Cookie实际上是小段的文本信息,所以客户端在访问服务器的时候可以携带自己的Cookie信息进行访问(一般大小在4kb以内),而服务器内部也会保留每个用户的session信息(通过sessionID进行判断,sessionID携带在cookie中访问服务器)。

一般保密的内容存放在session中(例如用户登录账号密码),如果放在cookie会有泄露的风险。Cookie和session有以下差别

  1. 数据存储位置:cookie数据存放在客户的浏览器上,session数据放在服务器上。
  2. 安全性:cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
  3. 服务器性能:session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
  4. 数据大小:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
  5. 信息重要程度:可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。
  6. Session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器;