文章目录
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。
总结:
-
状态码:
- 临时重定向:
302
、307
。 - 永久重定向:
301
、308
。
- 临时重定向:
-
客户端行为:
- 临时重定向:客户端仍然可以请求原始 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 提供了一种方式来保持用户的状态,使服务器能够识别来自同一用户的不同请求。
-
保持用户状态:
Session 允许服务器在多个请求之间保持用户的状态。例如,当用户登录后,服务器可以使用 Session 记录用户的身份信息,在之后的每个请求中无需重新验证登录信息。 -
存储用户信息:
服务器可以在 Session 中存储用户相关的数据,如购物车信息、浏览历史、用户设置等。这些信息存储在服务器端,客户端只需通过会话标识符(通常是SessionID
)访问这些数据。 -
用户身份验证:
Session 经常与用户身份验证系统一起使用。登录成功后,服务器会在 Session 中记录用户的登录状态,用户后续的请求可以通过 SessionID 验证用户是否已登录。 -
跨页面数据共享:
在一个 Web 应用程序中,不同页面之间可以通过 Session 共享数据。例如,用户在填写多步骤表单时,每一步的数据可以保存在 Session 中,确保在下一步可以访问到这些数据。
工作原理:
-
创建 Session:
当用户第一次访问网站时,服务器会为该用户创建一个唯一的SessionID
,并在服务器端创建一个与之对应的数据结构来存储用户相关的信息。 -
发送 SessionID:
SessionID
通常通过 Cookie 发送给客户端(也可以通过 URL 或者 POST 请求)。每次客户端发起请求时,都会将SessionID
发送给服务器。 -
服务器检查 SessionID:
服务器通过SessionID
找到对应的会话信息,并基于此信息执行操作。Session 信息存储在服务器端,可以是内存、数据库或其他持久化存储。 -
会话过期:
Session 通常有一个生命周期(例如 30 分钟)。如果用户在一段时间内没有与服务器交互,Session 会自动失效,用户需要重新登录或重新开始操作。
与 Cookie 的区别:
Session 存储在服务器端,Cookie 存储在客户端
Session 的安全性较高,因为敏感数据存储在服务器端,客户端只通过 SessionID
进行访问;而 Cookie 存储的数据直接暴露给客户端,安全性较低。