ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HTTP报文一些基础知识大杂烩混讲

2021-07-07 11:52:11  阅读:125  来源: 互联网

标签:HTTP 请求 报文 http 代理服务器 token cookie 混讲 浏览器


 

文章目录

 

HTTP报文学习部分

一.HTTP请求报文格式

1.简介:

http超文本传输协议

2.请求报文格式

在这里插入图片描述
有四部分组成:请求行,请求头部,空行,和请求包体,请求行对应着chrome中的general中的字段,请求头部对应着request header,空行,请求包体对应着传过去的json等数据

请求行:request method请求方法,request url请求url,referrer policy协议版本

3.其他

Get方法要求服务器将url定位的资源放在响应报文的数据部分,回送给客户端
请求头中,user-agent表示请求的浏览器类型,accept表示接受数据类型,一般是*/*表示所有类型,accept-language表示客户端接受的语言类型,accept-encoding表示客户端接受的编码格式,accept-charset表示接受的字符集,host表示主机名,connection表示连接方式要么close要么keepalive,cookie存储于客户端的扩展字段,向同一域名服务器发送属于该域的cookie,content-type表示包体类型,不写这个默认是某种键值对形式而不是json形式,content-type请求包体长度
请求头和请求包体中的空行表示告诉服务器没有请求头了

二.HTTP响应报文格式

1.简介:

与http请求报文类似,也是有4个部分组成,每部分之间使用\r\n解分割

2.响应报文格式

在这里插入图片描述
分为响应行,响应头,空行,响应体
响应行中有http版本,状态码,原因短语
响应头中有键值对
空行中有\r\n
响应体中有响应数据

3.其他

实际上在chrome中的general中既包含了请求行又包含了响应行,response header响应头,request header请求头,request payload传json的请求体

三.Chrome学习

一.Network学习
1.发出众多请求列表中
  • Name 资源名称,点击名称可以查看资源的详情情况,包括Headers、Preview、Response、Cookies、Timing。
  • Status HTTP状态码。
  • Type 请求的资源MIME类型。
  • Initiator 标记请求是由哪个对象或进程发起的(请求源)。
    o Parser: 请求由Chrome的HTML解析器时发起的。
    o Redirect:请求是由HTTP页面重定向发起的。
    o Script:请求是由Script脚本发起的。
    o Other:请求是由其他进程发起的,比如用户点击一个链接跳转到另一个页面或者在地址栏输入URL地址。
  • Size 从服务器下载的文件和请求的资源大小。如果是从缓存中取得的资源则该列会显示(from cache)
  • Time 请求或下载的时间,从发起Request到获取到Response所用的总时间。
  • Timeline 显示所有网络请求的可视化瀑布流(时间状态轴),点击时间轴,可以查看该请求的详细信息,点击列头则可以根据指定的字段可以排序。
二.Application学习
1.这里主要记录网站加载的所有资源信息,包括session的存储,web sql以及cookie,图片,字体等
  • storage
    – local storage在html5中加入了local storage新特性,这个用来做本地存储用的,解决了cookie存储空间不足问题,cookie中每条cookie存储空间为4k,local storage可以将第一次请求的数据直接存储到本地,这个相当于一个5M大小针对于页面段的数据库,只有在高版本的浏览器中才支持,它值限定为string类型,本质是字符串读取,若存储内容多会消耗内存,local storage不能被爬虫爬到
    – session storage它与local storage的唯一区别是local storage属于永久性存储,但是这个属于会话框结束时候,session storage键值对会
    – IndexedDB
    – Web SQL
    – Cookies name是cookie的名字,value是cookie的值,domain是关联的服务器,path是指web页接口,Expires/Max-Age是指有效时间截止,size大小,
  • Cache
    – Cache Storage
    – Application cache可以使用application catch窗格式去查看通过application cache api创建的资源
  • Frames将页面上的资源按照frame类别进行组织显示

HTTP代理服务器

一.简介

工作在开放式系统互联osi中的会话层,起到防火墙的作用,代理服务允许一个终端和另一个终端在这个服务上进行非直接相连,也就是说一个终端通过自己与代理服务器建立联系,再与将代理服务器与远程终端建立联系,而http代理服务器就即时web服务器又是web客户端。fiddler就是典型的代理,它以代理web服务器的形式工作,使用127.0.0.1端口8888,fiddler退出会自动注销代理,http代理服务器可以删除始发端http报文中的的IP地址,cookie,uri的会话id,进而可以对远端服务器隐藏原始用户的ip以及其他细节,http代理服务器上也不会记录原始用户访问记录的log。由于大部分的代理服务器具有缓存功能,因此就可以大大增加浏览器速度。通过代理服务器也可以有效避免特定人群访问特定内容。Pac文件一个小型js写的后缀为.dat的文件,浏览器访问时,会根据pac中的js函数爱选择恰当代理。代理实际上也需要权限验证,有一种代理验证机制,当浏览器访问需要认证的代理时,代理服务器会返回407授权需要让浏览器输入用户名和密码,成功后返回200 OK。代理服务器实际上能看到http请求信息,通常使用https来加密http request,这样代理服务器就看不到用户发送请求数据了。实际上打开fiddler软件就相当于本机同意了默认端口号为8888的连接远程fiddler的服务器的代理,可以通过这种当时验证:打开fiddler之后在浏览器中输入127.0.0.1:8888

二.常见实例

1.fiddler代理:

实际上打开fiddler软件就相当于本机同意了默认端口号为8888的连接远程fiddler的服务器的代理,可以通过这种当时验证:打开fiddler之后在浏览器中输入127.0.0.1:8888,相当于本机访问代理,之后fiddler那边提供的代理服务器再回送本机http请求,出现200返回码,这是当把fiddler关闭,也就是相当于自动注销了代理,这个是在浏览器中输入127.0.0.1:8888是没有反应的

2.chrome抓取请求

实际上chrome浏览器的调试工具中抓取请求实际上也是代理,只不过chrome浏览器会自带一个代理管理插件SwitchySharp,无论直接连接还是代理连接,插件会自动屏蔽fiddler设置

HTTPS

一.简介

1.http和https区别:

http协议以明文方式进行传递,当传输一些敏感信息,http传输协议显得不安全,为了数据安全,https在http基础上加了ssl协议,ssl依靠证书来验证服务器身份,并为浏览器和服务器间通信进行加密,https协议主要作用一是建立信息安全通道,二是确认网站真实性,http默认80,https默认端口443

二.https工作原理

在这里插入图片描述
掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的***,但HTTPS仍是现行架构下最安全的解决方案

HTTP请求中常见字段

一.Cookie

1.简介

cookie是在http协议下,由web服务器保存在用户浏览器上的小文本文件,网景公司规定了cookie草案,规定了了Set-Cookie的写法,不同浏览器存cookie地方不同

2.Set-Cookie结构

由服务端在响应头通过Set-Cookie传cookie字段过去,结构如下面:

Set-Cookie:customer=huangxp; path=/foo; domain=.ibm.com;

expires= Wednesday, 19-OCT-05 23:12:40 GMT; [secure]

(1)其中customer=huangxp是名称等于值的形式,这个在cookie中必须得有

(2)path=/foo控制哪些访问可以触发cookie发送,若没有指定path,那么cookie会在所有对此站点的http传送时发送,这里是只有访问/foo下的内容时候,cookie才会被发送,若指定了path,但是path和当前访问的url不一致,这时cookie被忽略

(3)domain=.ibm.com指定了cookie被发送到哪台机子上,这里cookie会被发送任何在.ibm.com域中的主机,若domain为空,则domain就会被设置成提供cookie的服务器一样,若值和不为空又和提供cookie的web服务器域名不符合,这个cookie被忽略

(4)expires= Wednesday, 19-OCT-05 23:12:40 GMT指定cookie失效时间,若没指定失效时间,这个cookie就会持续到会话结束

(5)secure若此次作为Set-Cookie头中的一部分,那么cookie只能通过安全通道传输,即ssl通道,否则浏览器忽略此cookie

3.大致流程介绍

Web服务器保存的数据在用户浏览器上面就是cookie,通过响应头中的Set-Cookie字段传过来,请求头中添加上这个Cookie字段,指定cookie的失效时间。持久的cookie将内容保存在你的电脑硬盘中,浏览器发送本地cookie给服务器,web服务器返回Set-Cookie给浏览器,会话cookie随着session结束也就结束了,而持久cookie则保存在电脑硬盘中,平常登陆时候实现下次登录不用输入用户名密码就是可以cookie的功劳,因此就出现了不知道他人密码但可以截获他人cookie的xss脚本***,获取他人电脑上cookie文件***

4.cookie的生成

由于http协议实际上是无状态的,非持久的连接,用户通过一段生成cookie的代码生成cookie于浏览器的响应头中,此时要是访问服务器中全局cookie,会发现为空,此时客户端还没有把cookie传到服务端,第二次访问这个页面时,浏览器自动把cookie信息传到服务端

下面图片显示客户浏览器先登录成功后,服务端将产生的token通过响应头的cookie传给客户浏览器,客户浏览器中保存有cookie,再次访问网址时候,会自动传cookie放在请求头中,将请求头中的token与数据库中的用户信息相互匹配,若匹配成功则实现自动登录
在这里插入图片描述

二.token

1.简介

token有有效期,重新登录刷新token后,之前的token可能也不会短期失效,

2.token的产生

token是在服务端产生的,被服务端在响应头中返回,然后以后请求在请求头中设置token即可

3.token原理以及拓展

当用户输入正确用户名和密码后,服务端调用生成新token的代码,每次登陆成功后都要更新用户token值,然后通过响应头装进Set-Cookie中回传给客户浏览器,然后这个token封装进cookie中,保存于本地浏览器中,每次访问其他请求会自动在请求头中带上封装有token的cookie,其他请求把这个cookie传过去后,在服务器那边这个cookie中的token值会匹配数据库中的信息,匹配到了正确的用户信息就会让请求正常访问,否则请求被拒绝

4.token加密方式

三.sessionId

1.简介

由于http是面向无连接的,所以第二次请求发过来,服务器不晓得是谁发的,session保存在服务端,而sessionId通过存放在cookie中来传输,sessionId在服务器端产生对应着登陆的账号,也就是对应着token信息,之后每次请求投中传这个cookie(cookie中包含有sessionId),服务端拿到这个sessionId看是否正确,并且找到匹配的账号

2.token和sessionId区别

有人会想为什么用token,好好的用sessionId不行吗,这就是新技术和老技术的论战,token进行了公钥密钥相关加密操作

四.uuid与guid

1.uuid简介

一个由4个连字号(-)将32个字节长的字符串分隔后生成的字符串,总共36个字节长。比如:550e8400-e29b-41d4-a716-446655440000

UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字

UUID由以下几部分的组合:

(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。

(2)时钟序列。

(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。

UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID

2.guid简介

微软对UUID这个标准的实现。UUID是由开放软件基金会(OSF)定义的。UUID还有其它各种实现,不止GUID一种。比如我们这里在Java中用到的。

 

标签:HTTP,请求,报文,http,代理服务器,token,cookie,混讲,浏览器
来源: https://blog.51cto.com/u_13281972/2999370

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有