大连密封材料 发表于 2024-6-20 19:43:04

应用层——HTTP协议(本身实现一个http协议)——客户端(浏览器)的哀求做

应用层:之前我们写的创建套接字,发送数据,序列化反序列化这些都是在写应用层
   我们步伐员写的一个个办理我们实际题目, 满足我们日常需求的网络步伐, 都是在应用层
之前的网络计算机是我们自界说的协议:传输的数据最终是什么样的结构!是如何举行序列化反序列化的,
而对于我们的应用层我们已经有了非常完善的协议:
   虽然我们说, 应用层协议是我们步伐猿本身定的. 但实际上, 已经有大佬们界说了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用.
HTTP(超文本传输协议) 就是其中之一.
当我们在浏览器(相称于客户端)使用URL(网址)去访问我们的服务器的时间就可以以http协议的方式对服务器发送哀求,服务器也可以以这样的格式给我们发送响应:
URL:在浏览器用它就快速的向服务器发送一个哀求(相称于一个客户端)
https://img-blog.csdnimg.cn/direct/04a40b53dfb042f195c67bcdc536b1b5.png
http哀求:
https://img-blog.csdnimg.cn/direct/563464a830af43fb9d151c7d04c48753.png
http相应
在服务器收到http哀求后:反序列化,然后再对哀求做处理,得出效果,然后把效果也按照http协议的结构储存,序列化,发送回给客户端(给客户端响应):
https://img-blog.csdnimg.cn/direct/8712436567604787864601ca7f7adbea.png
自写一个能够收发http哀求的服务器(进程),而且自界说一个本身的http协议(结构体字段):

服务器的代码编写:
1.创建监听套接字,绑定相应的网络信息(ip和port)。
https://img-blog.csdnimg.cn/direct/0cbb4f3edd72497ebb10dabe2b39d059.png
启动服务器:监听套接字监听哀求,监听到哀求后,创建了新的套接字来供于这次哀求的对家,并创建新线程来完成对哀求的处理:
https://img-blog.csdnimg.cn/direct/11a7d1df347c4614aded9d54441134b3.png
ThreadRun:对线程的处理:接收字符串型的哀求,并对他做反序列化(用我们自界说的http协议来反序列化):
https://img-blog.csdnimg.cn/direct/32715f7a7270460dab9a940558b0a3df.png
htttp哀求不仅可以向服务器哀求html的文本,还可以向服务器哀求图片,视频等资源,以是他叫超文本协议,
以是http响应的kv字段中另有一个TYpe所传文本范例的字段

https://img-blog.csdnimg.cn/direct/de9353b9d13b41ca88881da762cf7529.png
哀求方法:
http常用的两种方法:GET /POST
主要作用:客户端(浏览器)不仅可以向我们的服务器获取资源,而且还可以传参
这两种方式的区别就是传参的方式不同。
这两中方式的传参是通过html文档中的form表单来完成的,当我能哀求的html文档中有form表单是,我们的客户端就可以传参
GET:
所传参数会被拼接到URL中,向服务器发送哀求传参
https://img-blog.csdnimg.cn/direct/60d07871f19e4df0a6477608f32ccfe4.png
https://img-blog.csdnimg.cn/direct/56eb023242b5451ea7de406e6674f731.png
POST:
所传参数会被保存到哀求的有用载荷中,只有参数所要传到的那个路径会被拼接到URL中:
https://img-blog.csdnimg.cn/direct/a4e3c63458d14faeac2e04858cf76b32.png
https://img-blog.csdnimg.cn/direct/794b417922e345dd8c0ee53f00497ed5.png
get vs post
https://img-blog.csdnimg.cn/direct/a6e5a90740f94b7fa3ecd41a8fdc309d.png
两种方法其实都不安全,纵然post的参数会被放到哀求的文本中保存,但是通过抓包仍旧可以完全的看到。
https://img-blog.csdnimg.cn/direct/6b5056d64a7d4a56ab695f53a869c06a.png
HTTP响应结构

通过对http哀求的分析,创建出http响应结构,然后再序列化后发送回客户端。
https://img-blog.csdnimg.cn/direct/4ef0176be8904581a0cd51501f46326d.png
1、构建响应结构
https://img-blog.csdnimg.cn/direct/5e6b16d0c783483a8c229872ba9b00b3.png
构建header内容
然后把哀求的内容放到有用载荷中
响应的一些特性:
301:重定向

我们把状态码设置为301的话,然后在header字段中添加:
std::string location=“Location:http://www.qq.com\r\n”;
当我们服务器返回这样的响应的时间,就不会去访问有用载荷中的网页,而是马上去访问location中的链接网页
https://img-blog.csdnimg.cn/direct/bf1c3d4e545841e0b133acedf0d20e56.png
原理图:
https://img-blog.csdnimg.cn/direct/4f5dfaf9032d4fb9baf54d84c212cee5.png
http响应的一些状态码,及其寄义:
https://img-blog.csdnimg.cn/direct/f835ce7508c54c8e9d8abe41f76a1d7c.png
http协议的特性:

cookie文件和session结构
1、无毗连:是不要去链接的而是双方都定好此协议(我们所写的套接字的监听和链接是底层的,不是http协议)
2、无状态:每次哀求都是独立???
但是为什么我们有的网站登录之后下一次就不在去哀求登录了呢?
由于:如果我们获取到登录页面之后,然后把登录信息填好后再次哀求发送给服务器之后,服务器的登录乐成响应会header字段为我们添加Set-Coookie字段返回给客户端(浏览器),浏览器有一个cookie文件,可以保存响应回的这个字段,当浏览器再次去访问这个服务器的时间,http哀求中的header字段就会携带cookie这样的哀求字段,服务器就会根据这个字段自动认证
https://img-blog.csdnimg.cn/direct/9d2aa8d1cfc44f2fa933ceea15203bf7.png
https://img-blog.csdnimg.cn/direct/5019a514eada4a3c96efd8f0bd6e2945.png
但是这样的直接保存到浏览器的cookie中的用户信息是私密铭感信息,以是我们的服务器要把登录页面发送来的用户信息做封装,最后生成一个独有的编号返回给登录乐成的这个客户端使用,这样虽然制止了用户直接信息暴露到浏览器的cookie中,防止了别人直接登录,但是别人任然可以通过编号来直接哀求访问服务器,因此服务器就必要做一些登录地理位置之类的验证,但是这样的题目还是不能得到完全的办理的。
https://img-blog.csdnimg.cn/direct/4513ed9241bb40489d28f5407b77eaa6.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 应用层——HTTP协议(本身实现一个http协议)——客户端(浏览器)的哀求做