HTTP协议的相关事项

HTTP协议报文格式=》抓包工具(fiddler)

请求:          

GET https://www.fiddler2.com/UpdateCheck.aspx?isBeta=False HTTP/1.1     1.首行
User-Agent: Fiddler/5.0.20211.51073 (.NET 4.8; WinNT 10.0.22621.0; zh-CN; 8xAMD64; Auto Update; Full Instance; Extensions: APITesting, AutoSaveExt, EventLog, FiddlerOrchestraAddon, HostsFile, RulesTab2, SAZClipboardFactory, SimpleFilter, Timeline)
Pragma: no-cache
Host: www.fiddler2.com
Accept-Language: zh-CN
Referer: http://fiddler2.com/client/TELE/5.0.20211.51073
Accept-Encoding: gzip, deflate
Connection: close

2.这一大段是请求头

3.空格

4.正文(body)

一.首行

(方法)        (URL)                                                                                    版本号

    GET     https://www.fiddler2.com/UpdateCheck.aspx?isBeta=False          HTTP/1.1

请求就是客户端给服务器的发起的一个数据,这里要明确输出要访问的服务器是啥,要访问的服务器资源是啥   

URL,JDBC唯一的资源定位符,用来描述网络上的资源

服务器地址:可以是IP地址,也可以是域名

     可以是外网IP(本身就是唯一的)

     也可以是内网IP(访问局域网中的设备)

     还可以是环回IP(访问自己)

服务器的端口号:端口号用来区分应用程序

带层次的文件路径:访问服务器上的资源

查询字符串(query string):访问资源的时候,带上资源的参数(补充说明)

他是键值对的格式,键值对之间用&来分隔,键和值之间用=来分隔,查询字符串以?开始

都是程序员自定义的

片段标识符:不太常见主要是文档类的网站中能够看到

比如:我去卖熏肉大饼   在学校二楼的18号窗口    

http://学校二楼:18/猪肉的熏肉大饼?辣椒=少放&葱=不放(针对对象的补充说明)

实际上URL有些部分是可以省略的

IP地址/域名省略:相当于访问当前服务器的地址

比如:访问B站的主页,请求里面必须要有bilibili域名,响应就是bilibili主页的HTML,这里HTML又又会触发其他http的请求,这些后续触发的http协议可以省略IP,省略IP就相当于使用和之前一样的bilibili HTML一样的IP

端口号也可以省略(相当常见)省略时浏览器会自动加上端口号(这个端口号表示访问服务器目标的那个端口)

注意:http的端口号是80    https的端口号是443

带层次的路径也可以省略

比如:https://www.sougou.com/  这里/表示带层次的路径,也就是根目录(目录结构,树形结构,根目录,就相当于树根一样)

服务器提供的资源也类似于目录结构一样,树根结构来组织

query string 中有一些特殊字符,这些字符,可能在URL中有一些特殊的含义,就会导致服务器解析失败,经过urlencode 就不会出现特殊字符含义的符号,这样浏览器才能正确识别

urlencodede 转换规则:把要转换的二进制的每个字节,都是用十六进制表示出来

方法:GET(获取资源)最常用的

POST(传输实体主体)其次

PUT(传输文件)  HEAD(获取文件首部)DELETE(删除文件)OPTIONS(访问支持的方法)

TRACE(追踪路径)CONNECT(需求用隧道连接代理协议)LINK(建立和资源之间的联系)

UNLINE(断开连接关系)

GET:从服务器中获取一样东西

POST:向服务器传输一样东西

虽然设计之初是这样想的,但是事于愿伪,事实上GET和POST不一定遵守这样的规定

GET https://www.sougou.com/HTTP/1.1   GET请求一般没有body

POST请求一般常见的场景:

1.登录

POST https://appstore.browser.qq.com/getMiniBrowserUpdateConfig HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0) QQBrowser/9.0
Host: appstore.browser.qq.com
Content-Length: 169
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: uin_cookie=3465932224; euin_cookie=B53474F3F470D8BD0C2D93F658A0B0FB7A377112FD377041; euin_cookie=B53474F3F470D8BD0C2D93F658A0B0FB7A377112FD377041; uin_cookie=3465932224

{
   "COS": "10.0.22621",
   "CVer": "",
   "ExeVer": "",
   "GUID": "8d04eabef3a45c68e5b8af87722cb623",
   "QID": 16785447,
   "QQVer": "",
   "osDigit": 64
}

post请求会带有body,body前面的空格相当于分隔符,分割了Header和body,描述了body是从哪里开始的,body的格式有很多种,上述就是JSON,在登陆中这里就包含了登录账号和密码,这里的密码是加密的,不是明文

2.上传

他的body就是把个图片都进行转码,转成字符串

POST和GET的主要区别

GET是把一些数据放到query string中,body为空     

POST是吧一些数据放到body中,query string为空 

注意:放在query string用户可以看到(浏览器收藏夹也能收藏)

            放在body用户看不到(收藏夹不能收藏)

总的来说GET和POST 没有本质上的区别,从习惯上来看GET把数据放在query  string中,POST把数据放到body中

二.请求头

Header的整体个是是键值对,每个键值对占一行,键和值之间用分号分隔

键值对主要是标准规定的

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0) QQBrowser/9.0
Host: appstore.browser.qq.com
Content-Length: 169
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: uin_cookie=3465932224; euin_cookie=B53474F3F470D8BD0C2D93F658A0B0FB7A377112FD377041; euin_cookie=B53474F3F470D8BD0C2D93F658A0B0FB7A377112FD377041; uin_cookie=3465932224

Host:表示服务器主机的地址和端口,通常情况下URL和Host里的内容是一样的

Content-Length(解决粘包问题):描述了body的长度,如果有body的话必须要有,Content-Length,否则就是非法访问,如果没有body的话,就可以没有Content-Length

Content-type:body的数据格式

请求中常见的取值:1)application/x-www-from-urlencode  2)multipart/from-data   3)application/json

响应中常见的取值:1)text/html  2)text/css  3)application/javascript   4)application/json  5)image/pang......

User-Agent:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0) QQBrowser/9.0

Windows NT 10.0:操作系统的版本

这个属性主要是包含当前机器系统和应用程序的版本

作用:因为互联网的快速发展,所以会更新代换很多版本,为了使每个版本都能够使用,因此想了个办法,就是浏览器在发起http请求的时候,向服务器自报家门,告述服务器,我是使用哪个系统的,啥浏览器上的网,服务器就根据这个信息来分别对待(兼容)

UA现在主要来区分是PC端,还是移动端

Referer(明文传输) :描述了当前页面是从哪里来的

如果是通过浏览器地址来直接输入url/点击收藏夹 打开的网页,这个请求是不带referer

如果你是点击了某个网页的页面的内容产生了跳转,就是带referer

比如:搜狗平台上要放广告主的广告,有很多的广告主,这里用户会点击不同的广告,区分每个广告主的广告点击的次数就要用referer,又因为referer是明文传输,因此可能会有运营商来修改广告的次数,所以就需要用到后续的https来进行加密

Cookie:是浏览器本地存储数据的一种机制(主要的保存机制)

比如:再看视频的时候勾选关闭弹幕下次就不用再勾选关闭弹幕,这些临时数据就是保存在Cookie中,但是换个电脑之后这些数据会消失

在浏览器访问服务器的时候是对服务器一无所知的(你的浏览器是没有任何和服务器有关的内容),浏览器拿到这些数据(返回的很多数据 html,jsonmcss,js,图片)后就可以展示到页面上了与此同时,在用户拿着网页,在操作过程中,也会产生很多临时性的数据这些临时性的数据,有时候是被放到服务器这边储存(下次就可以直接获得了,换电脑了也有效),有的不太重要,就直接放到浏览器这边储存(下次访问的时候也可以直接获得,但是换电脑了就没了)

目的:浏览器要保存东西,直接写入一个文件放到硬盘中是不行的(因为让网页轻易的访问文件系统是非常危险的,为了保证安全,浏览器对页面的功能做出限制,其中一个就是禁止访问硬盘),所以为了保证安全同时又能存储数据,浏览器就提供了一个Cookie功能(就是键值对的方式存储的字符串,这些键值对往往是服务器返回来的,浏览器把这些键值对按照域名的维度来存储)

构造请求头:

1.用HTML中的form标签(表单)构造http请求

<body>  

                                URL                               方法

    <form action="https://www.sougou.com" method="get">

        <input type="text" name="aaa">

        <input stype="submit" value="提交">

    </form>

</body>

2.用ajax来构造http请求

Ajax是异步的(通过代码,发出http请求,请求发出去后,js代码就继续往下执行了,当服务器响应回来之后,就会自动的通知到我们的代码中 ,进一步就能处理响应了)

响应:

HTTP/1.1 200     1.首行
Date: Wed, 04 Oct 2023 02:29:28 GMT     2.响应头
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
X-Request-ID: 835a48545a1e59eeb59dfa0df5142fc6
Server: api-gateway
Access-Control-Allow-Origin: *

3.空行

51
{"errorCode":"SVCSTG.ALS.200.200","errorMessage":"Report success.","result":null}
0

4.body

版本号       状态码           状态码的描述

HTTP/1.1    200         

状态码:

200:成功

404(NOT FOUND):访问的资源不存在

403:访问的资源没有权限

502:服务器挂了

504:服务器超时了

302:重定向(服务器会跳转到其他的页面上)

HTTP的重定向:比如:使用浏览器访问一个www.aaa.com的url,此时请求发送给对应的服务器,结果服务器发给你一个302,同时告述你,你要去访问www.bbb.com这个网站,这是浏览器收到响应后就会跳转到www.bbb.com这个网站中

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值