HTTP协议-看这里!

91 阅读5分钟

本文主要讲什么:

  • HTTP协议是什么
  • HTTP协议请求报文
  • HTTP协议响应报文

1. HTTP协议是什么?

官方定义:

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 详细理解: HTTP协议:是一种互联网应用中,客户端(浏览器)与服务器之间进行数据通信的一种协议。HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

图解: http.png 特点:

  1. 单向的。只能由客户端发起请求,服务端无法主动发起请求。
  2. 无状态的。 每次请求是独立的,本次的请求和上一次的请求是没有关联的,上一次的请求状态不影响本次请求。

2. HTTP协议请求报文

request.png

20170707143243946.jpg

请求行

请求行是由: 请求方式 + URL + HTTP版本 三个类容形成

  • 常见请求方式
请求方式描述
GET1.请求参数会拼接到链接后面。2.可以被缓存。3.有长度限制1024kb。4.不利于传递敏感数据
POST2.请求参数放在request body里面。2.不会被缓存。3.没有长度限制。

常见请求首部

首部字段描述
Accept可以接收的内容类型。如:Accept: text/html,application/xhtml+xml,application/xml;
Host服务器地址。如:Host: www.baidu.com
Accept-Charset浏览器能识别的字符集。如:Accept-Charset: utf-8
Accept-Encoding浏览器可以处理的编码方式。如:Accept-Encoding: gzip, deflate
Accept-Language浏览器接收的语言。如简体中文:Accept-Language: zh-CN
Accept-Datetime设置接受的版本时间。如:Accept-Datetime: Thu, 31 May 2022 20:35:00 GMT
Authorization在HTTP中,服务器可以对一些资源进行认证保护,如果你要访问这些资源,就要提供用户名和密码,这个用户名和密码就是在Authorization头中附带的,格式是“username:password”字符串的base64编码,例如:Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ中,basic指使用basic认证方式, QWxhZGRpbjpvcGVuIHNlc2FtZQ使用base64解码就是Aladdin:open sesame
Cache-Control缓存方式。如:Cache-Control: no-cache
Connection连接方式。如:Connection: keep-alive浏览器和服务器 的通信连接会被持续保存,Connection: close就会在response后马上关闭
Cookie简单可以理解为身份认证,详细理解情百度。
Content-Length一个请求的请求体的内存长度,单位为字节(byte)。如:Content-Length: 348 这个Content-Length并不包含请求行和HTTP头的数据长度。
Date发送请求时的GMT时间。如:Date: Tue, 15 Nov 2020 08:12:31 GMT

空行

空行:用于区分开请求首部和请求体的

请求体

请求体:参数以key=value的形式存在.

HTTP协议响应报文

20170707145557633.jpg

响应行

响应行是由:协议版本 + 状态码 + 状态描述 三个类容形成

常见的响应码

  1. 1xx表示消息。一般是告诉客户端,请求已经收到了,正在处理...
  2. 2xx表示成功。
消息描述
200 OK请求成功
201 Created请求被创建完成,同时新的资源被创建。
202 Accepted供处理的请求已被接受,但是处理未完成。
  1. 3xx表示重定向。ååå | 消息 | 描述 | | --- | --- | | 300 Multiple Choices | 多重选择。链接列表。用户可以选择某链接到达目的地。最多允许五个地址。 | | 301 Moved Permanently | 所请求的页面已经转移至新的 URL 。 | | 302 Found | 所请求的页面已经临时转移至新的 URL 。 | | 303 See Other | 所请求的页面可在别的 URL 下被找到。 | | 304 Not Modified | 未按预期修改文档。 |

  2. 4xx表示客户端错误。 | 消息 | 描述 | | --- | --- | | 400 Bad Request | 因为语法错误,服务器未能理解请求。 | | 401 Unauthorized | 合法请求,但对被请求页面的访问被禁止。 | | 402 Payment Required | 此代码尚无法使用。 | | 403 Forbidden | 合法请求,但对被请求页面的访问被禁止。 | | 404 Not Found | 没有找到请求地址。 |

  3. 5xx表示服务端错误。

消息描述
500 Internal Server Error服务器错误
501 Not Implemented服务器不支持所请求的功能,或者服务器无法完成请求。
502 Bad Gateway请求未完成。服务器充当网关或者代理的角色时,从上游服务器收到一个无效的响应。
503 Service Unavailable服务器当前不可用(过载或者当机)。
504 Gateway Timeout网关超时。服务器充当网关或者代理的角色时,未能从上游服务器收到一个及时的响应。
505 HTTP Version Not Supported服务器不支持请求中指明的HTTP协议版本。

常见响应头字段

首部字段描述
Connection连接方式。如:Connection: keep-alive浏览器和服务器 的通信连接会被持续保存,Connection: close就会在response后马上关闭
Content-Encoding文档的编码(Encode)方法。如:Content-Encoding: gzip
Content-Type表示后面的文档属于什么MIME类型。如:Content-Type:text/html;charset=utf-8
Date发送请求时的GMT时间。如:Date: Tue, 15 Nov 2020 08:12:31 GMT
Server服务器名称。如:Server: BWS/1.1
Set-Cookie设置和页面关联的Cookie。

响应体

我们需要的数据就在响应体中。常见的app数据是json。 { code:200 data:{title:"111"} error:"错误信息" }

参考:

请求首部常见子端

HTTP请求报文