HTTP协议学习笔记
Posted qlexcel
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP协议学习笔记相关的知识,希望对你有一定的参考价值。
简介
HTTP协议(超文本传输协议HyperText Transfer Protocol),它是基于TCP协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则。
报文结构
http的报文又分为两种:一种是我们作为客户去勾搭服务器的请求报文,一种是服务器接收到你的勾搭把相应的内容发送给你的响应报文。
HTTP请求报文格式
http请求报文结构由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的五大特点
- 支持客户/服务器模式。
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。早期这么做的原因是请求资源少,追求快。后来通过Connection: Keep-Alive实现长连接
- 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP响应状态码说明
推荐阅读:
以上是关于HTTP协议学习笔记的主要内容,如果未能解决你的问题,请参考以下文章