HTTP协议学习笔记

Posted qlexcel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP协议学习笔记相关的知识,希望对你有一定的参考价值。

简介

  HTTP协议(超文本传输协议HyperText Transfer Protocol),它是基于TCP协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则。

报文结构

  http的报文又分为两种:一种是我们作为客户去勾搭服务器的请求报文,一种是服务器接收到你的勾搭把相应的内容发送给你的响应报文。

HTTP请求报文格式

  http请求报文结构由3部分构成:

  1. 请求行
  2. 请求头
  3. 请求体
    在这里插入图片描述
    举个实例:
    在这里插入图片描述

请求行

  请求行由请求方法、URL、协议版本构成。总的来说请求行就是定义了本次请求的请求方式,请求的地址,以及所遵循的HTTP协议版本。如:
GET /example.html HTTP/1.1

  请求方法有如下几种:

  • GET: 请求获取Request-URL所标识的资源
  • POST: 在Request-URL所标识的资源后增加新的数据
  • HEAD: 请求获取由Request-URL所标识的资源的响应消息报头
  • PUT: 请求服务器存储或修改一个资源,并用Request-URL作为其标识
  • DELETE: 请求服务器删除Request-URL所标识的资源
  • TRACE: 请求服务器回送收到的请求信息,主要用于测试或诊断
  • CONNECT: 保留将来使用
  • OPTIONS: 请求查询服务器的性能,或者查询与资源相关的选项和需求

  我们常用的就是获取服务器数据的GET方法和向服务器上传数据的POST方法。

请求头

  请求头由一系列的键值对组成,允许客户端向服务器端发送一些附加信息或者客户端自身的信息,主要包括:
在这里插入图片描述

Connection字段

  因为HTTP是建立在TCP上的,如果每发送一次数据TCP就断开,那么再次发送数据TCP又要建立连接,这样效率很低。反之,如果只有一包数据需要发送,那么让TCP一直保持连接,又会很浪费资源。因此可以使用该字段来指明发送本包数据后,TCP连接是否关闭。
Connection: close

Content-Length字段

  因为一个TCP连接可以传送多个回应,势必就要有一种机制,区分数据包是属于哪一个回应的。这就是Content-length字段的作用,声明本次回应的数据长度。
Content-Length: 3495
  上面代码告诉浏览器,本次回应的长度是3495个字节,后面的字节就属于下一个回应了。

Content-Type 字段

  这个字段规定数据包的编码方式。HTTP 1.0版本就规定了,头信息必须是 ASCII 码,后面的数据可以是任何格式。因此,服务器回应的时候,必须告诉客户端,数据是什么格式,这就是Content-Type字段的作用。
  下面是一些常见的Content-Type字段的值。

  • application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式
  • text/plain:数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符。
  • application/json:消息主体是序列化后的 JSON 字符串
  • application/pdf :pdf格式
  • text/xml : XML格式
  • image/gif :gif图片格式
  • multipart/form-data: 需要在表单中进行文件上传时,就需要使用该格式。常见的媒体格式是上传文件之时使用的

请求体

  只有在发送POST请求时才会有请求正文,GET方法并没有请求正文。因为POST会向服务器上传数据,一般上传的数据就放在请求体里。

HTTP响应报文格式

在这里插入图片描述
实例:
在这里插入图片描述
HTTP响应也由三部分组成,包括状态行,消息报头,响应正文。

状态行

  状态行也由三部分组成,包括HTTP协议的版本,状态码,以及对状态码的文本描述。例如:HTTP/1.1 200 OK
  状态码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

  • 1xx:指示信息 - 表示请求已接收,继续处理
  • 2xx:成功 - 表示请求已被成功接收、理解、接受
  • 3xx:重定向 - 要完成请求必须进行更进一步的操作
  • 4xx:客户端错误 - 请求有语法错误或请求无法实现
  • 5xx:服务器端错误 - 服务器未能实现合法的请求

  常见状态代码、状态描述、说明:

  • 200: OK - 客户端请求成功
  • 400: Bad Request - 客户端请求有语法错误,不能被服务器所理解
  • 401: Unauthorized - 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
  • 403: Forbidden - 服务器收到请求,但是拒绝提供服务
  • 404: Not Found - 请求资源不存在,eg:输入了错误的URL
  • 500: Internal Server Error - 服务器发生不可预期的错误
  • 503: Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后,可能恢复正常

其他的状态码放在文末。

消息报头

响应正文

HTTP的五大特点

  1. 支持客户/服务器模式。
  2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  3. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  4. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。早期这么做的原因是请求资源少,追求快。后来通过Connection: Keep-Alive实现长连接
  5. 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

HTTP响应状态码说明

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
推荐阅读:

HTTP 协议入门 阮一峰
Http请求中的Content-Type

以上是关于HTTP协议学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

HTTP学习笔记

安全牛学习笔记HTTP协议

HTTP协议学习笔记

HTTP协议学习笔记

HTTP协议学习笔记

http学习笔记