HTTP

HTTP是一个基于客户端/服务器模式、无状态、应用层的简单快速协议。主要特点包括支持客户/服务器模式、简单快速、灵活、无连接和无状态。HTTP请求结构包含请求行、请求头部和请求正文,响应结构包括状态行、响应头部和响应正文。HTTP状态码、GET和POST请求的区别、Cookie与Session的概念和区别也进行了详细阐述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

超文本传输协议HTTP属于应用层的协议,它是一个基于请求与响应模式的无状态的应用层的协议。

HTTP主要特点

1.支持客户/服务器模式。HTTP协议工作于客户端/服务端架构之上,http客户端(浏览器)通过url向http服务端(Web服务器)发送请求,Web服务器根据接收到的请求向客户端发送响应信息。

2.简单快速。客户端向服务器请求服务的时候,只需传送请求方法和路径。请求方法常用的有get/post,方法规定了服务器与客户端联系的形式不同。由于http协议简单,使得http服务器的规模小,并且通信速率很快。

3.灵活。http允许传输任意类型的数据对象

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

5.无状态。协议对于事务处理没有记忆能力,缺少状态指的是后面的请求如果需要前面请求的信息,必须被重传。这样可能会导致每次传输的数据量增大。

 

HTTP请求结构

由请求行、请求头部、请求正文(数据)组成

 

 

 

HTTP响应结构

服务器接收到客户端的请求后会向客户端发送响应消息

 

 

HTTP请求/响应的步骤

  1. 客户端连接到Web服务器。一个http客户端通常是浏览器,与web服务器的http端口(默认是80)建立一个tcp套接字连接。
  2. 发送HTTP请求。通过tcp套接字让客户端向服务端发送一个文本的请求报文。
  3. 服务器接受请求并返回HTTP响应。Web服务器解析请求,将响应写到tcp套接字,由客户端读取。
  4. 释放TCP连接。如果是http1.0,连接模式是close,服务器主动关闭tcp连接,客户端被动关闭连接。http1.1连接模式升级到keep-live,则该连接会保持一段时间,在该时间内可以继续接收请求。
  5. 客户端浏览器解析HTML内容。首先浏览器解析状态行,看是否有成功的状态代码,然后解析每一个响应头,响应头告知HTML数据,客户端读取HTML数据进行解析格式化,并在浏览器窗口显示。

在浏览器地址栏输入URL,按下回车之后经历的流程

  1. DNS解析:浏览器会根据url逐层查询DNS服务器缓存,解析url中的域名所对应的ip地址。DNS缓存从近到远分别是浏览器缓存、系统缓存、路由器缓存、IPS服务器缓存、域名服务器缓存、顶级域名服务器缓存,从哪个缓存找到对应的ip则直接返回。
  2. TCP连接:找到ip地址之后,根据ip地址和对应的端口和服务器建立tcp连接。(三次握手)
  3. 发送HTTP请求:浏览器会向服务器发送http请求
  4. 服务器处理请求并返回HTTP报文:将带有html的报文返回给浏览器
  5. 浏览器解析渲染页面:浏览器解析html并展示
  6. 连接结束:浏览器释放tcp连接(四次挥手)

HTTP状态码

状态码由3位数组成,第1为代表响应类别

 

常见状态码

 

GET请求和POST请求的区别

  1. Http报文层面:CET将请求信息放在URL中,请求信息以问号隔开,请求信息的格式为键值对,对数据长度存在限制。POST请求将请求信息放在报文体中,对数据长度无限制,想获取请求信息必须解析报文。
  2. 数据库层面:GET符合幂等性和安全性,POST不符合。幂等性是对数据库的一次操作或者多次操作获得的结果是一致的。安全性是对数据库中的操作没有改变数据库中的数据。GET请求主要是做查询操作的,因此不会改变数据库中原有的数据,大致可以认为符合幂等性和安全性。
  3. 其他层次:GET可以被缓存、被存储,GET请求会保存在浏览器的 浏览记录中,GET请求的url可以保存为浏览器书签,而POST不行。所以缓存也是GET请求被广泛应用的根本。绝大部分的GET请求都被CDN缓存了,能够大量减少服务器的负担。

 

Cookie和Session的区别

由于HTTP是无状态的,如果我们要登陆就得不厌其烦的输入登陆信息,为了解决这个问题,引入Cookie和Session。

Cookie

Cookie是客户端的解决方案,是由服务器发给客户端的特殊信息,以文件的形式存放在客户端。

每次客户端向服务端发送请求时,会把Cookie回发。服务器接收到后,会解析Cookie,生成与客户端相对应的内容。

Cookie的设置以及发送过程:

1.客户端发送http请求至服务端

2.服务端返回响应数据,其中包括Set-Cookie的头部信息

3.客户端发送请求至服务器,会携带Cookie信息

4.服务器头返回http响应至客户端

 

Session

Session是服务器端的机制,是在服务器上保存的信息。

当程序要为某个客户端的请求创建一个session的时候,服务器检查客户端的请求中是否包含了session标识(session id),如果包含了一个session id说明以前已经为该客户端创建过session,服务器就按照session id,将session检索出来使用。如果客户端请求不包含session id,则为此客户端创建一个session,并生成一个与此session相关的session id。Session id会在本次响应的时候被回发给客户端,进行保存。

Session的实现方式:

1.使用Cookie来实现。服务器给每个session分配一个JSESSIONID,并通过Cookie发送给客户端,当客户端发起新的请求的时候,将在Cookie头中携带这个JSESSIONID。这样服务器可以找到客户端对应的session.

 

2.使用URL回写来实现。Url回写是指服务器在发送给浏览器的所有页面中都携带JSESSIONID的参数,这样客户端点击任何一个链接都会把JSESSIONID带回服务器。如果直接在浏览器输入服务端的url来请求该资源,那么session是匹配不到的。

 

Cookie和Session的区别

  1. Cookie数据存放在客户的浏览器上,Session数据放在服务器上
  2. Session相对于Cookie更安全。Cookie不是很安全,可以分析存在本地的Cookie并进行Cookie欺骗。
  3. 若考虑减轻服务器负担,应当使用Cookie。Session会在一定时间内保存在服务器上,当访问增多,会比较占用服务器的性能。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值