前端需要知道的HTTP协议

一.简介

HTTP是一种超文本传输协议,HTTP是一个在计算机世界里专门在两点之间传输文字,图片,音频,视频等超文本数据的约定和规范

二.HTTP协议主要特点

简单快速,灵活,无连接,无状态

(1) HTTP是无连接的

无连接的含义是限制每次连接只处理一个请求,服务器处理完客户端的请求,并收到客户端的应答后,即断开连接.采用这种方式可以节省传输时间

PS:HTTP/1.1里改成总是默认启用keep-live长连接机制,所以现在的HTTP已经不再是无连接的了

(2) HTTP是媒体独立的

这意味着,只要客户端和服务端知道如何处理数据的内容,任何类型的数据都可以通过HTTP传输,客户端以及服务端指定适合的MIME-type内容类型即可

(3) HTTP是无状态的

HTTP协议是无状态协议,无状态是指协议对于事物处理没有记忆能力,缺少状态,意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传输的数据量增大,另外,在服务器不需要先前信息时,它的应答就较快.

通过Cookie,Session解决无状态

三.HTTP报文

1.请求报文

一个HTTP请求报文由请求行(request line),请求头(header),空行和请求数据4部分组成

1.1.请求行(request line)

包括请求方法字段,URL字段和HTTP协议版本.比如GET /index.html HTTP/1.1。

1.2.请求头(header)

头部字段是key-value的形式,以键值对的形式组成,每行一对,请求头部通知服务器有关客户端请求的信息,典型的请求头有:

字段 含义
Accept 浏览器可以接受的MIME类型application/json text/plain
Accept-Charset 浏览器可以接受的字符集 unicode-1-1
Accept-Encoding 浏览器能够进行解码的数据编码方式,比如gzip, deflate, br. 服务端能够向支持gzip的浏览器返回经gzip编码的HTML页面,许多情形下,可以减少5到10倍的下载时间(性能优化的一个手段)
Accept-Language 浏览器所希望的语言种类,当服务器能提供一种以上的语言版本时要用到 zh-CN,zh;q=0.9,en;q=0.8
Authorization 授权信息,通常我们一般会把token信息存入这个字段
Content- Length 表示请求消息正文的长度.比如我们上传文件的时候,后端经常会通过这个字段判断文件大小,特别是分片上传的时候
Content-Type 请求的数据格式,用于POST和PUT请求中,比如:Content-Type: application/x-www-form-urlencoded
Host 客户机通过这个头告诉服务器,想问的主机名.也就是请求的主机名,Host头域指定请求资源的主机和端口号,允许多个域名同处一个IP地址,即虚拟主机
If-Modified-Since 资源缓存的时间,只有当请求的内容在指定的时间后,又经过修改才返回它,否则返回304状态码(性能优化中协商缓存的一个重要字段)
Referer 客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的(防盗链),包含一个URL,表示从哪一个URL出发访问到当前请求的页面的.(通常会做图片处理,比如:当前图片来自哪里,未经允许,不得转载)
User-Agent 发出请求的浏览器类型,通常我们判断该用户使用的浏览器类型时,非常有用
Connection 处理完这次请求之后是否断开连接还是继续保持连接.HTTP 1.1默认使用持久连接,也就是keep-alive,利用长连接的优点,当页面包含多个元素时(图片),显著的减少下载所需要的时间. 注意:HTTP 1.1之前是无连接的
Cookie 携带到服务器的Cookie字段
If-None-Match 服务器上次返回的资源的唯一标识,一个hash值,比较标记,本地资源未修改,返回304(性能优化中协商缓存的一个重要字段)
Range 表示只请求实体的一个或者多个子范围.通常我们做断电续传的时候,会用到.断点续传也就是从文件已经下载的地方开始继续下载
1.3.空行

它的作用是通过一个空行,告诉服务器请求头部到此为止

1.4.请求体

若方法是GET,则此项为空,没有数据

若方法是POST,则通常来说此处放置的就是要提交的数据

比如要使用POST方法提交一个表单,其中有user字段中数据为admin, password字段为123456,那么这里的请求数据就是 user=admin&password=123456,使用&来连接各个字段。

前端需要知道的HTTP协议

2.响应报文

响应报文由状态行,响应头,空行,响应正文组成

2.1.状态行

包含HTTP协议的版本,状态码,以及描述(作为数字状态码的补充,是更详细的解释文字,帮助人理解原因)

2.2.响应头
字段(响应头) 说明 示例
Access-Control-Allow-Origin 指定哪些网站可以跨域源资源共享 Access-Control-Allow-Origin: *
Age 响应对象在代理缓存中存在的时间,以秒为单位 Age: 12
Allow 对于特定资源的有效动作; Allow: GET, HEAD
Cache-Control 通知从服务器到客户端内的所有缓存机制,表示它们是否可以缓存这个对象及缓存有效时间。其单位为秒(性能优化中,强缓存的一个重要字段) Cache-Control: max-age=3600
Connection 针对该连接所预期的选项 Connection: close
Content-Disposition 对已知MIME类型资源的描述,浏览器可以根据这个响应头决定是对返回资源的动作,如:将其下载或是打开。 Content-Disposition: attachment; filename=“fname.ext”
Content-Encoding 响应资源所使用的编码类型。 Content-Encoding: gzip
Content-Language 响就内容所使用的语言 Content-Language: zh-cn
Content-Length 响应消息体的长度,用8进制字节表示 Content-Length: 348
Content-Range 如果是响应部分消息,表示属于完整消息的哪个部分 Content-Range: bytes 21010-47021/47022
Content-Type 当前内容的MIME类型 Content-Type: text/html; charset=utf-8
Date 此条消息被发送时的日期和时间(以RFC 7231中定义的"HTTP日期"格式来表示) Date: Tue, 15 Nov 1994 08:12:31 GMT
ETag 服务器会返回当前资源的唯一标识! hash值(性能优化中协商缓存机制的一个重要字段) ETag: “737060cd8c284d8af”
Expires Expires的值为服务端返回的到期时间,ExpiresHTTP 1.0的内容(性能优化中强缓存为了兼容HTTP 1.0版本的一个缓存时间) Expires: Thu, 01 Dec 1994 16:00:00 GMT
Last-Modified 服务器在响应请求时,告诉浏览器资源的最后修改时间(性能优化中协商缓存机制的一个重要字段) Last-Modified: Dec, 26 Dec 2015 17:30:00 GMT
Server 服务器的名称 Server: nginx/1.6.3
2.3.空行

最后一个响应头部之后是一个空行,发送回车符和换行符,通知服务器以下不再有响应头部。

2.4.响应体

响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。

前端需要知道的HTTP协议

四.HTTP方法

1.GET

用于请求访问已经被URI识别的资源,可以通过URL传参给服务器

2.POST

用于传输信息给服务器,主要功能与get方法类似,但一般推荐使用POST方式

3.PUT

传输文件,报文主体中包含文件内容,保存到对于URI位置。

4.HEAD

获得报文首部,与get方法类似,只是不返回报文主体,一般用于验证URI是否有效

5.DELETE

删除文件,与PUT方法类似,删除对应URI位置的文件

6.OPTIONS

查询相应URI支持的HTTP方法

五.HTTP状态码

HTTP状态码的英文为HTTP Status Code。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。

1. 1XX

指示信息:表示请求已经接收,继续处理

2. 2XX

成功:表示请求已经被成功接收,理解,接收

3. 3XX

重定向:表示要完成请求,必须进一步操作

4. 4XX

客户端错误:请求有语法错误或请求无法实现

5. 5XX

服务端错误:服务器未能实现合法的请求

6.常见状态码

状态码 英文标识 描述
200 OK 表示从客户端发送给服务器的请求被正常处理并返回
204 No Content 表示客户端发送给客户端的请求得到了成功处理,但在返回的响应报文中不含实体的主体部分(没有资源可以返回)
206 Patial Content 表示客户端进行了范围请求,并且服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容。
301 Moved Permanently 永久性重定向,表示请求的资源被分配了新的URL,之后应使用更改的URL;
302 Found 临时性重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL;301与302的区别:前者是永久移动,后者是临时移动(之后可能还会更改URL)
303 See Other 表示请求的资源被分配了新的URL,应使用GET方法定向获取请求的资源 302与303的区别:后者明确表示客户端应当采用GET方式获取资源
304 Not Modified 协商缓存,返回的状态码
400 Bad Request 表示请求报文中存在语法错误;
401 Unauthorized 未经许可,需要通过HTTP认证;
403 Forbidden 拒绝访问,没有权限
404 Not Found 无法找到请求的资源,举个例子:输入了错误的URL。
500 Inter Server Error 表示服务器在执行请求时发生了错误,也有可能是web应用存在的bug或某些临时的错误时;
503 Server Unavailable 表示服务器暂时处于超负载或正在进行停机维护,无法处理请求

相关文章:

  • 2021-09-02
  • 2021-12-10
  • 2021-10-05
  • 2021-09-27
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-01
  • 2021-07-19
  • 2021-12-21
  • 2021-12-23
  • 2021-12-19
  • 2022-12-23
相关资源
相似解决方案