开发者路线图详解-什么是HTTP?

想要查看前面的笔记请翻阅我的CSDN博客,作者码字不易,喜欢的话点赞,加个关注吧,后期还有很多干货等着你!

在这里插入图片描述在这里插入图片描述

什么是http协议

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。基于TCP的应用层协议,它不关心数据传输的细节,HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,只有遵循统一的 HTTP 请求格式,服务器才能正确解析不同客户端发的请求,同样地,服务器遵循统一的响应格式,客户端才得以正确解析不同网站发过来的响应。
在这里插入图片描述

什么是HTTPS

HTTPS 的全称是Hyper Text Transfer Protocol over Secure Socket Layer ,是以安全为目标的HTTP通道,简单的讲是HTTP的安全版本,即HTTP下加入SSL层,简称HTTPS

其中HTTPS的安全基础为SSL,因此通过它的传输的内容都是经过SSL加密的,它的主要作用可以分为两种:

1、建立一个信息安全通道来保证数据传输的安全

2、确保网站的真实性,凡是使用了HTTPS 的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认证之后的真实信息。

HTTP请求内容

HTTP 请求由请求行、请求头、空行、请求体组成
在这里插入图片描述

请求行:请求方式 + URL + 协议版本

常见的请求方法有 GET、POST、PUT、DELETE、HEAD
客户端要获取的资源路径(所谓的URL)
客户端使用的 HTTP 协议版本号(目前使用的是http1.1)

请求头:客户端向服务器发送请求的补充说明

host:请求地址
User-Agent: 客户端使用的操作系统和浏览器的名称和版本.
Content-Length:发送给HTTP服务器数据的长度。
Content-Type:参数的数据类型
Cookie:将cookie的值发送给HTTP 服务器
Accept-Charset:自己接收的字符集
Accept-Language:浏览器自己接收的语言
Accept:浏览器接受的媒体类型

请求体:一般携带的请求参数

application/json:{“name”:“value”,“name1”:"value2”}
application/x-www-form-urlencoded: name1=value1&name2=value2
multipart/from-data:表格形式
text/xml
content-type:octets/stream

HTTP响应内容

HTTP 响应格式与请求的格式很相似,也是由响应行、响应头、空行、响应体组成。
在这里插入图片描述

状态行:HTTP 版本号 + 响应状态码 + 状态说明

响应状态码有 1XX、2XX、3XX、4XX、5XX、5XX。
1XX 提示信息 - 表示请求已被成功接收,继续处理

2XX 成功 - 表示请求已被成功接收,理解,接受

3XX 重定向 - 要完成请求必须进行更进一步的处理

4XX 客户端错误 - 请求有语法错误或请求无法实现

5XX 服务器端错误 - 服务器未能实现合法的请求响应头

响应头:响应头与请求头对应,是服务器对该响应的一些附加说明

响应体:它才是真正的响应数据,这些数据其实就是网页的 HTML 源代码

HTTP 报文详解:

HTTP 协议主要由三大部分组成:

起始行(start line):描述请求或响应的基本信息;

头部字段(header):使用 key-value 形式更详细地说明报文;

消息正文(entity):实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据。

其中起始行和头部字段常被我们称之为Header,根据请求还是响应又可以分为请求头和响应头,消息正文被成为Body,同样又被分为请求体和响应体

HTTP请求头常用字段:

Accept:客户端“希望”接受到的内容类型,但是服务器具体返回什么样的内容类型,还是由服务器自己决定,但是无论服务器返回什么样的内容类型,客户端都会接收响应报文

Accept-Encoding: 表示客户端所支持的解码(解压缩)格式,包括gzip, deflate, br,一般工程中获取静态资源如js、css等请求是要求必须进行gzip压缩的

Accept-Language: 表示客户端支持的语言格式(不是编码格式),如中文/英文,通常浏览器直接发起请求时

Accept-Charset:表示客户端支持的解码格式,其实客户端已经支持常见的解码格式,通常不会出现解析乱码的问题,例如(gbk,utf-8;q=0.8),以‘,’作为切割,是支持gbk和utf-8两种解码格式的,其中utf-8的权重为0.8,该解析方法同样适用于Accept-Language

Referer:表示发起请求的页面

User-Agent:客户端的软件环境,这里可以判断不同环境返回不同页面,例如http://www.baibu.com和http://m.baidu.com

Host:请求者的主机地址(IP地址)和端口号,服务端可以根据白名单或者黑名单对这些ip过滤

Connection:决定当前事务(一次三次握手和四次挥手)完成后,是否会关闭网络连接。取值有keep-alive和close

Cookie:字面意思

If-Modified-Since:标识客户端接收到该文件(是指html、js、css等的静态资源,并非ajax请求的动态数据)在服务端最后一次修改的时间,第一次获取文件的时候响应头会带上"Last-Modified"字段,当下一次再发送同样请求时请求头会带上"If-Modified-Since"字段,服务端通过该字段比对服务端文件改变时间,确定客户端是否使用缓存,如果使用缓存,服务端响应304

If-None-Match:该字段同If-Modified-Since字段一样,都是用来表示资源文件是否是最新的。If-Modified-Since是修改时间,而If-None-Match是资源的hash值,只要资源发生了变化,hash值就会发生改变,该值是由第一次响应头中的Etag获取的。

整体而言,Last-Modified/If-Modified-Since 和 Etag/If-None-Match这两对头字段都是来标记缓存资源的,后者优先级高于前者,但是前者性能高于后者

Cache-Control:控制缓存行为,这个属性在http请求头中是相对复杂的,不止请求头中有该字段,响应头中也是有的,而各自意思又完全不同,这里只理解请求头中该字段的意思

客户端在发送请求到服务器时,可能会经过很多层代理,而这些代理可能就缓存了本次请求想要的文件,而请求中的cache-control就可以控制,是否使用代理中的缓存文件。取值有no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached这几种,这里只对no-cache、no-store做出说明,毕竟客户端不咋控制缓存

no-cache:代理如果返回给我缓存文件时,需要到服务器端进行确认,缓存是不是最新的。

no-store:我不需要代理中的缓存文件,我需要直接请求服务器。

HTTP响应头常用字段:

响应头相对请求头还是复杂一些的,接着上段缓存的问题,先说缓存相关的字段

Cache-Control:取值范围public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age,其中no-cache、no-store、max-age为常用的取值。

no-store:表示浏览器或各级代理,不要缓存本次的相应内容(即使响应报文中有Etag和Last-Modified);

no-cache:表示浏览器可以缓存响应文件,但是在使用缓存之前,必须通过令牌(Etag)来与服务器进行沟通确认缓存有效。

max-age=500:表示在接下来的500秒内,浏览器可以自主使用缓存内容,不需要向服务器发送同样的请求。

Last-Modified:资源最近一次修改的时间,但是有两种情况会使这个字段失效,1.编辑了资源文件,但是文件内容并没有更改,这样会造成缓存失效;2.能够感知的单位时间是秒,如果文件在 1 秒内改变了多次,就无法感知变化

Etag:资源的hash

Content-Length:响应报文的总长度

Access-Control-Allow-Origin:指定一个来源,它告诉浏览器允许该来源进行资源访问。 否则-对于没有凭据的请求*通配符,告诉浏览器允许任何源访问资源,跨域的时候会设置这个字段

Connection:与请求头的意思一样

Keep-Alive:有两个参数,它们是以逗号分隔的参数列表,每个参数由一个标识符和一个由等号 = 分隔的值组成,例如timeout=5, max=997

timeout:指示空闲连接必须保持打开状态的最短时间(以秒为单位)

max:指示在关闭连接之前可以在此连接上发送的最大请求数

因此例子中的意思为限制最大的超时时间是 5s 和 最大的连接请求是 997 个

Server:服务器用来处理请求的软件的信息

Transfer-Encoding:传输报文主体时采用的编码方式

Set-Cookie:字面意思

响应状态码

2xx就不说了

301:永久性重定向,该状态码表示请求的资源已经重新分配 URI,以后应该使用资源现有的 URI

302:临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。

303:该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源。

304:该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。

400:该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。

401:该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。

403:该状态码表明对请求资源的访问被服务器拒绝了。

404:该状态码表明服务器上无法找到请求的资源。

500:该状态码表明服务器端在执行请求时发生了错误。

503:该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

Guess you like

Origin blog.csdn.net/weixin_42842069/article/details/117092819