HTTP- Hyper Text Transfer Protocl 超文本传输协议
对我们的客户端和服务端值之间数据之间实现传输(文字、图片、音频、视频等等)
客户端 => 服务端通信
HTTP协议规定:客户端发起请求、服务端回复响应
先从客户端建立通信、服务端在没有接收通信之前不发送响应
属于应用层 第一层HTTP
HTTP请求在应用层,核心通道基于TCP连接
页面有很多的图片,在发送请求访问HTML,也可能包含其他的资源、所以我们每一次请求都要建立一次TCP的链接和断开增加了通信量的开销
过去的http连接:

建立TCP连接:三次握手
断开TCP连接:四次挥手
Http1.1中:Connection:Keep-Alive
Connection:代表TCP信道的链接
只要任意一端没有明确提出端口链接,则保持TCP连接状态
(建立一次TCP链接,可以一次性的发送所有http请求)

好处:减少了TCP链接的重复建立以及我们断开链接的开销、减轻了服务器的负载、提高了运行速度
HTTP 1.1 默认就是持久连接
如何区分http用的是同一个TCP信道?
connectionID(连接ID)相同的是同一个TCP信道
connectionID:标识 标识单个请求新建立信道索引

并行发送多个请求,不是一个一个等着响应

http协议就是一种无状态协议,不保存状态
不对请求和响应之间的通信状态进行保存
目的:更快的处理大量事务、确保协议的可伸缩性
引入cookie
服务端 set-Cookie 通知客户端保存Cookie
客户端下一次在进行发送的时候,会将之前设置的cookie进行携带
性能: cookie 每次请求都会携带,性能受到影响
跨域:cookie无法跨域调用,需要指定一个作用域
负责客户端HTTP请求的返回结果
当客户端向服务器发送请求时候,描述返回的请求结果。能够知道服务端是正常除了请求,还是有错误
信息性状态码
作用:接收的请求正在处理中
Success -成功状态码
表示请求处理正常且成功
表示从客户端发来的请求在服务端进行正常处理了
表示服务器接收的请求已经成功处理,但是返回的响应报文中不包含实体的主体部分,而且不返回任务实体的主体
场景:从客户端发送请求给服务端,对客户端不需要发送新信息内容的情况
表示客户端进行了范围请求
Content-Range
表示浏览器需要执行某些特殊的处理以及正确处理请求
永久性重定向:请求该资源时候每次都返回一个新的url
临时性重定向:请求该资源时候每次都返回一个新的url,可能只限于本次
代表资源不是被永久移动,只是临时的。
表示发送一些附带条件的请求。
加上一些附带的条件
if-Match, if-Modified-since ,if-Range
虽然是3xx系列,但是和重定向没啥关系
临时重定向:期望客户端保持请求方法不变,向新的地址发出请求
客户端错误
表示请求报文中存在语法错误
错误发生、需要修改请求的内容然后重新发送,浏览器会像200 对待
表示需要有通过HTTP认证的认证信息
表示对请求资源的访问被服务器拒绝了。而且没有必要给出拒绝的详细理由。如果想说明,则在主体返回
无法找到请求的资源
服务器本身发生了错误
表示服务器在执行请求的时候发生了错误
服务器超负载了处理停机维护状态
客户端的HTTP报文
请求行 - 方法、URL \HTTP版本
首部字段:
服务器的HTTP报文
状态行一HTTP版本、状态码
首部字段:
HTTP首部字段类型
能操作缓存的工作机制

作用:
connection:不在转发的首部字段 Hop-by-hopconnection:close - 服务器明确的断开链接connection: Keep-Alive- 持久连接表明创建http报文的日期和时间
作用: 补充一些请求的附加信息、客户端信息、对响应内容相关的优先级等
能够处理的媒体类型以及媒体类型的优先级
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
q=0.9 权重
范围0~1可以精确到小数点后3位
1为最大值、默认为1.0
accept—期望,提供给服务端的一些参考意见
期望支持的字符集优先级
期望支持的字符集 优先级
http
Accept-Charset: charset = utf-8
期望支持的内容编码,被压缩的
包装
好处:减少网络流程,提升我们的性能
注:
我们在要求服务器按照某种方式返回,但是这不是强制。如果说服务器不支持或者不开启,那么不起作用
如果服务器支持压缩,或者开启,响应报文的Content-Encoding 告知
期望能够处理的语言集
zh-CN,zh;q=0.9,en;q=0.8
Host:
www.baidu.com
请求资源所处的互联网主机名和端口号
唯一一个必须要包含在请求内的首部字段
相同的IP地址下部署了多个域名,那么服务器就无法知道哪一个域名对应的请求。
像If-xxx 条件请求。服务器接收到附带的条件的请求后,只有判断指定条件为真,才会执行请求
If-Match: “12345”
两端资源进行比较,只有判断条件为真才会接收请求
如果服务器If-Modified-Since 早于资源的更新时间,希望能处理请求
不满足条件的话,服务器返回304代码
实体标记(ETag) 值和请求资源的ETag的值不一致的时候,告诉服务器处理请求
告诉服务器,请求的原始资源的地址
客户端的信息传给服务器了
内容包含:操作系统/版本 、浏览器/版本、设备信息(移动端)/版本
用于补充响应的附加信息、服务器信息、对客户端的附加要求
告诉客户端,我服务器是否可以接受范围请求,是bytes,否none
资源在代理缓存中存在的时间
客户端重定向的URL
服务器的名字:Apache Nginx BWS gws
资源的正确请求方式:GET HEAD POST
服务器接收到了不支持的HTTP方法,会以状态码405
告诉客户端,用的哪一种语言
说明了实体主题内对象的媒体类型
text/html charset=utf-8
资源失效的日期
缓存服务器 如果接收到了这个字段,会以缓存来应答,如果在这个时间之前,响应的副本会一直保存
如果超过了这个时间,会转发给服务器
如果源服务器不希望缓存服务器对资源进行缓存,那么这个时间设置为Date相同的时间即可。
指明资源在最后修改的时间
Cors => 跨域资源共享
同源策略:端口、域名、协议
跨域构成条件:
两个条件:
简单请求跨域,浏览器会让请求发出
GET /cors HTTP/1.1
Origin: http://www.baidu.com
Host: api.alice.com
Accept-Language: en-US
Connection: keep-alive
User-Agent: Mozilla/5.0 ...
响应头会加Access-Control-Allow-Origin,表示对该来源的请求是允许的
Access-Control-Allow-Origin: http://www.baidu.com
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: FooBar
Content-Type:text/html; charset=utf-8
Access-Control-Allow-Origin是必须的Access-Control-Allow-Credentials是可选的只要不是简单请求,那就是非简单请求
先发送OPTIONS 预检请求
OPTIONS请求按照简单请求的方式处理
目的: 保护客户端的安全,防止不受信任的网站利用用户的浏览器向其他网站发送恶意请求
OPTIONS /resources/post-here/ HTTP/1.1
Host: bar.other
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding:gzip,deflate
Accept-Charset:IS0-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Origin: http://www.baidu.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers:X-PINGOTHER,Content-Type
服务器根据这些信息决定,该请求是否被允许
响应的
Access-Control-Allow-Methods:POST
Access-Control-Allow-Headers:X-PINGOTHER,Content-Type
什么时候触发OPTIONS请求?