首页 > 其他分享 >网络通信与状态管理:深入理解Cookie、Session及Web工具

网络通信与状态管理:深入理解Cookie、Session及Web工具

时间:2024-12-14 09:33:01浏览次数:10  
标签:Web http 文件 -- Session Cookie com

前言:在当今数字化的网络世界中,Web 技术的基石构建起了我们丰富多彩的互联网体验。其中,Cookie 和 Session 犹如隐匿于幕后的关键使者,默默地在客户端与服务器之间传递着信息,管理着用户的状态与交互数据,深刻影响着我们在各类网站与应用中的每一次操作与交互流程。

与此同时,Links、Wget、Curl、Httpie 这些强大的 Web 相关工具,宛如网络探险家手中的利器,助力开发者、运维人员以及技术爱好者深入挖掘 Web 资源、测试接口、模拟请求,它们以各自独特的功能和优势,在 Web 开发、调试以及数据获取等诸多场景中发挥着不可或缺的作用。

本篇文章将深入探究 Cookie 和 Session 的奥秘,剖析它们的工作原理、区别与联系,以及在实际应用中的关键要点。同时,还将详细介绍 Links、Wget、Curl、Httpie 这些工具的特性、使用方法以及典型应用场景,为读者揭开 Web 技术底层架构与实用工具的神秘面纱,帮助大家更好地理解、运用这些知识与工具,在 Web 技术的广阔天地中畅行无阻,开启一场充满惊喜与收获的技术探索之旅。

Cookie 和 Session 是Web开发中用于管理用户会话和状态的两种常用技术。它们在用户与服务器之间的交互中扮演着重要的角色。以下是对它们的简要解释:

一、Cookie

  1. 定义:Cookie 是由服务器发送到用户浏览器并保存在本地的小块数据。它通常用于存储用户的一些信息,比如登录状态、用户偏好设置等。

  2. 存储位置:Cookie 存储在用户的浏览器中,每个Cookie都有特定的过期时间,过期后会被浏览器自动删除。

  3. 作用:Cookie 可以用来识别用户,实现个性化服务,比如记住用户的登录状态,这样用户就不用每次访问网站时都重新登录。

  4. 安全性:由于Cookie存储在客户端,因此它们容易受到篡改和盗窃。因此,敏感信息不应该直接存储在Cookie中。

  5. HTTP Only:为了提高安全性,可以设置Cookie为HTTP Only,这样JavaScript就无法访问这些Cookie,减少了跨站脚本攻击(XSS)的风险。

二、Session

  1. 定义:Session 是一种服务器端的存储方式,用于跟踪用户的状态。每个用户浏览器在访问服务器时,服务器会创建一个唯一的Session ID,并将其存储在用户的Cookie中。

  2. 存储位置:Session 数据存储在服务器端,通过Session ID来关联用户的状态。

  3. 作用:Session 可以用来存储用户的状态信息,比如用户的登录信息、购物车内容等。由于存储在服务器端,Session 比Cookie更安全。

  4. 生命周期:Session 有过期时间,当用户关闭浏览器或者Session超时,Session 就会结束。

  5. 安全性:由于Session ID存储在Cookie中,如果Cookie被篡改,攻击者可能会冒充用户。因此,保护Session ID的安全非常重要。

  6. Session 固定攻击:攻击者可能会尝试通过篡改Session ID来固定用户的Session,这是一种安全风险。

Cookie 和 Session 的区别

  • 存储位置:Cookie 存储在客户端,而Session存储在服务器端。
  • 安全性:Session 通常比Cookie更安全,因为数据存储在服务器端。
  • 存储容量:Cookie 有大小限制(通常为4KB),而Session没有这样的限制。
  • 生命周期:Cookie 可以设置为长期存储,而Session通常在浏览器关闭或超时后结束。

在实际应用中,Cookie 和 Session 常常结合使用,以实现更安全、更有效的用户状态管理。例如,可以使用Cookie来存储Session ID,而将实际的用户状态信息存储在服务器端的Session中。这样既利用了Cookie的便捷性,又保证了数据的安全性。

三、Web工具

1、links

格式:links [OPTION]... [URL]...

常用选项:

  • -dump 非交互式模式,显示输出结果
  • -source 打印源码

2、wget

格式:wget [OPTION]... [URL]...

常用选项:
启动:

  • -V, -version 显示wget的版本后退出
  • -h, -help 打印语法帮助
  • -b, -background 启动后转入后台执行
  • -e, -execute=COMMAND 执行.wgetrc'格式的命令,wgetrc格式参见/etc/wgetrc~/.wgetrc`

记录和输入文件:

  • -o, -output-file=FILE 把记录写到FILE文件中
  • -a, -append-output=FILE 把记录追加到FILE文件中
  • -d, -debug 打印调试输出
  • -q, -quiet 安静模式(没有输出)
  • -v, -verbose 冗长模式(这是缺省设置)
  • -nv, -non-verbose 关掉冗长模式,但不是安静模式
  • -i, -input-file=FILE 下载在FILE文件中出现的URLs
  • -F, -force-html 把输入文件当作HTML格式文件对待
  • -B, -base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀

下载:

  • -bind-address=ADDRESS 指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)
  • -t, -tries=NUMBER 设定最大尝试链接次数(0 表示无限制).
  • -O -output-document=FILE 把文档写到FILE文件中
  • -nc, -no-clobber 不要覆盖存在的文件或使用.#前缀
  • -c, -continue 接着下载没下载完的文件
  • -progress=TYPE 设定进程条标记
  • -N, -timestamping 不要重新下载文件除非比本地文件新
  • -S, -server-response 打印服务器的回应
  • -spider 不下载任何东西
  • -T, -timeout=SECONDS 设定响应超时的秒数
  • -w, -wait=SECONDS 两次尝试之间间隔SECONDS秒
  • -waitretry=SECONDS 在重新链接之间等待1…SECONDS秒
  • -random-wait 在下载之间等待0…2*WAIT秒
  • -Y, -proxy=on/off 打开或关闭代理
  • -Q, -quota=NUMBER 设置下载的容量限制
  • -limit-rate=RATE 限定下载速率

目录:

  • -nd -no-directories 不创建目录
  • -x, -force-directories 强制创建目录
  • -nH, -no-host-directories 不创建主机目录
  • -P, -directory-prefix=PREFIX 将文件保存到目录 PREFIX/…
    -cut-dirs=NUMBER 忽略 NUMBER层远程目录

HTTP 选项:

  • -http-user=USER 设定HTTP用户名为 USER
  • -http-passwd=PASS 设定http密码为 PASS
  • -C, -cache=on/off 允许/不允许服务器端的数据缓存(一般情况下允许)。
  • -E, -html-extension 将所有text/html文档以.html扩展名保存。
  • -ignore-length 忽略 Content-Length 头域。
  • -header=STRING 在headers中插入字符串 STRING
  • -proxy-user=USER 设定代理的用户名为 USER
  • -proxy-passwd=PASS 设定代理的密码为 PASS
  • -referer=URL 在HTTP请求中包含 Referer: URL 头。
  • -s, -save-headers 保存HTTP头到文件。
  • -U, -user-agent=AGENT 设定代理的名称为 AGENT 而不是 Wget/VERSION。
  • -no-http-keep-alive 关闭 HTTP活动链接(永远链接)。
  • -cookies=off 不使用 cookies。
  • -load-cookies=FILE 在开始会话前从文件 FILE 中加载cookie。
  • -save-cookies=FILE 在会话结束后将 cookies 保存到 FILE 文件中。

FTP 选项:

  • -nr, -dont-remove-listing 不移走 .listing 文件。
  • -g, -glob=on/off 打开或关闭文件名的 globbing 机制。
  • -passive-ftp 使用被动传输模式(默认值)。
  • -active-ftp 使用主动传输模式。
  • -retr-symlinks 在递归的时候,将链接指向文件(而不是目录)。

递归下载:

  • -r, -recursive 递归下载——慎用!
  • -l, -level=NUMBER 最大递归深度 (inf 或 0 代表无穷).
  • -delete-after 在下载完毕后局部删除文件。
  • -k, -convert-links 转换非相对链接为相对链接。
  • -K, -backup-converted 在转换文件X之前,将之备份为 X.orig。
  • -m, -mirror 等价于 -r -N -l inf -nr.
  • -p, -page-requisites 下载显示HTML文件的所有图片。

递归下载中的包含和不包含(accept/reject):

  • -A, -accept=LIST 分号分隔的被接受扩展名的列表。
  • -R, -reject=LIST 分号分隔的不被接受的扩展名的列表。
  • -D, -domains=LIST 分号分隔的被接受域的列表。
  • -exclude-domains=LIST 分号分隔的不被接受的域的列表。

跟踪和忽略选项:

  • -follow-ftp 跟踪HTML文档中的FTP链接。
  • -follow-tags=LIST 分号分隔的被跟踪的HTML标签的列表。
  • -G, -ignore-tags=LIST 分号分隔的被忽略的HTML标签的列表。
  • -H, -span-hosts 当递归时转到外部主机。
  • -L, -relative 仅仅跟踪相对链接。
  • -I, -include-directories=LIST 允许目录的列表。
  • -X, -exclude-directories=LIST 不被包含目录的列表。
  • -np, -no-parent 不要追溯到父目录。

常用选项:

  • -q 静默模式
  • -c 断点续传
  • -P /path 保存在指定目录
  • -O filename 保存为指定文件名,filename 为 - 时,发送至标准输出
    ---limit-rate= 指定传输速率,单位K,M等

范例,下载:
命令:wget --limit-rate 1M -P /data https://mirrors.aliyun.com/centos/8/isos/x86_64/CentOS-8-x86_64-1905-dvd1.iso
命令:ls /data

范例,实现浏览器功能:
命令:wget -qO - http://10.0.0.1/

3、curl

curl是一款能够依据URL语法,在命令行模式下运作的文件传输工具,其具备极为强大的功能,所支持的协议多种多样,涵盖了FTP、FTPS、HTTP、HTTPS、GOPHER、TELNET、DICT、FILE以及LDAP等等。
不仅如此,curl在诸多方面都有着出色的表现。它支持HTTPS认证,能够运用HTTP的POST、PUT等多种方法开展操作,还可以实现FTP上传功能。在认证方面,kerberos认证、用户名/密码认证它都支持,同时也支持通过HTTP上传文件。而且,它具备断点续传的能力,不管是下载文件还是上载文件都能实现断点续传。
另外,curl对代理服务器相关的功能也有着很好的支持,像支持代理服务器、cookies,能实现http代理服务器管道(proxy tunneling),支持IPv6以及socks5代理服务器,甚至还可以借助http代理服务器将文件上传到FTP服务器等,为使用者在不同场景下的文件传输等操作提供了极大的便利。

格式:curl [options] [URL...]

常见选项:

  • -A/--user-agent <string>:设置用户代理发送给服务器。
  • -e/--referer <URL>:来源网址。
  • --cacert <file>:CA 证书 (SSL)。
  • -k/--insecure:允许忽略证书进行 SSL 连接。
  • --compressed:要求返回是压缩的格式。
  • -H/--header "key:value":自定义首部字段传递给服务器。
  • -i:显示页面内容,包括报文首部信息。
  • -I/--head:只显示响应报文首部信息。
  • -D/--dump-header <file>:将 url 的 header 信息存放在指定文件中。
  • --basic:使用 HTTP 基本认证。
  • -u/--user <user[:password]>:设置服务器的用户和密码。
  • -L:如果有 3xx 响应码,重新发请求到新位置。
  • -O:使用 URL 中默认的文件名保存文件到本地。
  • -o <file>:将网络文件保存为指定的文件中。
  • --limit-rate <rate>:设置传输速度。
  • -0/--http1.0:数字 0,使用 HTTP 1.0。
  • -v/--verbose:更详细。
  • -C:选项可对文件使用断点续传功能。
  • -c/--cookie-jar <file name>:将 url 中 cookie 存放在指定文件中。
  • -x/--proxy <proxyhost[:port]>:指定代理服务器地址。
  • -X/--request <command>:向服务器发送指定请求方法。
  • -U/--proxy-user <user:password>:代理服务器用户和密码。
  • -T:选项可将指定的本地文件上传到 FTP 服务器上。
  • --data/-d:方式指定使用 POST 方式传递数据。
  • -s --silent:Silent mode。
  • -b name=data:从服务器响应 set-cookie 得到值,返回给服务器。
  • -w <format>:显示相应的指定的报文信息,如:%{http_code}%{remote_ip}等。
  • -m, --max-time <time>:允许最大传输时间。

范例,服务网页:
命令:curl -I https://www.baidu.com
命令:curl -I -A ie10 https://www.baidu.com

范例,判断网站正常:
命令:if [ "$(curl -sL -w '%{http_code}' https://www.baidu.com - o /dev/null)" = "200" ]; then
命令:if curl -sL --fail http://www.wangxiaochun.com -o /dev/null; then

4、 httpie

HTTPie 工具是一款功能十分丰富的 HTTP 命令行客户端,它具备强大的功能,能够让用户通过简洁的命令行界面与各类 Web 服务展开交互。
该工具提供了一个非常方便的 http 命令,其最大的特点在于允许用户运用简单且自然的语法,轻松地发送各种 HTTP 请求。而且,HTTPie 工具还会将输出结果以彩色的形式呈现,这样的设计极大地增强了信息的可视化效果,使用户可以更加直观地查看和分析结果。
HTTPie 可广泛应用于测试领域,尤其是在与 HTTP 服务器进行交互测试时,能够帮助用户快速检查和验证服务器的响应,为开发人员、测试人员以及系统运维人员提供了一种高效、便捷的操作方式,是在 HTTP 服务测试和交互操作方面不可或缺的得力助手。

主要特点:

  • 具表达力的和直观语法
  • 格式化的及彩色化的终端输出
  • 内置 JSON 支持
  • 表单和文件上传
  • HTTPS、代理和认证
  • 任意请求数据
  • 自定义头部
  • 持久化会话
  • 类似 wget 的下载
  • 支持 Python 2.7 和 3.x

官方网站:
https://httpie.org/

① 基本用法

httphttpie 的命令行工具,它允许你发送GET、POST、PUT、DELETE等HTTP请求。

查看帮助信息:

http --help

发送GET请求:

http www.example.com

发送POST请求:

http -f POST www.example.com username=john password=123

② 常用选项

  • --json: 发送JSON格式的数据。
  • --form: 发送表单数据。
  • --pretty: 格式化输出。
  • --headers: 只显示响应头。
  • --body: 只显示响应体。
  • --verbose: 显示请求和响应的详细信息。
  • --download: 下载请求的资源。
  • --session: 保存会话以供后续请求使用。

③ 示例

1. 发送GET请求并格式化输出:

http --check-status --pretty=all www.example.com

2. 发送POST请求并包含JSON数据:

http --header "Content-Type: application/json" POST www.example.com/users name=John age=30

3. 发送表单数据:

http -f POST www.example.com fields=name value=John

4. 下载文件:

http --download www.example.com/file.zip

5. 使用会话:

http --session=mysession www.example.com
http --session=mysession www.example.com/another-page

6. 发送带有自定义头部的请求:

http My-Header:123 www.example.com

7. 发送带有Bearer令牌的请求:

http Authorization:"Bearer token" www.example.com

8. 使用代理:

http --proxy=http:myproxy:8080 www.example.com

9. 发送文件:

http -f POST www.example.com file@localfile.txt

10. 显示请求和响应头:

http -v www.example.com

httpie 还有很多高级功能,如持久会话、自定义SSL证书验证等。这些示例只是展示了 httpie 的一些基本用法。更多高级用法和选项,可以通过查看 httpie 的官方文档或使用 http --help 命令来获取。

5、压力测试工具

  • httpd的压力测试工具:
  • ab, webbench, http_load, seige
  • Jmeter 开源
  • Loadrunner 商业,有相关认证
  • tcpcopy:网易,复制生产环境中的真实请求,并将之保存

ab 来自httpd-tools包
格式:ab [OPTIONS] URL

常用选项:

  • -n 总请求数
  • -c 模拟的并发数
  • -k:以持久连接模式测试
    注意:并发数高于1024时,需要用 ulimit -n # 调整能打开的文件数

标签:Web,http,文件,--,Session,Cookie,com
From: https://blog.csdn.net/weixin_66855479/article/details/144446377

相关文章

  • 145. 大学生HTML期末大作业 ―【垃圾分类环境保护网页】 Web前端网页制作 html+css+js
    目录一、更多推荐二、网页简介三、网页文件四、网页效果五、代码展示1.html2.CSS3.JS六、总结1.简洁实用2.使用方便3.整体性好4.形象突出5.交互式强七、更多推荐一、更多推荐欢迎来到我的CSDN主页!Web前端网页制作、大学生期末大作业、课程设计、毕业设计、......
  • linux web终端wetty食用方法
    学校有些机房电脑性能贼垃但又不得不去那些机房上课我也不想带电脑,于是弄台廉价的服务器本来想拿个公网ip配frp连我电脑完事想到vim是在终端中运行的编辑器于是想弄个web终端然后就找到了wetty别问为什么不用面板的终端面板终端没一个好用官网:https://github.com/butlerx/w......
  • 旅游网页设计 web前端大作业 全球旅游私人订制 旅游公司网站模板(HTML+CSS+JavaScript
    ......
  • polar CTF web简单
     swp提示.swp文件访问一下/.index.php.swp观察代码发现,最大回溯上限绕过preg_match构造脚本importrequestsurl='http://c7800bea-2a12-428d-b1d0-f2272162efa4.www.polarctf.com:8090/'data={'xdmtql':'sysnb'+'very'*250000}r......
  • 从零开始:如何在.NET Core Web API中完美配置Swagger文档
    目录新建项目RestFulSwagger配置注释展示版本控制Token传值方法封装新建项目打开visualstudio创建新项目,这里我们选择.netcorewebapi模板,然后输入项目名称及其解决方案创建新项目这里使用配置一些其他信息,根据自己情况进行选择:创建好项目之后我们可以看到w......
  • JavaWeb02
    1.jsp+dao完成crud操作1.1展示所有数据到网页上publicArrayList<Student>findAll(){//创建一个集合容器ArrayList<Student>list=newArrayList<>();try{//获取连接对象getConn();//获取执行sq......
  • 实战攻防中针对JS路径的泄露和Webpack漏洞的初探
    0x1前言浅谈这篇文章给师傅们分享下前段时间跟其他师傅学习和交流的Webpack相关漏洞,这个漏洞相对来说比较冷门,在web漏洞中不是那么的热度高,但是平常去挖掘和发现这个漏洞相对来说还是不难的。后面要是有机会可以给师傅们分享下油猴的相关脚本去找Webpack漏洞泄露的js敏感......
  • SqlSessionTemplate
    SqlSessionTemplate是MyBatis提供的一个非常重要的类,通常在Spring与MyBatis集成时使用。它用于简化MyBatis的SqlSession操作,并提供了线程安全的封装,以便在Spring的环境中高效地执行数据库操作。基本概念SqlSession:SqlSession是MyBatis提供的核心接口,用于执......
  • 新增支持websocket、达梦、人大金仓数据库,山海鲸数据连接大升级
    山海鲸4.4.0版本后,对数据接入功能进行了大幅的提升,不仅新增了多种类型的数据接口,还对API数据接口进行了升级,增加了更丰富的Header和Data的配置项。此外,在数据库分组中还增加了多款支持信创的国产数据库,今天就带大家来了解一下具体相关内容。数据接口我们打开链接数据面板可以看......
  • web
    Java数据库访问技术注解对比1.JDBC注解使用:JDBC是一个底层数据库访问技术,主要通过SQL语句操作数据库,不依赖注解。特点:直接使用SQL语句进行数据库操作,灵活性高代码量较大示例代码:publicclassJdbcMain{publicstaticvoidmain(String[]args){......