HTTP协议

HTTP协议

1 . 什么是HTTP协议

  • HTTP协议就是客户端和 服务器端之间数据传输的格式规范,格式简称为“超文本传输协议。
  • 基于TCP/IP
    • HTTP是一个属于应用层的面对对象的协议
    • HTTP协议工作于客户端-服务端架构上
  • 基于请求-响应模式
    • 浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
    • Web服务器根据接收到的请求后,向客户端发送响应信息。

2 .TCP/IP 协议

2.1 TCP/IP 协议的定义

  • TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。

2.2 TCP/IP 协议的四层协议模型

(1)应用层 (各种应用层协议如:TELNET,FTP,SMTP)

  • 向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等。远程登录TELNET使用TELNET协议提供在网络其它主机上注册的接口。TELNET会话提供了基于字符的虚拟终端。文件传输访问FTP使用FTP协议来提供网络内机器间的文件拷贝功能。

(2)传输层(TCP,UDP)

  • 提供应用程序间的通信。其功能包括:
    • 格式化信息流;
    • 提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送。

(3)网络层(IP)

  • 负责相邻计算机之间的通信。其功能包括三方面。
    • 处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。
    • 处理输入数据报:首先检查其合法性,然后进行寻径–假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报。
    • 处理路径、流控、拥塞等问题。

(4)网络接口层

  • 这是TCP/IP软件的最低层,负责接收IP数据报并通过网络发送之,或者从网络上接收物理帧,抽出IP数据报,交给IP层。

2.3 TCP的三次握手和四次挥手

2.3.1 TCP的三次握手

解释:所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:

1

  • 第一次握手:A将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给B,A进入SYN_SENT状态,等待B确认。
  • 第二次握手:B收到数据包后由标志位SYN=1知道A请求建立连接,B将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给A确认连接请求,B进入SYN_RCVD状态。
  • 第三次握手:A收到确认后,检查ack是否为x+1,ACK是否为1 ,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给B,B检查ack是否为y+1,ACK是否为1 ,如果正确则建立成功,A和B进入ESTABLISHED状态,完成三次握手,随后A和B就可以进行数据传输。
  • 三次握手中容易收到SYN攻击。
    • SYN攻击就是A在短时间内伪造大量不存在的IP地址,并向B不断地发送SYN包,B回复确认包,并等待A的确认,由于源地址是不存在的,因此,B需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当B上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了
    • netstat -nap | grep SYN_RECV 命令可查看是否受到SYN攻击。
2.3.2 TCP的四次挥手

所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发,整个流程如下图所示:
2
由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。

  • 第一次挥手:A发送一个FIN=1,自己的序列号seq=u,用来关闭A到B的数据传送,A进入FIN_WAIT_1状态。
  • 第二次挥手:B受到A的消息后,发出ACK=1确认标志和客户端的确认号ack=u+1,自己的序列号seq=v,B进入CLOSE-WAIT状态。
  • 第三次挥手:A收到B的确认后,进入FIN-WAIT-2状态。此时B发送释放FIN=1的信号,确认标志ACK=1,确认序号ack=u+1,自己的序号为seq=w,B进入LAST-ACK(最后确认态)状态。
  • 第四次挥手:A收到回复以后,发送ACK=1,ack=w+1,自己的seq=u+1,A进入TIME-WAIT(时间等待)。A经过两个最长保温段寿命后,A进入CLOSE状态;B收到确认后,立刻进入CLOSE状态。
2.3.3 进行三次握手和四次挥手的原因
  • 三次握手时,服务器同时把ACK和SYN放在一起发送到客户端
  • 四次挥手时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了,但是还可以接收数据,己方是否现在关闭发送数据通道,需要上层应用来决定,因此己方的ACK和FIN一般会分开发送。

3. HTTP协议是无状态协议的原因

  • HTTP是一种不保存状态,即无状态协议。HTTP协议本身不对请求和响应之间的通信状态进行保存。

4 .解决HTTP协议无状态协议

  • 无状态协议解决办法:
    • 通过Cookie
    • 通过Session会话保存

5. HTTP请求常见的请求方式

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

  • HTTP1.0定义了三种请求方法:GET,POST和HEAD方法
  • HTTP1.1新增定义了六种请求方法:OPTIONS,PUT,PATCH,DELETE,TRACE和CONNECT方法
方法描述
GET请求指定的页面信息,并返回实体主体
HEAD类似于GET请求,之不过返回的响应中没有具体内容,用于获取报头
POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求题中,POST请求可能会导致新的资源的建立和/或已有资源的修改
PUT从客户端向服务端传送的数据取代指定的文档内容
DELECT请求服务器删除指定的页面
CONNECTHTTP1.1协议中预留给能够将连接改为管道方式的代理服务器
OPTIONS允许客户端查看服务器得性能
TRACE回显服务器收到的请求,主要用于测试或者诊断
PATCH是对PUT方法的补充,用来对已知资源进行局部更新。

2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值