天天看点

HTTP协议,HTTP请求和响应,TCP三次和四次握手1.HTTP协议是什么?2.HTTP主要特点3.HTTP请求和响应4.TCP三次握手和四次握手5.HTTP七层协议

目录

1.HTTP协议是什么?

2.HTTP主要特点

3.HTTP请求和响应

3.1HTTP请求

3.2HTTP响应

3.3HTTP请求和响应流程

3.4HTTP响应状态码分类 

3.5HTTP请求方法

4.TCP三次握手和四次握手

4.1三次握手过程(建立连接)

4.2四次挥手过程理解(释放连接)

5.HTTP七层协议

1.HTTP协议是什么?

a.(HTTP协议作用?)HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

b.(HTTP协议传输内容?)HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

c.(HTTP协议的发展?)HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。

HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP协议,HTTP请求和响应,TCP三次和四次握手1.HTTP协议是什么?2.HTTP主要特点3.HTTP请求和响应4.TCP三次握手和四次握手5.HTTP七层协议

2.HTTP主要特点

a.HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

b.HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。

c.HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

d.HTTP简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

e.支持B/S(Browser/Server)及C/S(Client/Server)模式。

3.HTTP请求和响应

3.1HTTP请求

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。

HTTP协议,HTTP请求和响应,TCP三次和四次握手1.HTTP协议是什么?2.HTTP主要特点3.HTTP请求和响应4.TCP三次握手和四次握手5.HTTP七层协议

HTTP请求实例(基于Charles抓包数据):

POST /service.asmx/user_notepad?t=1589500883638 HTTP/1.1
Host: 127.0.0.1:9001
Content-Length: 122
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36
content-type: application/json
Origin: http://127.0.0.1:9001
Referer: http://127.0.0.1:9001/app88/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: ASP.NET_SessionId=rxhnzy5kvnmzkzxbcgzqqpja
Connection: keep-alive

{
  "user_id": 721,
  "vin_num": "AAJJU7FX6H5008783",
  "content": "123",
  "apikey": "f2a3a7c9a7cf3a500d8cdd6bfdff9ebe"
}
           

a.第一行请求行,包含请求方法(POST),请求路径(/service.asmx/user_notepad?t=1589500883638),HTTP协议版本(HTTP/1.1);

b.第二行请求头,跟在请求行后面,说明请求服务器的附加信息;从第二行起为请求头部,HOST将指出请求的目的地;User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础;该信息由你的浏览器来定义,并且在每个请求中自动发送等等;

User-Agent会告诉网站服务器,访问者是通过什么工具来请求的,如果是爬虫请求,一般会拒绝,如果是用户浏览器,就会应答;

User-Agent通用格式:

Mozilla/5.0 (平台) 引擎版本 浏览器版本号
           

c.第三部分,空行,请求头后面必须是空行;

即使第四部分的请求数据为空,也必须有空行。

d.第四部分,请求数据;

3.2HTTP响应

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文;

HTTP协议,HTTP请求和响应,TCP三次和四次握手1.HTTP协议是什么?2.HTTP主要特点3.HTTP请求和响应4.TCP三次握手和四次握手5.HTTP七层协议

a.第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息三部分组成;

第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)

b.第二部分:消息报头,用来说明客户端要使用的一些附加信息;

第二行和第三行为消息报头;

Date:生成响应的日期和时间;

Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8;

c.第三部分:空行,消息报头后面的空行是必须的;

d.第四部分:响应正文,服务器返回给客户端的文本信息;

空行后面的html或者JSON部分为响应正文;

HTTP响应实例(基于Charles抓包数据):

HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Access-Control-Allow-Methods: OPTIONS,POST,GET
Access-Control-Allow-Headers: Origin,X-Requested-With,Content-Type,Accept
Access-Control-Allow-Origin: *
Date: Fri, 15 May 2020 00:01:30 GMT
Content-Length: 116
Proxy-Connection: keep-alive

{"d":"{\"head\":{\"status\":0,\"msg\":\"成功\",\"record_count\":0,\"sub_status\":0,\"ext1\":\"\"},\"Body\":\"\"}"}
           

3.3HTTP请求和响应流程

HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:

(1)客户与服务器建立连接;

(2)客户向服务器提出请求;

(3)服务器接受请求,并根据请求返回相应的文件作为应答;

(4)客户与服务器关闭连接。

客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。这种一次性连接主要考虑到WWW服务器面向的是Internet中成干上万个用户,且只能提供有限个连接,故服务器不会让一个连接处于等待状态,及时地释放连接可以大大提高服务器的执行效率。 

HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。这就大大减轻了服务器记忆负担,从而保持较快的响应速度。HTTP是一种面向对象的协议。允许传送任意类型的数据对象。它通过数据类型和长度来标识所传送的数据内容和大小,并允许对数据进行压缩传送。当用户在一个HTML文档中定义了一个超文本链后,浏览器将通过TCP/IP协议与指定的服务器建立连接。 

从技术上讲是客户在一个特定的TCP端口(端口号一般为80)上打开一个套接字。如果服务器一直在这个周知的端口上倾听连接,则该连接便会建立起来。然后客户通过该连接发送一个包含请求方法的请求块。

HTTP规范定义了9种请求方法,每种请求方法规定了客户和服务器之间不同的信息交换方式,常用的请求方法是GET和POST。服务器将根据客户请求完成相应操作,并以应答块形式返回给客户,最后关闭连接。

3.4HTTP响应状态码分类 

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

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

5xx:服务器端错误--服务器未能实现合法的请求

常见状态码:

200 OK                        //客户端请求成功

400 Bad Request               //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized              //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 

403 Forbidden                 //服务器收到请求,但是拒绝提供服务

404 Not Found                 //请求资源不存在,eg:输入了错误的URL

500 Internal Server Error     //服务器发生不可预期的错误

503 Server Unavailable        //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

更多状态码:https://www.runoob.com/http/http-status-codes.html

3.5HTTP请求方法

根据 HTTP 标准,HTTP 请求可以使用多种请求方法。

HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

GET    请求指定的页面信息,并返回实体主体。

HEAD    类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头。

POST    向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。

PUT    从客户端向服务器传送的数据取代指定的文档的内容。

DELETE    请求服务器删除指定的页面。

CONNECT    HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。

OPTIONS    允许客户端查看服务器的性能。

TRACE    回显服务器收到的请求,主要用于测试或诊断。

PATCH    是对 PUT 方法的补充,用来对已知资源进行局部更新 。

4.TCP三次握手和四次握手

HTTP协议,HTTP请求和响应,TCP三次和四次握手1.HTTP协议是什么?2.HTTP主要特点3.HTTP请求和响应4.TCP三次握手和四次握手5.HTTP七层协议

序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。

    确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。

    确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效

    同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。

    终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接

    PS:ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。

字段    含义

URG    紧急指针是否有效。为1,表示某一位需要被优先处理

ACK    确认号是否有效,一般置为1。

PSH    提示接收端应用程序立即从TCP缓冲区把数据读走。

RST    对方要求重新建立连接,复位。

SYN    请求建立连接,并在其序列号的字段进行序列号的初始值设定。建立连接,设置为1

FIN        希望断开连接。

4.1三次握手过程(建立连接)

HTTP协议,HTTP请求和响应,TCP三次和四次握手1.HTTP协议是什么?2.HTTP主要特点3.HTTP请求和响应4.TCP三次握手和四次握手5.HTTP七层协议

第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

4.2四次挥手过程理解(释放连接)

HTTP协议,HTTP请求和响应,TCP三次和四次握手1.HTTP协议是什么?2.HTTP主要特点3.HTTP请求和响应4.TCP三次握手和四次握手5.HTTP七层协议

1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。

6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

5.HTTP七层协议

HTTP协议,HTTP请求和响应,TCP三次和四次握手1.HTTP协议是什么?2.HTTP主要特点3.HTTP请求和响应4.TCP三次握手和四次握手5.HTTP七层协议

应用层

与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。但是,如果添加了一个传输文件的选项,那么字处理器的程序就需要实现OSI的第7层。示例:TELNET,HTTP,FTP,NFS,SMTP等。

表示层

这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASCII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASCII格式,发送方将把文本从发送方的字符集转换成标准的ASCII后发送数据。在接收方将标准的ASCII转换成接收方计算机的字符集。示例:加密,ASCII等。

会话层

它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。示例:RPC,SQL等。

传输层

这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。示例:TCP,UDP,SPX。

网络层

这层对端到端的包传输进行定义,它定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。示例:IP,IPX等。

数据链路层

它定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。示例:ATM,FDDI等。

物理层

OSI的物理层规范是有关传输介质的特性,这些规范通常也参考了其他组织制定的标准。连接头、帧、帧的使用、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。示例:Rj45,802.3等。

参考:

https://www.runoob.com/http/http-intro.html

https://baike.baidu.com/item/http/243074?fromtitle=HTTP%E5%8D%8F%E8%AE%AE&fromid=1276942&fr=aladdin

https://blog.csdn.net/qq_38950316/article/details/81087809

https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E4%B8%83%E5%B1%82%E5%8D%8F%E8%AE%AE/6056879?fr=aladdin