http协议请求处理过程?
随着互联网的不断发展,用户在访问互联网的时候使用的终端设备类型也在不断的变化,但是这些都是基于http协议来实现的,下面我们就简单分析一下,http发送请求的处理过程。
HTTP协议是基于TCP协议的,所以它使用面向连接的方式发送请求,通过stream二进制流的方式传给对方。当然,到了TCP层,它会把二进制流变成一个的报文段发送给服务器。在发送给每个报文段的时候,都需要对方有一个回应ACK,来保证报文可靠地到达了对方。如果没有回应,那么TCP这一层会进行重新传输,直到可以到达。同一个包有可能被传了好多次,但是HTTP这一层不需要知道这一点,因为是TCP这一层在埋头苦干。
TCP层发送每一个报文的时候,都需要加上自己的地址(即源地址)和它想要去的地方(即目标地址),将这两个信息放到IP头里面,交给IP层进行传输。
IP层需要查看目标地址和自己是否是在同一个局域网。如果是,就发送ARP协议来请求这个目标地址对应的MAC地址,然后将源MAC和目标MAC放入MAC头,发送出去即可。如果不在同一个局域网,就需要发送到网关,还要需要发送ARP协议,来获取网关的MAC地址,然后将源MAC和网关MAC放入MAC头,发送出去。
网关收到包发现MAC符合,取出目标IP地址,根据路由协议找到下一跳的路由器,获取下一跳路由器的MAC地址,将包发给下一跳路由器。这样路由器一跳一跳终于到达目标的局域网。这个时候,后一跳的路由器能够发现,目标地址就在自己的某一个出口的局域网上。于是,在这个局域网上发送ARP,获得这个目标地址的MAC地址,将包发出去。
目标的机器发现MAC地址符合,就将包收起来;发现IP地址符合,根据IP头中协议项,知道自己上一层是TCP协议,于是解析TCP的头,里面有序列号,IT培训建议需要看一看这个序列包是不是我要的,如果是就放入缓存中然后返回一个ACK,如果不是就丢弃。
TCP头里面还有端口号,HTTP的服务器正在监听这个端口号。于是,目标机器自然知道是HTTP服务器这个进程想要这个包,于是将包发给HTTP服务器。HTTP服务器的进程看到,原来这个请求是要访问一个网页,于是就把这个网页发给客户端。
HTTP请求方法是HTTP请求中必不可少的一部分,需要我们熟悉并掌握。最开始的 HTTP10 中定义了 三种 请求方法:GET、POST 和 HEAD。后来的 HTTP11 中又新增了 五种 :PUT、DELETE、OPTIONS、TRACE 和 CONNECT。当然除了这八种请求方法,特定的HTTP服务器还能够 扩展自定义的方法 。例如实现局部更新的 PATCH 等方法。接下来就简单介绍一下八种基本的请求方法。
首先是八种请求应该实现的功能,HEAD 只用来获取响应的报头;POST、DELETE、PUT、GET 应该分别对应对数据的增、删、改、查;OPTIONS 用来测试服务器;TRACE 用来测试或诊断;CONNECT 预留给能够将连接改为管道方式的代理服务器。
一般我们最经常使用的也就是 POST、DELETE、PUT、GET 这四种了,虽说应该与增删改查一一对应,但是经常在使用的过程中,请求方式只是起到了传递数据的作用,而更详细地对数据的处理则留给后端模块。
一般来说,我们会使用 GET 方法来完成单纯的数据获取,因为 GET 方法应该是 安全的、等幂的 (idempotent),应该不涉及数据的修改,新增,删除等操作。等幂的意思可以简单理解 为对同一URL的多个请求应该返回同样的结果 。
涉及到提交数据方面的请求都使用 POST 来完成(你也可以使用 PUT、DELETE,其实没有太大的区别)。因为 POST 方法的安全性更高,POST 的数据是在请求体中发送的,而 GET 的数据是在 URL 中发送的(其实对稍微懂一点的人来说都没差)。且能够传输的数据大小没有限制,而 GET 方法最多只能传输 2KB的数据。
接来下是八种请求方式的描述:
1、HEAD
HEAD 方法是向服务器发出指定资源的请求,只不过 索要的只是响应头,响应体将不会被返回 。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
2、GET
GET 方法与 HEAD 方法类似,是向指定的资源发出 显示 请求。使用 GET 方法应该只用在读取数据,而不应当被用于产生副作用的操作中,如修改数据等,因为 GET 可能会被网络爬虫等随意访问。GET 方法也能够向服务端发送数据,是直接加在 URL 中发送的,用 分割URL和数据,用 & 连接多个数据。
例如:https:mu-mucn/indexhtmlname=mumu&age=20
3、POST
GET 和 POST 是我们使用最频繁的两种请求方法,都是向服务器发出指定资源的请求。但是与 GET 方法不同,POST 方法一般拿来新建或修改服务器资源,所以数据与 POST 方法往往是不可分割的,POST 方法的数据会被包含在请求体中发送至服务端。
4、PUT
PUT 方法和 POST 方法非常类似,都是用作数据的修改,他们的区别就是,PUT 方法是 等幂 的,也就是说,如果你对一段资源进行多次 PUT 请求提交,最后的结果应该都是一样的,所以用来进行数据的修改;而 POST 方法如果进行多次数据提交,最后的结果是不一样的,所以应该用作数据的新增。
5、DELETE
DELETE 方法用来请求服务器 删除 Request-URI所标识的资源。
6、OPTIONS
OPTIONS 方法可使服务器传回对于该资源的 支持情况 ,包括各种请求方法、头部的支持情况等。客户端可以对特定的 URL 使用 OPTIONS 方法,也可以对整站(通过将 URL 设置为“”)使用该方法,用来测试服务器功能是否正常运作。常见的例子还有跨域的时候,当我们发送的请求为非简单请求时(非 HEAD 、GET、POST,请求头不只有 Accept、Accept-Language、Content-Language、Last-Event-ID、三种Content-Type:application/x-www-form-urlencoded、multipart/form-data、text/plain),浏览器就会先发 OPTIONS 来试探服务器是否允许跨域。相信用过 Vue 的小伙伴应该对 OPTIONS 不陌生。
7、CONNECT
CONNECT 方法在一般的开发中使用不到,这个方法的作用就是把服务器作为跳板,让服务器代替用户去访问其它网页,之后把数据原原本本的返回给用户。这样用户就可以访问到一些只有服务器上才能访问到的网站了,这就是HTTP代理。
8、TRACE
TRACE 请求会在目的服务器端发起一个环回诊断。行程最后一站的服务器会弹回一条 TRACE 响应,并在响应主体中携带它收到的原始请求报文。这样客户端就可以查看在所有中间 HTTP 应用程序组成的请求 / 响应链上,原始报文是否,以及如何被毁坏或修改过。TRACE 方法主要用于 测试或诊断 ,验证请求是否如愿穿过了请求 / 响应链。
以上就是八种 HTTP 请求方式的简单介绍了,除了这基本的八种,还有特定服务器的扩展自定义方法,比如开头提到的 PATCH。平时如果只是满足简单的开发需要,GET 和 POST 就足够了, 但是如果能够掌握和应用这些请求方式,自然能够更上一层楼!
另外,如果你有兴趣,或者是有问题想要与我探讨,欢迎来访问我的博客:https:mu-mucn/blog
HTTP协议通常承载于TCP协议之上;有时也承载于TLS或SSL协议层之上,也就是我们常说的HTTPS。
大部分网站采用HTTP协议进行交互,目前仍有大量的客户端采用HTTP协议进行交互。但是随着安全等级的提升,这些交互逐渐被HTTPS协议取代;
一次HTTP操作称为一个事务,其工作过程可分为五步:
所有流程,均由HTTP请求自动完成。如果在以上过程中的某一步出现错误,那么产生错误的信息将返回,客户端做对应处理。可以是客户端直接与服务器进行交互,也可能在请求中间增加代理。
HTTP基于传输层TCP协议,而TCP是一个端到端的面向连接的协议。所谓的端到端可以理解为进程到进程之间的通信。所以HTTP在开始传输之前,首先需要建立TCP连接,而TCP连接的过程需要所谓的“三次握手”。盗用下图所示TCP连接的三次握手:
由于服务器的IP或者域名都是相对固定的,而客户端可能经常发生变化,因此HTTP协议似乎永远是客户端(Client)发起请求,服务器(Server)返回响应,Request和Response成对出现。同时,如果客户端没有主动请求,很难实现由服务端向客户端推送数据。
HTTP协议的主要特点可概括如下:
1、支持客户端/服务器模式,支持基本认证和安全认证。
2、简单快速
3、灵活
4、可以持续连接
5、无状态
URL(Uniform Resource Locator)格式, http://wwwxxxxxxcom/images/iconpng ;
地址用于描述一个网络上的资源,使用协议+host+path的方式,基本格式如下:
Accept
Accept-Encoding
Accept-Language
Accept-Charset
User-Agent
Content-Type
Referer
Connection:
Host
Cookie
Content-Length
Authorization
UA-Pixels,UA-Color,UA-OS,UA-CPU
Range
HTTP/11协议,共定义了八种方法,用来表明Request-URI指定的资源的不同操作方式:
GET
POST
PUT
DELETE
OPTIONS
HEAD
TRACE
CONNECT
PATCH
方法名称区分大小写。当某个请求所针对的资源不支持对应的请求方法的时候,服务器返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。
HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。
包含:状态行、消息报头、响应正文。
每一次请求,都会产生一个响应。一般使用状态码,粗略区分请求是否成功。如果一切正常,一个标准网页会收到一条200的状态码;错误有对应的错误码,常见的有403、404、500等。
下面列出所有错误码:
发现了一个趣味状态码图,喜欢可以点击: https://wwwtoutiaocom/i6628119994469204484/
Allow
Date
Expires
P3P
Set-Cookie
ETag
Last-Modified
Content-Type
IANA(The Internet Assigned Numbers Authority,互联网数字分配机构)定义了8个大类的媒体类型,分别是:
Content-Range
Content-Length
Content-Encoding
Content-Language
Server
X-AspNet-Version
例如: X-AspNet-Version: 4030319
X-Powered-By
Connection
Location
Refresh
HTTPS
SSL
TLS
对称加密
非对称加密
证书包括内容:
客户端在接受到服务端发来的SSL证书时,会对证书的真伪进行校验,以浏览器为例说明如下:
所以通过发送SSL证书的形式,既解决了公钥获取问题,又解决了黑客冒充问题,一箭双雕,HTTPS加密过程也就此形成
所以相比HTTP,HTTPS 传输更加安全
HTTPS 缺点:
综上所述,相比 HTTP 协议,HTTPS 协议增加了很多交互、加密解密等流程,保证数据传输的安全,很大程度上避免了黑客的攻击。
0条评论