前端需要知道的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,使用&来连接各个字段。

在这里插入图片描述

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”
ExpiresExpires的值为服务端返回的到期时间,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方法

1.GET

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

2.POST

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

3.PUT

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

4.HEAD

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

5.DELETE

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

6.OPTIONS

查询相应URI支持的HTTP方法

7.GET和POST区别

(1) GET请求在URL中传输是有长度限制的,大小2kb,而POST没有

(2) GET比POST更不安全,因为参数直接暴露在URL上,不能传递敏感信息

(3) GET 参数通过URL传递,POST放在Request body中

(4) GET请求参数会被完成保留在浏览器历史记录里,POST中的参数不会被保留

(5) GET请求只能进行URL编码,而POST支持多种编码格式

(6) GET请求会被浏览器主动缓存,而POST不会

(7) GET在浏览器回退时,没有影响,但是POST会再次提交请求

五.HTTP状态码

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

1. 1XX

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

2. 2XX

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

3. 3XX

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

4. 4XX

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

5. 5XX

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值