• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

JavaEE——Http请求和响应,httphotoshop的加密

武飞扬头像
Xiao8830
帮助1

请求

报头

里面是一系列键值对,有的是标准定义的,有的是自定义的
典型的有以下几个

Host

代表服务器的主机地址和端口
也就是当我们访问浏览器时,可以知道从哪里获取数据
端口号如果省略就代表是默认值,http是80,https是443

URL中也有端口号和IP地址,而这两者并不一定一样
当目标服务器有代理时,请求的URL的主机地址就是代理的地址,而Host中的地址是服务器的地址

Content-Length

表示body中的数据的长度
由于我们Http早起是采用TCP传输的,因此具有粘包问题,所以需要给定报文长度

Content-Type

表示body中的数据格式
不同的数据类型格式采用的解析方式是不一样的,因此需要指定
常见有以下几种类型

  1. form表单提交的数据格式
application/x-www-form-urlencoded: form
  1. 表单提交的数据格式(提交文件时)
multipart/form-data: form 
  1. json数据
application/json

User-Agent

用来表示浏览器和操作系统的一系列属性
例如一下几种

  1. 多少位系统
  2. win几的系统
  3. 浏览器的内核
  4. 浏览器的版本号
    由于早期互联网时代大家的设备差异比较大,因此不同的设备需要不同的页面显示方式,差一点的设备就少显示一点图,好一点的设备就多显示一点,不同的浏览器对页面的支持程度也是不一样的,因此通过传输这个属性给服务器,服务器就知道该给你返回什么样的页面了

Referer

代表当前页面是从哪一个页面跳转过来的
如果当前页面是直接输入地址打开的,或者从收藏夹打开的,那就没有Referer
通过Referer,可以核定一个浏览器为广告商带来了多少的引流

Cookie

由于为了防止某些恶意网站入侵我们的电脑,使得我们的磁盘中的文件遭到篡改与删除,因此浏览器的网页都是不能访问硬盘的

因此,浏览器为网页提供了一系列api,让网页存储简单的数据,cookie就是其中的一种,是服务器发送给浏览器一些简单的数据,方便网页的跳转与再次打开

cookie以键值对的形式存储数据

比如可以传下面这几种数据

  1. 当前访问网页的用户信息
  2. 当前访问的位置
  3. 访问的次数和时间

服务器的响应报文中,set-cookie的数据是设置cookie的数据,比如存储用户信息

当浏览器再次访问这个网站时,网站会把之前存储的cookie传输给服务器,这样的话服务器就得到了身份信息,就不用再次登陆了

例如,给大家抓个包,看一下前面提到的这几个概念

GET /sw.js HTTP/1.1
(这里就是主机地址和端口)
Host: blog.csdn.net 
Origin: https://blog.csdn.net
Accept-Encoding: gzip, deflate, br
(这里是cookie)
Cookie: c_dsid=11_1668321926105.806691; dc_session_id=10_1668321931278.555733; log_Id_click=794; log_Id_view=1736; Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac=1668322413; Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=1668075076,1668215971,1668304024,1668321927; c_page_id=default; c_pref=https://blog.csdn.net/; c_ref=https://mp.csdn.net/; c_segment=2; dc_tos=rl9xt8; log_Id_pv=676; Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac=6525*1*10_19406376060-1636882844312-793122!5744*1*m0_60867520; Hm_up_6bcd52f51e9b3dce32bec4a3997715ac={"islogin":{"value":"1","scope":1},"isonline":{"value":"1","scope":1},"isvip":{"value":"0","scope":1},"uid_":{"value":"m0_60867520","scope":1}}; __bid_n=183e5bc0225476c4084207; c_first_page=https://blog.csdn.net/m0_60867520?spm=1000.2115.3001.5343; c_first_ref=default; dc_sid=a39818fac3c56bf45e17bae53186475e; HWWAFSESID=1bd914e48a3f275855f; HWWAFSESTIME=1668321923442; FCNEC=[["AKsRol_XiY2H06P5Xlw3z7LQfwhl4kqvq5sIj4R2iX7vxEhCs08i5Qfm5nQ9hXeBbbv5FhhSbIwcDxwqNW-JDnQzByjf98hzA6ShijaMOwYSkJbQeQTeoHl1KMfL3s1v6Xg97Mlx6w-MMW0TDYDGmfwWd9298lo5DQ=="],null,[]]; __gpi=UID=000009711177805a:T=1662280592:RT=1668304025:S=ALNI_MadB__bBPsEbHe_0fVn_E4rh8bltA; is_advert=1; firstDie=1; ssxmod_itna=eqRxRDBDcD9AKGKGH0hC07GkQD7GeiQq8eHYImDlxQwPGzDAxn40iDto=qhnornhiY=fKnOG diGnrP0Iq7PrP5PfbnRedoD84i7DKqibDCqD1D3qDkbiYxiiDGdU8nDDx0rDG4iafmTy1pxKDUY2WrYhNk=idKeRqZAibK0GY=GWbqDrpeGG5GCh w9hzKOhNKYD===; ssxmod_itna2=eqRxRDBDcD9AKGKGH0hC07GkQD7GeiQq8eHYeD6p4QqmxDskjDLQQeOum0Dqn 48Ye/wh68e/=GKe88/O0o6m/ fh758rrDpD=sjiepaKYNxTddHs=uzUF9x1/PnyRyE6=5BypZi5yDVWw1nAirZrmNHpPaylcFVQWhLPm8VCaa3tgbL=Ww7IB80EAp3bS86E7WGfgpUfBb63dFg6K6CpcLnIWFPbiXgZmUTxq6yDwXd1YUKkkRNXeexhrY3ZPeY7eKmD1h3AhGrEOb=h9TeFuDiDwgxPT1Kpnw9cE2c6/rKugaZmw1zE5GBdj0dCoQifoCO8omYOqbxhd3GiKY3orx3uYN2DcEopwiHgGTbhKwaertrwrc3dCQowLKjwizeKO8YN2CRqKwLoAMdkTidrT/MdWdKx6K5RHF2O83H Rkdo7HbOc bi67WcE=pEFmLt2k1ZpeOvwpApP=CoArbjCOC1a64oPD7jgDGcDG7uODNDx8TDD==; __gads=ID=4ea7d0a4ecd37ee1-2235438dd8d70085:T=1667202525:RT=1667202525:S=ALNI_MaMuEad1hYwTDZx_QZCGwFd0sQKhw; FPTOKEN=30$MopefTes oZpPK6toPAhBx51Jkf9qoNou5sQ5nIqneIX4PhBtpAsxtEBc76AQs9WOaJjwxItblyB8EW/sLxs5T0I/kL/KjtpLbx6pk/ojEIhGiQzqoGscV8k9FHd4HmCpud/RXGieejdSIq95AICEhi1Erl95ummz/XBzvkWzFjSgo /txL4p5ETCor0ixhOlDaIgbhfR2JBIHMSmhtQ JbbP1LrdVB2 wxtLITOnssE02CuNBj0Gy/E/xsjoXQnuC/mIVOTaUEIRRaDkxOR6fOy/n50FWt84MYUuC26etIhLyJ9pVxZP3ss6H/fXqEzgrfgv4AiRzMR wcHhU5cSCLlOdSislMsyQqKnLonQyEGR683E6xMtOl8CgDMZi yTzZr6n5vMwHih5kMA2ZualamIb1KhHtyCrz/OzfeDMc=|2t9hFLuiMkraJiWOrBtyMNOEfpEtZpoKTRFhp0enI3o=|10|54642beb2d74356187b795abbc93d44c; c_dl_fpage=/download/u012513463/77747331; c_dl_fref=https://blog.csdn.net/qq_24950043/article/details/125714225; c_dl_prid=1665566040391_574973; c_dl_rid=1666093978240_243831; c_dl_um=-; AU=E5A; BT=1660286910129; UN=m0_60867520; UserInfo=1dd1ec314c054470a954e82931020212; UserName=m0_60867520; UserNick=Xiaolock830; UserToken=1dd1ec314c054470a954e82931020212; p_uid=U010000; uuid_tt_dd=10_19406376060-1636882844312-793122
Connection: keep-alive
Accept: */*
(这里是浏览器和操作系统的信息)
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Safari/605.1.15
Accept-Language: zh-CN,zh-Hans;q=0.9
(这里是浏览器跳转前的地址)
Referer: 
Service-Worker: script

构造http请求

有以下几种不同的构造方法

  1. 浏览起自己通过url构造请求
  2. form表单
  3. ajax

form表单

只支持get和post方法
其中的action表示要访问的网页
input中的name是键
input中的用户输入的值是值,和name构成键值对
如果是get请求,就将键值对放到url中,如果是post就放在body中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="http://www.sogou.com" method="get">
        <input type="text" name="aaa">
        <input type="text" name="bbb">
        <input type="submit" value="提交">
    </form>
</body>
</html>
学新通

最终的url长这样
学新通
如果是post方法,那我们只能用抓包工具来看body中的内容了

ajax

全称是Asynchronous Javascript And XML
其中的Asynchronous代表异步的

在之前的多线程中讲的同步(synchronized)表示的是互斥
而在网络通信中,同步代表发起请求者同时也接受响应,异步代表发起请求者不接受响应,由其他的人来推送过来

form的请求一定会触发页面的跳转
ajax的请求默认不会引发页面跳转

由于浏览器的原声ajax的api不好用,因此我们可以引入jquery,这个第三方库封装好的api更好用
jquery直接上网搜索即可,选择.min.js,复制其script标签
学新通

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.min.js"></script>
<script>
     $.ajax({
         type: 'post',
         url: 'http://sogou.com',
         data: 'http请求的body',
         contentType: 'x-www-form-urlencoded',
         success: function(body){
             //浏览器返回正常响应时调用这个函数,body为响应正文
             console.log('ok');
         },
         error: function(){
             //浏览器返回错误响应时调用这个函数
             console.log('error');
         }
     });
 </script>
学新通

使用这种方法在浏览器中会看到报错,这是因为默认情况下域名a是无法访问域名b的资源的,也就是说搜狗拒绝了我们的访问。如果我们的项目是在同一个服务器下相互访问的就不会报错

这种情况下,我们可以用postman来进行测试,这是一个专门用来构造请求的工具,方便了我们的测试

响应

状态码

我们上网常常看到的404网页就是一个状态码,表示了请求的状态,可以告诉我们请求是否成功,为什么失败
最常见的状态码有以下几种

类型

号码开头 类型 原因.
1xx 信息性状态码 接收的请求正在处理
2xx 成功状态码 请求正常处理完毕
3xx 重定向状态码 需要附加操作以完成请求
4xx 客户端错误状态码 服务器无法处理请求
5xx 服务器错误状态码 服务器处理请求出错

具体实例

200

表示访问成功
大家抓包时看到的最多的响应的状态码都是200

404

not found
产生错误的原因就是请求的路径错了
访问的资源服务器上没有了,就会返回404

403

表示访问访问被拒绝
也就是我们的访问权限不够,只有管理员或者特定的用户才能访问这个网站

500

表示服务器内部错误
也就是服务器里有bug,比如说空指针异常了,我们很少见到,除非是自己写的代码

504

表示访问超时
如果服务器的访问流量过大,就会出现访问超时的情况

302

表示重定向
如果以前的网站的域名不用了,换成了新的域名,就需要重定向,还有我们的网页跳转也是重定向

418

是一个彩蛋,418I’m a teapot
在许多年前,电脑上安装一个软件,很有可能安装下来的根本就不是你想要的那个软件
这是因为,运营商劫持了我们网上传输的数据,替代了新的数据给我们
为了防止这种事情发生,也为了防止黑客对我们数据的入侵,因此发明了更为安全的传输协议——HTTPS

加密

加密是指用密钥把明文变成密文
与之对应的,解密就是把密文变成明文

对称加密

而当一个服务器想要让客户端把传输过来的用户信息进行加密时,双方都要知道这个密钥是什么,这就是对称加密。但显然,你这个密钥被更多人知道,你的信息被破获的概率就更大,因此一个服务器给不同的客户端不同的密钥
但这样的话,服务器就需要同时掌握多个密钥,一个一个地进行匹配,大量的浪费了资源

不对称加密

因此,根据数学上的一系列规律,发明了不对称加密,客户端的密钥是不同的,而服务器只用一个密钥就可以把所有的密文破解为明文,客户端拿到的是公钥,这个公钥告诉谁都可以,而服务器拿到的是私钥,这个私钥只能自己持有

但是,如果黑客先冒充客户端,向服务器获取了公钥,再冒充服务器,向客户端提供了自己篡改后的公钥。这时,客户端传输过来的数据就是按照黑客的钥匙加密的数据了,黑客就可以看了。而且还可以用之前获取的公钥对明文重新加密成正确的格式,发送给服务器,使服务器与客户端之间正常的工作

证书

证书是为了保证公钥是服务器提供的而不是黑客提供的
第三方公证机构会给各个服务器的资质进行审查,然后颁发证书
客户端在向服务器获取公钥前,会先对服务器获取证书,然后看这个证书是否合法,然后才会进行传输数据
因此,如果是没有证书的网站,浏览器会警告我们这个网站很危险,也有时候会告诉我们这个网站的证书过期了

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgeijjc
系列文章
更多 icon
同类精品
更多 icon
继续加载