首页 > 其他分享 >web通信协议

web通信协议

时间:2024-03-17 14:13:23浏览次数:15  
标签:web HTTP 请求 通信协议 响应 服务器 浏览器 客户端

正式进入网站部署的学习

web通信流程


client工作流程

TCP/IP协议

OSI七层网络模型


抓包工具,查看TCP/IP的三次握手

经典的问题,你了解TCP/IP的三次握手
四次挥手吗
具体数据包的报文格式,暂时不用过多去琢磨;

什么时候需要琢磨数据包的序列号,只有当你在生产环境下,遇见的及其棘手的问题,比如一些数据不同步,交易数据丢失等极端情况,需要去抓取数据包,逐个分析,数据包的完整性,序列号。

目前只需要大致了解数据包的类型,以及作用即可;


1. 抓取ssh登录的数据包,查看 tcp/ip协议基础之上的 SSH应用层协议
登录web-7机器
windows(192.168.xx.xx)  
↓
vmnet8(nat虚拟网卡,10.0.0.1)    
↓
web-7(nat 10.0.0.7)



两个ip:port的数据包交互
10.0.0.1:随机端口      >   10.0.0.7:22

wireshark大鲨鱼抓包工具查看ssh登录数据包收发情况

在window去登录 web-7


ssh远程连接,也是建立的tcp/ip的三次握手之上




2. 查看网站访问的数据包,基于 tcp/ip 基础之上的 HTTP应用层协议
由于捕捉的是 vmnet8的网卡流量,检测http协议,只能给这个网段内的机器,发http请求

这里需要注意,如果你多次访问nginx,你可能会抓不到默认的tcp三次握手
tcp三次握手,是用于首次连接的
访问nginx页面的请求,第一次以及建立好连接,默认会有一个保持连接
你后续的请求,。就不会再继续tcp三次握手,而是直接发送http请求
你和nginx服务器已经建立好tcp连接了。

使用firefox另一个浏览器,重新去建立tcp连接





抓包工具,查看四次挥手

1.先建立ssh连接,然后退出ssh会话,查看是否发出tcp/ip 的四次挥手,四个数据包

常见端口号

常用的熟知端口号

什么是socket套接字

任何,两个机器的连接,指的是tcp/ip协议的连接,本质上是两个socket的通信

socket套接字就是 ip+port的具象化

比如部署nginx服务,运行在 10.0.0.7:80 端口,这就是一个socket
通过本地去访问这个socket,浏览器随机指定的端口,发出请求

10.0.0.1:61145   这个也是一个socket

本地套接字

比如单机LNMP,应用程序在机器内部内存之间数据交互

========================================
套接字存在的意义,在于让两端进行数据交互,数据传输

php
10.0.0.7:9000

mysql(10.0.0.7:3306  这是一个ip:port形式的 socket)

mysql -uroot -p -h10.0.0.7



================================================================================
另一个形式是,也就是文件形式的本地socket
(因为本地内存文件socket形式,比网络socket传输效率更高,)
在后面高级部分,我教大家企业常用的python后端部署

socket的都是具象化证明服务的确运行了,可以对外提供访问了,可以交互了
mysql运行在 /tmp/mysql.sock

这个文件存在,则表示mysql运行
你可以通过这个/tmp/mysql.sock去登录mysql数据库


咱们暂时部署形式都是 网络socket形式,将程序部署在 ip:port的形式。。

网络套接字

部署LNMP,这是不同机器之间的远程访问,就是远程socket

比如 http协议的交互

10.0.0.1:61145  >   10.0.0.7:80

马上学习nginx反向代理,远程部署

lb-5
10.0.0.5:80      

↓

web-7
10.0.0.7:9000 (php-fpm)

叫做远程的socket通信


简单说就是你部署 10.0.0.5:80   这个服务,还会和远程的另一个服务通过网络通信 
10.0.0.7:9000
两端进行数据交互



专业名词就叫做socket通信

HTTP协议工作原理

HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。

HTTP协议采用了请求/响应模型。

客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

HTTP 请求/响应的步骤

1. 客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.yuchaoit.cn

2. 发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

3. 服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。


4. 客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。
客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

5. 释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:

1.浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
2.解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
3.浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
4.服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
5.浏览器将该 html 文本并显示内容;  
6.释放 TCP连接;

无状态

http默认不会记住每一次连接的状态信息,下一次都会认为是一个新的客户端连接

但是如果HTTP完全无状态,你登录到淘宝网后,点击电子产品的跳转链接,它又提示你需要登录了,这就是一个无状态的实际效果。

因此此类需要保持用户身份信息的业务,必须要保存用户的状态。

于是引入了Cookie技术,能够保持用户的身份信息,下一次客户端发出请求,服务端能记忆客户端的身份。

没有cookie

有cookie

请求方法

HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:

GET
向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据

HEAD
与GET方法一样,都是向服务器发出指定资源的请求。
只请求响应报文中的HTTP头部。
它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。

POST
向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
如注册、登录等请求。

PUT
向指定资源位置上传其最新内容。
如更新用户信息


DELETE
请求服务器删除Request-URI所标识的资源。

TRACE
回显服务器收到的请求,主要用于测试或诊断。

OPTIONS
这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。

CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

注意事项:

方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed),当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。

HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。

HTTP请求报文

Accept 就是告诉服务器端,我接受那些MIME类型

Accept-Encoding 这个看起来是接受那些压缩方式的文件

Accept-Lanague 告诉服务器能够发送哪些语言

Connection 告诉服务器支持keep-alive特性

Cookie 每次请求时都会携带上Cookie以方便服务器端识别是否是同一个客户端

Host 用来标识请求服务器上的那个虚拟主机,比如Nginx里面可以定义很多

虚拟主机.那这里就是用来标识要访问那个虚拟主机。

User-Agent 用户代理,一般情况是浏览器,也有其他类型,如:wget curl 搜引擎的蜘蛛等

If-Modified-Since 是浏览器向服务器端询问某个资源文件如果自从什么时间修

过,那么重新发给我,这样就保证服务器端资源.文件更新时,浏览器再次去

求,而不是使用缓存中的文件。

If-None-Match:本地缓存中存储的文档的ETag标签是否与服务器文档的Etag不匹配;


抓包HTTP请求

HTTP响应报文


抓包HTTP响应

HTTP常见响应状态码

1. 当你client  发出 get请求 获取一个图片信息  ,发出requests


2.  server  响应结果,nginx找到这个图片,返回给用户,  response
响应信息,是有对应的状态码的。。

学习nginx会遇见的内容
- 20x系列,表示请求,响应正常解析
- 30x系列,表示本次请求,被转发到另一个服务器上了。。
- 40x系列,表示client客户端访问的url有问题,该资源不存在
- 50x系列,表示网站的服务端出错了(php-fpm)没有运行

总结梳理,面试拿出来背即可

1.dns篇
用户访问域名www.yuchaoit.cn
↓
浏览器跳转
↓
浏览器缓存(disk cache)
↓
Hosts文件
↓
本地DNS服务器(递归查询 > 迭代查询)
↓
client 向 server发起查询(递归查询)
server 向 server发起查询(迭代查询)


2.TCP/IP协议篇(三次握手)
client > SYN报文,请求连接 
server > SYN,ACK报文 响应client
client  > ACK,建立连接 


3.客户端发起http请求
- 请求方法是什么、get、post、delete
- 请求主机是什么、www.yuchaoit.cn
- 请求资源是什么 、 http://yuchaoit.cn:8090/upload/2022/05/Xnip2022-05-01_16-32-30-b82235c9b62c42af8ea25e0313ca42f7.jpg
- 请求端口是什么、默认http是80、https是443
- 请求参数是什么、请求头部信息(资源类型、是否压缩、cookie、浏览器客户端等)
- 请求信息最后的换行

4.服务端响应的内容
- server信息(web服务器软件类型)
- 响应文件类型
- 响应头部信息(是否压缩,语言编码,是否保持连接等)

5.客户端发起TCP四次挥手断开连接。
client > 发起断开请求 FIN=1 
server  > 响应断开   FIN、ACK
server  > 发起断开请求 FIN=1
client > 确认断开连接 ACK

标签:web,HTTP,请求,通信协议,响应,服务器,浏览器,客户端
From: https://www.cnblogs.com/btcm409181423/p/18078507

相关文章

  • 访问JavaWeb项目没有返回任何内容
     一、问题由来一位朋友最近在学习JavaWeb开发时遇到一个问题,某次他在测试,去访问项目下面的html文件时,发现没有任何响应信息。他感觉到很是奇怪,自己尝试着去解决这个问题,一直没有找到问题。二、问题分析我让他把项目发过来看看,把项目启动起来后,在Webapp目录下创建一个......
  • SQLpage 基于sql 开发website 的工具
    SQLpage属于一个低代码工具,让我们可以通过sql开发web站点包含的特点简单美观快速包含了比较丰富的web组件同时也提供了一些基本的功能,比如认证,变量,运行sql,读取文件面向的人群业务分析 可以基于动态处理数据科学 原型以及分析市场人员工程师产品管理人员教育......
  • 【Qt】使用Qt实现Web服务器(一):QtWebApp介绍、演示
    1、简介QtWepApp是使用Qt实现的Web服务器库,虽然名字中有“App”但是它的确是一个lib库,编译生产的是libQtWebAppd.so作者开发QtWepApp是从JavaServlet获得的灵感,本人不懂Java,对本人没有帮助。QtWepApp是一个跨平台的项目,适用于:Linux、Windows、MacOS和QtFramework支......
  • 【Qt】使用Qt实现Web服务器(二):QtWebApp示例源码
    1、最简使用介绍Demo2演示了最简单的用法,输入url后返回“HelloWorld!”;下面详解示例代码,先看主函数1.1主函数#a)QtWebApp库中定义的名字空间stefanfringsusingnamespacestefanfrings;intmain(intargc,char*argv[]){......
  • imagepolicywebhook
    imagePolicyWebhookimagePolicyWebhook是一个评估image的准入控制器。需要启动一个https的服务来执行该动作【功能实践】为webhook生成ssl证书生成server.csr和server-key.pemcat<<EOF|cfsslgenkey-|cfssljson-bareserver{"hosts":["image-bouncer-......
  • 【Python使用】python高级进阶知识md总结第4篇:静态Web服务器-命令行启动动态绑定端口
    python高级进阶全知识知识笔记总结完整教程(附代码资料)主要内容讲述:操作系统,虚拟机软件,Ubuntu操作系统,Linux内核及发行版,查看目录命令,切换目录命令,绝对路径和相对路径,创建、删除文件及目录命令,复制、移动文件及目录命令,终端命令格式的组成,查看命令帮助。HTTP请求报文,HTTP响应报文......
  • ssts-hospital-web-master项目实战记录三十三:项目迁移-核心模块实现(useDeviceDriver-
    一、设备驱动模块实现service/device-driver/ezware/function-ws/idc-motor-device.tsimport{EventFunctionType,EventResultType}from'@/types'import{EZMessageType,EZWebSocket}from'./ez-web-socket'classIdcMotor{ client:EZWebSocket......
  • Python之Web开发中级教程----配置数据库
    Python之Web开发中级教程----配置数据库在settings.py中保存了数据库的连接配置信息,Django默认初始配置使用sqlite数据库。DATABASES={   'default':{       'ENGINE':'django.db.backends.sqlite3',       'NAME':os.path.join(BASE_DIR,'db.s......
  • 访问JavaWeb项目报405错误
     一、问题由来一位朋友最近在学习JavaWeb开发,做测试时出现问题,页面报了405错误,HTTPStatus405?MethodNotAllowed如果是只出现一次,那也还好。主要是这个错误他遇到过多次,第一次就是刚开始学习Servlet的时候,还有一次是在学习文件上传的时候出现的。因此就特意写一篇博......
  • FPGA常用通信协议——I2C(二)
    一、时序 上一篇中我们已经了解了I2C的基本时序,这里我们只考虑I2C的写数据,具体时序见下图 二、信号列表sta_flag开始信号,拉高时开始一次读或写sda_en三态门控制信号,控制SDA是输出还是输入ready_flag结束标志,传入下一个模块,提醒下一模块可继续发送write总线正在工作信号,......