文章目录
一、http协议的简单了解
1、http,超文本传输协议。承载于TCP协议之上,是目前互联网上应用最为广泛的一种网络传输协议。
在HTTP和TCP之间添加一个安全协议层(SSL或TSL),这个时候,就成了我们常说的HTTPS。
2、https之所以比http安全,是因为他利用ssl/tsl协议传输,保障了传输过程的安全性。
3、HTTP与TCP的关系
http通信是通过http报文完成的,而报文则需要通过tcp这条连接进行传输。
HTTP是应用层协议(即客户端与服务器端的协议)。
TCP是传输层协议。
HTTP是建立在TCP协议之上的协议。
4、如果没有写端口,就会启用默认端口
- http默认端口:80
- https默认端口:443
二、Http的请求报文、响应报文
http报文主要由请求报文和 响应报文组成。
1、请求报文
HTTP请求报文由四个部分组成:请求行、请求头部、空行、请求数据。
1.1、请求行
包含 请求地址、请求方法
1.2、 请求头部
常见头部如下:
-
Accept
告诉服务端,客户端接收什么类型的响应,*/*
表示任何类型 -
Accept-Language
客户端支持什么类型的语言 -
Accept-Charset
浏览器告诉服务器自己能接收的字符集。 -
Accept-Encoding
浏览器申明自己可以接收的编码方法,通常指定压缩方法,比如gzip的压缩方法 -
Origin
发起请求时,所在网页的网页URL的域名,或IP和端口号 -
Referer
发起请求时,所在网页的网页URL。 -
User-Agent
浏览器的信息,包括类型、版本号等。 -
cookies、Authorization
同源请求,自动携带该请求域名下的所有cookie值,一起发送给web服务器 -
Authorization
用于将自己的身份验证信息给WEB服务器,以便服务器识别当前用户。 -
Connection
表示是否需要持久连接
Connection常见的属性值:
Close:告诉WEB服务器或者代理服务器,在完成本次请求的响应后,
断开连接,不要等待本次连接的后续请求了。
Keepalive:告诉WEB服务器或者代理服务器,在完成本次请求的响应后,
保持连接,等待本次连接的后续请求。
Keep-Alive:如果浏览器请求保持连接,
则该头部表明希望 WEB 服务器保持连接多长时间(秒), 如Keep-Alive:300。
- Content-Types
请求提交所提交内容的编码类型,一般post请求都有。
更多content-type的参考链接:https://blog.csdn.net/yiyueqinghui/article/details/102646530Content-Type属性值,有如下四种编码类型: (1)"application/x-www-form-urlencoded": 这是表单向服务器提交数据时所采用的默认的编码类型, (2)"multipart/form-data" 这是在文件上载时,所使用的编码类型。它既支持发送文本数据,也支持二进制数据上传。 (3)"application/json"; 上传的数据是序列化后的 JSON 字符串 (4)"text/xml" 上传的是xml数据类型
- Cache-Control
指定请求和响应遵循的缓存机制Cache-Control常见的缓存值有如下: no-cache:指示请求或响应消息不能缓存,实际上是可以存储在本地缓存区中的,只是在与原始服务器进行新鲜度验证之前,缓存不能将其提供给客户端使用。 no-store:缓存应该尽快从存储器中删除文档的所有痕迹,因为其中可能会包含敏感信息。 max-age:缓存无法返回缓存时间长于max-age规定秒的文档,若不超规定秒浏览器将不会发送对应的请求到服务器,数据由缓存直接返回;超过这一时间段才进一步由服务器决定是返回新数据还是仍由缓存提供。若同时还发送了max-stale指令,则使用期可能会超过其过期时间。 min-fresh:至少在未来规定秒内文档要保持新鲜,接受其新鲜生命期大于其当前 Age 跟 min-fresh 值之和的缓存对象。 max-stale:指示客户端可以接收过期响应消息,如果指定max-stale消息的值,那么客户端可以接收过期但在指定值之内的响应消息。 only-if-cached:只有当缓存中有副本存在时,客户端才会获得一份副本。 Public:指示响应可被任何缓存区缓存,可以用缓存内容回应任何用户。 Private:指示对于单个用户的整个或部分响应消息,不能被共享缓存处理,只能用缓存内容回应先前请求该内容的那个用户。
1.3、空行
它的作用是通过一个空行,告诉服务器请求头部到此为止。
1.4、请求数据
请求参数
2、请求报文
HTTP响应报文也由四部分组成:响应行、响应头、空行、响应体
2.1、响应行
响应行一般由 协议版本、状态码及其描述 组成 比如 HTTP/1.1 200 OK
2.2、 响应头
- Date
表示服务器返回消息的时间,这个时间可用于评估缓存的新鲜度时要用到 - Cache-Control
服务端告诉客户端对于响应内容的缓存如何控制 - Tag
表示你请求资源的版本,如果该资源发生了变化,那么这个属性也会跟着变 - content-type
表示返回数据的类型 - content-Encoding
服务端表明自己使用了什么压缩方法压缩响应的内容。
例如:Content-Encoding:gzip - Set-Cookie
服务端返回,设置客户端的cookie - access-control-allow-origin
所请求的服务器,允许来自哪些域名的访问 - access-control-allow-methods
允许使用的访问方法
2.3、空行
2.4、响应体
即响应返回的内容。如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码
三、常见的请求状态码
1、xhr.status的值及解释:
- 1xx:表示请求已接收,继续处理。
- 2xx:成功-表示请求已被成功接收。
- 3xx:重定向-要完成请求必须进行更进一步的操作。
- 4xx:客户端错误
- 5xx:服务器错误
2、各状态的详细解释
-
101——客户端与服务端HTTP版本不一致
-
200——客户端请求成功
-
300——请求的资源可在多处得到
301——请求的资源已被永久的移动到新 URI,返回信息会 包括新的 URI
302-----请求的资源被临时的移动了位置
304
-------如果客户端发送了一个带条件的 GET 请求,而返回的内容自上次访问以来并没有改变,则服务器应当返回304,表示通过缓存读取该资源即可
。
305------Use Proxy 使用代理。所请求的资源必须通过代理访问 -
400——请求无效(一般是
前端提交数据的字段名称和字段类型与后台的实体没有保持一致
)
401 Unauthorized—— 没有权限,当前请求需要用户验证
403 Forbidden——服务器已经得到请求,但是拒绝执行
404 Not Found——请求资源不存在
405 Method Not Allowed ------ 客户端请求中的方法被禁止
412——请求头字段的错误
413——请求的资源大于服务器允许的大小
414——请求地址URL大于服务器允许的长度 -
500——服务器内部错误,无法完成请求
501——服务器不支持请求的功能,无法完成请求
502——Bad Gateway ,作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
505------ 服务器不支持请求的 HTTP 协议的版本
四、post和get的异同点
1、相同点:
GET/POST 都是 TCP 链接。
2、不同点:
get 参数通过 url 传递,post 放在 request body 中。
get 请求在 url 中传递的参数是有长度限制的,而 post 没有。 get 比 post 更不安全,因为参数直接暴露在 url 中,所以不能用来传递敏感信息。 get 请求只能进行 url 编码,而 post 支持多种编码方式
-
1、
是否会被缓存
,get请求会被浏览器主动缓存,而post不会 -
2、
参数的传递方式上
get参数通过url传递,post放在request body 中。 -
3、
参数的长度限制上
get请求在url中传送的参数是有长度限制的,而post没有限制。注意:
对 get 请求参数长度的限制 是来源与浏览器或 web 服务器本身,而非http
,
而且不同浏览器的最大限制长度也是不一样的。 -
4、
参数的编码方式上
,get请求只能进行url编码,而post支持多种编码方式 ----form-data
、x-www-form-urlencoded
、json
。 -
5、
安全性
post比get安全,因为get的参数直接暴露在url上,所以不能用来传递敏感信息。 -
6、
GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包
对于 GET 方式的请求,浏览器会把 header 和 data 一并发送出去,服务器响应 200 ,返回数据;
对于 POST,浏览器先发送 header,服务器响应后,浏览器再发送 data,服 务器响应 200 ,返回数据。
GET 和 POST 本质上就是 TCP 链接,并无差别。但是由于 HTTP 的规定和浏览器/服务器 的限制,导致他们在应用过程中体现出一些不同。
五、其它
1、什么是持久连接
http协议采用“请求-应答”模式,即非keep-alive模式时,每个请求/应答,客户端和服务器都要新建一个连接,完成之后立即断开连接(http协议为无连接的协议)
当使用keep-alive模式(又称持久连接)时,keep-alive功能使客户端到服务器端的连接持久有效,当出现对服务器的后继请求时,keep-alive功能避免了重新建立连接。
http1.1才支持,http1.0是不支持的。
2、关于Http 2.0的了解
- 1、HTTP/2引入了“服务端推(server push)”的概念,它允许服务端在客户端需要数据之前就主动地将数据发送到客户端缓存中,从而提高性能。
- 2、HTTP/2提供更多的加密支持
- 3、HTTP/2使用多路技术,允许多个消息在一个连接上同时交差。
- 4、它增加了头压缩(header compression),因此即使非常小的请求,其请求和响应的header都只会占用很小比例的带宽。