HTTP协议

HTTP协议

https://www.baidu.com/ --域名

https://183.2.172.185/ 上下两个等价

域名会被域名解析系统解析为ip地址

http服务器默认绑定80端口,所以这里没有显示端口号,浏览器默认添加80端口

url

在这里插入图片描述

80后面的第一个斜杠是web根目录

统一资源定位符,所有网络上的资源,都可以用唯一的一个“字符串”标识,并且可以获取到。

网络行为:把别人的东西拿下来,把自己的东西传上去

urlencode和urldecode
像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现.
比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.
转义的规则如下:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。urldecode就是urlencode的逆过程

请求与响应

在这里插入图片描述

在这里插入图片描述

(这里是响应空行,不是请求空行)

HTTP/1.1 200 OK   //状态行 状态码 状态码描述
Accept-Ranges: bytes
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 9508
Content-Type: text/html
Date: Sun, 15 Sep 2024 08:30:17 GMT
P3p: CP=" OTI DSP COR IVA OUR IND COM "
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Pragma: no-cache
Server: BWS/1.1
Set-Cookie: BAIDUID=1AADE1FEE4F2C6BD0EABA7F9133D5956:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=1AADE1FEE4F2C6BD0EABA7F9133D5956; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1726389017; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BAIDUID=1AADE1FEE4F2C6BD215F3469F4C63186:FG=1; max-age=31536000; expires=Mon, 15-Sep-25 08:30:17 GMT; domain=.baidu.com; path=/; version=1; comment=bd
Traceid: 172638901727878940267625121565935135035
Vary: Accept-Encoding
X-Ua-Compatible: IE=Edge,chrome=1
X-Xss-Protection: 1;mode=block

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta content="always" name="referrer"><meta name="description" content="全球领先的中文搜索引擎、致力于让网民更便捷地获取信息,找到所求。百度超过千亿的中文网页数据库,可以瞬间找到相关的搜索结果。"><link rel="shortcut icon" href="//www.baidu.com/favicon.ico" type="image/x-icon"><link rel="search" type="application/opensearchdescription+xml" href="//www.baidu.com/content-search.xml" title="百度搜索"><title>百度一下,你就知道</title><style 

状态码

在这里插入图片描述

HTTP中的方法

在这里插入图片描述

重定向

让服务器指导浏览器,让浏览器访问新的地址,就是重定向

临时重定向和永久重定向是 HTTP 中常见的两种重定向类型,分别通过不同的状态码来实现。

临时重定向

临时重定向用于指示客户端暂时访问新的 URL,但将来可能会恢复到原始 URL。通常用于资源的暂时移动或者服务器负载均衡。

常见的状态码有:

  • 302 Found:最常用的临时重定向,表示请求的资源暂时位于另一个 URL。浏览器会继续使用原来的请求方法(如 GET 或 POST)访问新 URL。
  • 307 Temporary Redirect:表示请求的资源暂时位于另一个 URL,并且必须使用相同的请求方法(GET、POST 等)访问新 URL。
使用场景:
  • 网站维护期间,临时将用户引导到另一个页面。
  • 服务器负载过高时,将部分请求转移到其他服务器。
HTTP 响应示例(302 临时重定向):
HTTP/1.1 302 Found
Location: http://www.new-location.com/

在这个例子中,客户端会被重定向到 http://www.new-location.com/,但它被告知这只是临时的,下次仍然可以请求原始 URL。

永久重定向

永久重定向表示资源已经被永久移动到一个新的 URL,客户端和搜索引擎应该更新到新地址。常用于网站的永久迁移或 URL 的结构性改变。

常见的状态码有:

  • **301 **:表示请求的资源已经永久移动到新的 URL,客户端(包括搜索引擎)应更新书签、缓存等。浏览器会将所有后续请求指向新的 URL。
  • **308 **:类似于 301,但它要求重定向时使用相同的请求方法(比如 POST 必须仍然是 POST)。
使用场景:
  • 网站域名更改或资源的永久性迁移。
  • SEO 场景中,将旧页面的流量永久转移到新页面,以保留页面权重。
HTTP 响应示例(301 永久重定向):
HTTP/1.1 301 Moved Permanently
Location: http://www.new-website.com/

在这个例子中,客户端会被告知资源已永久移动到 http://www.new-website.com/,并应从此访问新的 URL。

总结:

  • 状态码

    • 临时重定向:302307
    • 永久重定向:301308
  • 客户端行为

    • 临时重定向:客户端仍然可以请求原始 URL,可能会继续跟随重定向。
    • 永久重定向:客户端应该更新资源的 URL,将所有请求转移到新的 URL。
  • SEO 影响

    • 临时重定向不会影响搜索引擎对原始 URL 的索引。
    • 永久重定向会告诉搜索引擎更新 URL,有助于保留原页面的权重。

什么时候用?

  • 临时重定向:当重定向是短期的或不确定是否是永久的情况,如网站维护时。
  • 永久重定向:当资源永久移动到新位置,或者进行网站重构、域名更改时。

HTTP常见Header

Content-Type: 数据类型(text/html等)
Content-Length: Body的长度
Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
User-Agent: 声明用户的操作系统和浏览器版本信息;
referer: 当前页面是从哪个页面跳转过来的;
location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;

Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;

Connection: keep-alive 通信双方是否使用长连接

短连接

一个网页中有很多的资源,当我们访问一个网站时,浏览器发起第一个http请求,将网页响应回来,之后浏览器继续发起请求,将网页中的所有资源请求下来(图片),当访问一个网站时,可能由浏览器并发发起多次请求,返回一个资源以后连接就断开,基于这种模式的请求响应,叫做短连接

长连接

建立一个tcp连接,发送和返回多个http的request和response,这种是长连接。

Cookie

http协议默认是无状态

不记录曾经访问的图片或者资源

当我们登录以后,第二次请求时浏览器是怎么确定还是你呢?

在这里插入图片描述

http对登录用户的会话保持功能

cookie文件:保存你的登录信息

每一次通信都会携带cookie文件中的内容,用户名和密码

cookie文件:文件级保存在磁盘中,内存级保存在内存中,这种浏览器关闭就会内容就会清除

cookie会设置自动消除时间。

cookie会有被盗取的风险,个人私人信息泄露

session

Session 是一种用于在客户端和服务器之间维护用户状态的机制,特别在 HTTP 协议中使用。因为 HTTP 协议是无状态的,每次请求都是独立的,没有内在机制来关联一个用户的多个请求。因此,Session 提供了一种方式来保持用户的状态,使服务器能够识别来自同一用户的不同请求。

  1. 保持用户状态
    Session 允许服务器在多个请求之间保持用户的状态。例如,当用户登录后,服务器可以使用 Session 记录用户的身份信息,在之后的每个请求中无需重新验证登录信息。

  2. 存储用户信息
    服务器可以在 Session 中存储用户相关的数据,如购物车信息、浏览历史、用户设置等。这些信息存储在服务器端,客户端只需通过会话标识符(通常是 SessionID)访问这些数据。

  3. 用户身份验证
    Session 经常与用户身份验证系统一起使用。登录成功后,服务器会在 Session 中记录用户的登录状态,用户后续的请求可以通过 SessionID 验证用户是否已登录。

  4. 跨页面数据共享
    在一个 Web 应用程序中,不同页面之间可以通过 Session 共享数据。例如,用户在填写多步骤表单时,每一步的数据可以保存在 Session 中,确保在下一步可以访问到这些数据。

工作原理:

  1. 创建 Session
    当用户第一次访问网站时,服务器会为该用户创建一个唯一的 SessionID,并在服务器端创建一个与之对应的数据结构来存储用户相关的信息。

  2. 发送 SessionID
    SessionID 通常通过 Cookie 发送给客户端(也可以通过 URL 或者 POST 请求)。每次客户端发起请求时,都会将 SessionID 发送给服务器。

  3. 服务器检查 SessionID
    服务器通过 SessionID 找到对应的会话信息,并基于此信息执行操作。Session 信息存储在服务器端,可以是内存、数据库或其他持久化存储。

  4. 会话过期
    Session 通常有一个生命周期(例如 30 分钟)。如果用户在一段时间内没有与服务器交互,Session 会自动失效,用户需要重新登录或重新开始操作。

与 Cookie 的区别:

Session 存储在服务器端,Cookie 存储在客户端

Session 的安全性较高,因为敏感数据存储在服务器端,客户端只通过 SessionID 进行访问;而 Cookie 存储的数据直接暴露给客户端,安全性较低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值