TCP与Http

TCP

一个Tcp连接由一个四元组构成,它们分别是两个IP地址和两个端日号。更准确地说,一个TCP连接是由一对端点或套接字构成,其中通信的每一端都由一对(IP地址,端口号)所唯一标识。

一个TCP连接通常分为3个阶段‥启动、数据传输(也称作“连接已建立”)和退出(关闭)。

socke :有两种 一种是服务监听得socket 可以得到客户端建立得连接 server.accept()
一种是连接的socket 可以获取数据和发送数据 send recv

主机分为 用户空间和内核空间

TCP三次握手和四次分手

当应用程序启动之后,会建立LIstion 状态监听的状态 此时没有建立连接 会产生一个socket 监听对应的端口号 有对应的接收 Recv-Q 和发送 Send-Q 队列 。服务端启动监听 未来主机收到数据包,目标端口号是 () 就知道消息给谁
等待程序接受的连接 (一台服务器启动listion之后会占有一个端口号 客户端会先完成TCP三次握手是内核空间完成的连接 连接释放被程序拿过去使用 )
在这里插入图片描述

两个队列:一个是保存已经建立连接的socket,建立三次握手之后把socket四元组放入到accept队列中,然后由应用程序去队列中获得连接。进行收发数据(ESTABLISH-SOCKET)。
队列的限制:backlog参数,队列中可以存放多少不被取走的

IO模型:BIO:server.accept() 阻塞等待返回NIO:server.accept() 立刻返回 (1,0)
多路复用器:select、poll、epoll,只是调用后知道了对应的socket是否有事件,然后再进行处理,去队列accpet。

Http

http 属于应用层协议。https:http+ssl(ttl) -> 对http进行加密 也就是对它的内容体实行加密算法进行加密
网络和应用层之间搭的一个协议 ssl

Http:超文本传输协议 :头部+内容体
头部:请求地址,方法,参数,内容长度,内容的类型
内容:文件

Http请求头和响应

访问baidu.com 的例子

RequestHeaders

隐藏了请求方式 GET/POST… URL、 协议 版本

// Accept  我请求了这个地址  我能接收到的参数(希望)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate, br  //解压方式
Accept-Language: zh-CN,zh;q=0.9		// 语言 中文 英文...
Connection: keep-alive		// 在Http1.1 出现  1.0的时候:每次都需要建立tcp连接   1.1建立一次持续连接一段时间  tcp里的keep-alive字段  保活
// Cookie 
Cookie: BIDUPSID=634F0B9DEEA8E848BDEED52299A82E06; PSTM=1628756563; BAIDUID=634F0B9DEEA8E848C3635FB0CF780C32:FG=1; BAIDUID_BFESS=634F0B9DEEA8E848C3635FB0CF780C32:FG=1; BDUSS_BFESS=jZxV2dYc2llM0UtU2VwRWJUQ0NobWdWU0phflZrLX5kR1RNM3JaMWxCNFlCTUJoRUFBQUFBJCQAAAAAAAAAAAEAAAD8QPxbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABh3mGEYd5hhW; Hm_lvt_aec699bb6442ba076c8981c6dc490771=1641614480; COOKIE_SESSION=4667490_5_7_9_8_9_1_0_5_6_0_1_4667492_8190114_4_0_1641614482_1636946959_1641614478%7C9%238190124_5_1636946954%7C2; BDRCVFR[-Cxg3mV_4Yc]=u-9tfqpnA0RTvqhIAwbQhP8; BD_HOME=1; H_PS_PSSID=31660_26350; BD_UPN=12314753; BA_HECTOR=2l0h048h0hak218k3k1gunsdf0q
Host: www.baidu.com				//主机是啥 浏览器通过这个找到 Tomcat
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="97", "Chromium";v="97"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
// User-Agent 浏览器的型号 浏览器的类型是什么
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36

ResponseHeaders 响应

Bdpagetype: 2
Bdqid: 0xe428c5bc00002313
Cache-Control: private
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8	//内容体是什么
Date: Sat, 22 Jan 2022 12:05:42 GMT
Expires: Sat, 22 Jan 2022 12:05:42 GMT
Server: BWS/1.1
Set-Cookie: BDSVRTM=263; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=35105_31660_35489_34584_35491_34813_35801_35796_35317_26350_35478_35744; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Traceid: 1642853142344844929016440607850960528147
Transfer-Encoding: chunked
X-Frame-Options: sameorigin
X-Ua-Compatible: IE=Edge,chrome=1

请求的步骤:(略过地址解析TCP等)
来个一个http请求
1.封装Http信息进入Request接口的实例中
2.产生Response接口的实例
3.如果Servlet接口的实例也就是我们自己定义的servlet不存在容器中,那么利用反射机制创建servlet然后调用servlet的init方法传入servletConfig信息,
然后调用service方法传入生成的request和response,调用完毕后,整个流程结束。

响应状态码:

500:服务器问题
400 : 客户端的问题
300:正常
200:正常

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值