HTTP入门详解

请求方法种类:
image.png

1.请求报文说明:

1、请求报文的结构主要有三部分:请求行、请求头、请求正文

请求行又包含三部分:
1.请求方法:(get,post,move,delete等)。
2 URL字段:(访问的URL信息)。
3 HTTP协议版本(主要有http1.0 http1.1 http2.0三种,其中http1.0属于TCP短连接类型协议,http1.1属于TCP长连接类型协议)。
2、响应报文主要有三部分:响应行、响应头、响应正文。
响应行:协议类型和版本号和状态码

2.请求报文图解:

image.png

3.HTTP抓包内容展示(抓包过程可以参见fidder抓包教程):

image.png

常见http状态码及其含义:

200 OK
204 No Content
该状态码代表服务器接收的请求已成功处理, 但在返回的响应报文中不含实体的主体部分。
-206 Partial Content
该状态码表示客户端进行了范围请求, 而服务器成功执行了这部分的GET 请求。 响l
3XX 重定向
3XX 响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。
301 Moved Permanently
永久性重定向。 该状态码表示请求的资源已被分配了新的 URI, 以后应使用资源现在所指的 URI。
-302 Found
临时性重定向。 该状态码表示请求的资源已被分配了新的 URI, 希望用户(本次) 能使用新的 URI 访问

http协议请求头作用:
image.png

请求首部字段是从客户端往服务器端发送请求报文中所使用的字段,用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等内容。

常见的请求头:

Accept 首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。可使用 type/subtype 这种形式,一次指定多种媒体类型。
Accept-Charset 首部字段可用来通知服务器用户代理支持的字符集及字符集的相对优先顺序。另外,可一次性指定多种字符集。与首部字段 Accept 相同的是可用权重 q 值来表示相对优先级。该首部字段应用于内容协商机制的服务器驱动协商。
Accept-Encoding 首部字段用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序。可一次性指定多种内容编码。
首部字段 Accept-Language 用来告知服务器用户代理能够处理的自然语言集(指中文或英文等),以及自然语言集的相对优先级。可一次指定多种自然语言集。
首部字段 Authorization 是用来告知服务器,用户代理的认证信息(证书值)。通常,想要通过服务器认证的用户代理会在接收到返回的 401 状态码响应后,把首部字段 Authorization 加入请求中。共用缓存在接收到含有 Authorization 首部字段的请求时的操作处理会略有差异。
首部字段 Expect 来告知服务器,期望出现的某种特定行为。
首部字段 From 用来告知服务器使用用户代理的用户的电子邮件地址。
首部字段 Host 会告知服务器,请求的资源所处的互联网主机名和端口号。
If-xxx 这种样式的请求首部字段,都可称为条件请求。服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求。
首部字段 If-Match,属附带条件之一,它会告知服务器匹配资源所用的实体标记(ETag)值
首部字段 If-Modified-Since,属附带条件之一,它会告知服务器若 IfModified-Since 字段值早于资源的更新时间,则希望能处理该请求。
首部字段 If-Range 属于附带条件之一。它告知服务器若指定的 IfRange 字段值(ETag 值或者时间)和请求资源的 ETag 值或时间相一致时,则作为范围请求处理。反之,则返回全体资源。
首部字段 If-Unmodified-Since 和首部字段 If-Modified-Since 的作用相反。它的作用的是告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况下,才能处理请求。如果在指定日期时间后发生了更新,则以状态码 412 Precondition Failed 作为响应返回。
首部字段 Referer 会告知服务器请求的原始资源的 URI。
首部字段 TE 会告知服务器客户端能够处理响应的传输编码方式及相对优先级。它和首部字段 Accept-Encoding 的功能很相像,但是用于传输编码。
首部字段 User-Agent 会将创建请求的浏览器和用户代理名称等信息传达给服务器。

http协议响应头作用
image.png

响应首部字段是由服务器端向客户端返回响应报文中所使用的字段,用于补充响应的附加信息、服务器信息,以及对客户端的附加要求等信息。
常见的响应头:
首部字段 Accept-Ranges 是用来告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源。可指定的字段值有两种,可处理范围请求时指定其为 bytes,反之则指定其为 none。
首部字段 Age 能告知客户端,源服务器在多久前创建了响应。字段值的单位为秒。若创建该响应的服务器是缓存服务器,Age 值是指缓存后的响应再次发起认证到认证完成的时间值。代理创建响应时必须加上首部字段 Age。
首部字段 ETag 能告知客户端实体标识。它是一种可将资源以字符串形式做唯一性标识的方式。服务器会为每份资源分配对应的 ETag 值。
使用首部字段 Location 可以将响应接收方引导至某个与请求 URI 位置不同的资源。基本上,该字段会配合 3xx :Redirection 的响应,提供重定向的 URI。
首部字段 Proxy-Authenticate 会把由代理服务器所要求的认证信息发送给客户端。
首部字段 Retry-After 告知客户端应该在多久之后再次发送请求。主要配合状态码 503 Service Unavailable 响应,或 3xx Redirect 响应一起使用。
首部字段 Server 告知客户端当前服务器上安装的 HTTP 服务器应用程序的信息。不单单会标出服务器上的软件应用名称,还有可能包括版本号和安装时启用的可选项。
首部字段 Vary 可对缓存进行控制。源服务器会向代理服务器传达关于本地缓存使用方法的命令。
首部字段 WWW-Authenticate 用于 HTTP 访问认证。它会告知客户端
适用于访问请求 URI 所指定资源的认证方案(Basic 或是 Digest)和
带参数提示的质询(challenge)。状态码 401 Unauthorized 响应中,
肯定带有首部字段 WWW-Authenticate。

实体首部字段的

作用:实体首部字段是包含在请求报文和响应报文中的实体部分所使用的首
部,用于补充内容的更新时间等与实体相关的信息。
常见的首部字段:
首部字段 Allow 用于通知客户端能够支持 Request-URI 指定资源的所
有 HTTP 方法。当服务器接收到不支持的 HTTP 方法时,会以状态码
405 Method Not Allowed 作为响应返回。与此同时,还会把所有能支
持的 HTTP 方法写入首部字段 Allow 后返回。
首部字段 Content-Encoding 会告知客户端服务器对实体的主体部分选
用的内容编码方式。内容编码是指在不丢失实体信息的前提下所进行
的压缩。
首部字段 Content-Language 会告知客户端,实体主体使用的自然语言(指中文或英文等语言)。
首部字段 Content-Length 表明了实体主体部分的大小(单位是字
节)。对实体主体进行内容编码传输时,不能再使用 ContentLength
首部字段。
首部字段 Content-Location 给出与报文主体部分相对应的 URI。和首
部字段 Location 不同,Content-Location 表示的是报文主体返回资源对
应的 URI。
首部字段 Content-MD5 是一串由 MD5 算法生成的值,其目的在于检
查报文主体在传输过程中是否保持完整,以及确认传输到达。
针对范围请求,返回响应时使用的首部字段 Content-Range,能告知客
户端作为响应返回的实体的哪个部分符合范围请求。字段值以字节为
单位,表示当前发送部分及整个实体大小。
首部字段 Content-Type 说明了实体主体内对象的媒体类型。和首部字
段 Accept 一样,字段值用 type/subtype 形式赋值。
首部字段 Expires 会将资源失效的日期告知客户端。
首部字段 Last-Modified 指明资源最终修改的时间。

https的优点

1、加密、认证和完整性保护
2、HTTPS采用混合加密机制
https的缺点是什么?
1、处理速度会变慢
2、成本高
https常用的认证方式:
BASIC认证(基本认证)
DIGEST(摘要认证)
SSL(客户端认证)
FormBase(基于表单认证)
Windows统一认证(Keberos认证、NTLM认证)

三次握手&四次挥手

TCP协议为了数据送达采用了三次握手策略
URI是统一资源标识符
URL是统一资源定位符
3.格式不一样
关系:URL是URI的子集
绝对的URI格式:
http://192.168.101:80/dir/index.jsp?uid=2#ch1
http通过cookie技术解决无状态问题;通过在请求和响应报文中写入cookie信息来控制客户端登陆状态

三次握手四次挥手转换图:
image.png
三次握手建立连接详解:

第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。 从客户端的视角来看,我接到了服务端发送过来的响应数据包,说明服务端接收到了我在第一次握手时发送的网络包,并且成功发送了响应数据包,这就说明,服务端的接收、发送能力正常。而另一方面,我收到了服务端的响应数据包,说明我第一次发送的网络包成功到达服务端,这样,我自己的发送和接收能力也是正常的。
第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力,服务端的发送、接收能力是正常的。 第一、二次握手后,服务端并不知道客户端的接收能力以及自己的发送能力是否正常。而在第三次握手时,服务端收到了客户端对第二次握手作的回应。从服务端的角度,我在第二次握手时的响应数据发送出去了,客户端接收到了。所以,我的发送能力是正常的。而客户端的接收能力也是正常的。

四次挥手断开连接详解:

TCP连接是双向传输的对等的模式,就是说双方都可以同时向对方发送或接收数据。当有一方要关闭连接时,会发送指令告知对方,我要关闭连接了。这时对方会回一个ACK,此时一个方向的连接关闭。但是另一个方向仍然可以继续传输数据,等到发送完了所有的数据后,会发送一个FIN段来关闭此方向上的连接。接收方发送ACK确认关闭连接。注意,接收到FIN报文的一方只能回复一个ACK, 它是无法马上返回对方一个FIN报文段的,因为结束数据传输的“指令”是上层应用层给出的,我只是一个“搬运工”,我无法了解“上层的意志”。

“三次握手,四次挥手”怎么完成?

其实3次握手的目的并不只是让通信双方都了解到一个连接正在建立,还在于利用数据包的选项来传输特殊的信息,交换初始序列号ISN。

3次握手是指发送了3个报文段,4次挥手是指发送了4个报文段。注意,SYN和FIN段都是会利用重传进行可靠传输的。

image

三次握手

  1. 客户端发送一个SYN段,并指明客户端的初始序列号,即ISN(c).
  2. 服务端发送自己的SYN段作为应答,同样指明自己的ISN(s)。为了确认客户端的SYN,将ISN(c)+1作为ACK数值。这样,每发送一个SYN,序列号就会加1. 如果有丢失的情况,则会重传。
  3. 为了确认服务器端的SYN,客户端将ISN(s)+1作为返回的ACK数值。

四次挥手

image

1. 客户端发送一个FIN段,并包含一个希望接收者看到的自己当前的序列号K. 同时还包含一个ACK表示确认对方最近一次发过来的数据。 2. 服务端将K值加1作为ACK序号值,表明收到了上一个包。这时上层的应用程序会被告知另一端发起了关闭操作,通常这将引起应用程序发起自己的关闭操作。 3. 服务端发起自己的FIN段,ACK=K+1, Seq=L 4. 客户端确认。ACK=L+1

你可能感兴趣的:(HTTP入门详解)