HTTP事务
Posted wzj0015
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP事务相关的知识,希望对你有一定的参考价值。
【事务】
在计算机领域中
事务是指程序中的一系列严密的逻辑性操作,并且必须保证所有的操作都能够成功的完成,如果出错,那么得保证每个
操作中的更改动作,都会被撤销。
简单理解:
多件事当做是一件事在做,好比大家都在同一条船上,要么一起前进存活,要么一起嗝屁
比如转账的事务:
A用户从自己的账户中,转出1000元到B的账户,那么从A用户开始转账,到B用户收款成功后,中间这
一系列的过程,称之为一个事务
事务的特性
。原子性:执行命令,要么全部成功,要么全部失败,只要有一个环节出错,那么其他指令都要进行数据回滚,
回滚到执行命令前的操作。
。一致性:事务的执行使得数据从一个状态,进入另一个状态,但是对于数据的完整性,还是保持稳定
。隔离性:指的是,比如当多个用户并发访问数据库的时候,共同操作一张数据表,数据库它会为每一个用户开
启事务,不能被其他的事务所干扰,多个并发的事务操作,要进行隔离。
。持久性:当事务正确完成后,对数据的修改是永久性的。
【HTTP事务原理】
一道经典的面试题,当我们在浏览器输入一个站点,回车之后发生了什么,对于运维人员需要回答出什么?
【1.DNS解析】
1.浏览器解析www.pythonav.cn这个域名对应的IP地址
2.浏览器搜索自身的DNS缓存,是否存在域名对应的记录
3.DNS缓存中也找不到,系统读取hosts文件,查看是否存在对应IP记录
4.hosts文件也没有,浏览器会发起DNS系统调用,向本地配置的DNS服务器地址发起域名解析请求,对应的域名服务器再寻找是否存在记录
【2.建立tcp连接】
解析到对应的IP地址之后,User-Agent正常是浏览器,会以随机端口(1024<端口<65535)向服务器的80端口发起tcp连接
此请求经过TCP/IP的四层封包之后,进入服务器,进行解包操作,进入网卡,然后内核的TCPIP协议栈,且通过防火墙,最后达到web应用程序,建立TCP连接。
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“第四次握手”,就是服务器和客户端交互,最终确定断开。
【3.发起HTTP请求】
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接求。通常 的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。
经过TCP三次捂手之后,浏览器发起HTTP请求,使用HTTP的GET方法,请求URL是/,按照HTTP/1.0协议。
例如某一个HTTP请求日志记录
192.168.178.1 - - [17/Jan/2020:14:30:11 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/79.0.3945.117 Safari/537.36"
【常见的HTTP请求方法】
GET、向服务器获取数据,资源
POST、向服务器提交数据,登录,注册
HEAD、获取URL的响应头信息(只要脑袋),不要响应主体信息(不要身体数据)
PUT、将请求主体部分发给服务器
DELETE、删除服务器指定的资源
TRACE、追踪请求到达服务器发生的变动
OPTIONS、让服务器返回对指定的URL支持的所有请求方法
【URL请求体】
【状态码】
HTTP章台吗是用以表示网页服务器超文本传输协议响应状态的3位数字代码
HTTP请求太壮如何,用状态码表示结果
状态码类别
1xx 信息状态码,服务器收到请求,需要客户端继续操作
2xx 操作成功
3xx 重定向状态码,需要进一步的操作
4xx 客户端错误,请求语法错误等
5xx 服务端错误,服务器处理过程中出错了
常见状态码
一些常见HTTP状态码为:
200 – 服务器成功返回网页
404 – 请求的网页不存在
503 – 服务不可用
常见HTTP状态码大全
1xx(临时响应)
表示临时响应并需要请求者继续执行操作的状态代码。
代码 说明
http状态码 100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
http状态码 101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。
2xx (成功)
表示成功处理了请求的状态代码。
代码 说明
http状态码 200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
http状态码 201 (已创建) 请求成功并且服务器创建了新的资源。
http状态码 202 (已接受) 服务器已接受请求,但尚未处理。
http状态码 203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
http状态码 204 (无内容) 服务器成功处理了请求,但没有返回任何内容。
http状态码 205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。
http状态码 206 (部分内容) 服务器成功处理了部分 GET 请求。
3xx (重定向)
表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
代码 说明
http状态码 300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
http状态码 301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
http状态码 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
http状态码 303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
http状态码 304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
http状态码 305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
http状态码 307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
4xx(请求错误)
这些状态代码表示请求可能出错,妨碍了服务器的处理。
代码 说明
http状态码 400 (错误请求) 服务器不理解请求的语法。
http状态码 401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
http状态码 403 (禁止) 服务器拒绝请求。
http状态码 404 (未找到) 服务器找不到请求的网页。
http状态码 405 (方法禁用) 禁用请求中指定的方法。
http状态码 406 (不接受) 无法使用请求的内容特性响应请求的网页。
http状态码 407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
http状态码 408 (请求超时) 服务器等候请求时发生超时。
http状态码 409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
http状态码 410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。
http状态码 411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
http状态码 412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
http状态码 413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
http状态码 414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
http状态码 415 (不支持的媒体类型) 请求的格式不受请求页面的支持。
http状态码 416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。
http状态码 417 (未满足期望值) 服务器未满足”期望”请求标头字段的要求。
5xx(服务器错误)
这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。
代码 说明
http状态码 500 (服务器内部错误) 服务器遇到错误,无法完成请求。
http状态码 501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
http状态码 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
http状态码 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
http状态码 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
http状态码 505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。
【响应头信息】
Connection 使用keep-alive特性
Content-Encoding 使用gzip方式对资源压缩
Content-Length: 主体的长度
Content-type MIME类型为html类型,字符集是 UTF-8
Date 响应的日期
Server 使用的WEB服务器
Last-Modified:最后一次修改的时间
Server:服务器程序软件名称和版本
【4.浏览器解析HTML】
浏览器拿到index html文件之后,解析html网页文件,遇见静态资源(js css img)就去服务器再次发请求
下载,这个时候就用上keep-alive(长连接)特性了,建立一次HTTP连接,可以请求多个资源,下载资源的顺序
就是按照代码里的顺序,但是由于每个资源大小不太一样,而浏览器又多线程请求请求资源,顺序并不一定是代码里面的
顺序
【5.浏览器对页面进行渲染】
浏览器对请求到的静态资源进行渲染
1.dns解析
2.发起tcp三次握手
3.建立tcp连接后发起http请求
4.服务器响应http请求,返回html资源
5.浏览器解析html代码,请求html中的其他静态资源
6.浏览器渲染页面,呈现画面
以上是关于HTTP事务的主要内容,如果未能解决你的问题,请参考以下文章