初识HTTP协议

了解知识

网络划分

一般划分为两类:
(1)局域网(Local Area Network):简称 LAN
注意:如果局域网没有连接到公网,局域网中的主机就无法访问公网的资源(如:HTML网页、css 文件、js 文件、图片、视频等)

(2)广域网( Wide Area Network),简称 WAN;开放的网络,连接上的主机都能访问;

IP地址

概念

IP 地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址,简单来说,IP 地址用于定位主机的网络地址;
如就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地

格式

IP地址是一个32位的二进制数,通常被分割为48位二进制数(也就是4个字节),通常用点分十进制的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数);

特殊情况

  • 本机IP地址:127.0.0.1
  • 本机域名:localhost

端口号

概念

端口号用于标识主机中发送数据与接收数据的进程;

类似于发快递:不仅需要指定发货地址(IP地址),还需要指定收货人(端口号);

端口号一般为 0~65535 范围的数字;

协议

协议,也就是网络协议的简称。
网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则(如怎么样建立连接、怎么样互相识别等),只有遵守这个约定,计算机之间才能相互通信交流;

最终体现为数据包的格式


简单认识 HTTP

HTTP概念

HTTP :全称为 “超文本传输协议” ,是一种应用非常广泛的应用层协议
所谓 “超文本” 的含义, 就是传输的内容不仅仅是文本(比如 html, css ), 还可以是一些其他的资源( 比如图片, 视频, 音频等二进制的数据);
目前常用的是 HTTP 1.1

注意

  1. HTTP 属于文本格式,但内部可以包含一些二进制数据;

  2. 文本与二进制数据的区别:

文本就是带编码的二进制数据,因此,文本与二进制数据两个可以互相转换
表现为
(1)Java中,String有 getBytes(“编码”),就可以转换字符串为二进制数据;
(2)new String(字符数组,“编码”),可以转换二进制数据为字符串;

理解 HTTP 协议的工作过程

当我们在浏览器中输入一个 “网址”, 此时浏览器就会给对应的服务器发送一个 HTTP 请求. 对方服务器收 到这个请求之后, 经过计算处理,就会返回一个 HTTP 响应;

在这里插入图片描述

为了更好的观察其过程,可以采用两种方式来进行抓包处理:

  • chrome 开发者工具的网络面板
  • fiddler 抓包

两者优缺点对比

优缺点
chrome开发者工具没有 HTTP 协议原生格式的内容,还可以直接抓 HTTPS 的包
fiddler抓包可以查看 HTTP 原生格式的数据包,抓 HTTPS 的包时需要配置

fiddler 安装与配置见下博文
配置链接

事实上, 当我们访问一个网站的时候, 可能涉及不止一次的 HTTP 请求/响应 的交互过程;

如下所示

当我们在浏览器中输入:www.baidu.com

  • 输入后,显示如下所示内容:

在这里插入图片描述

  • 查看某个 HTTP 的数据包如下:

在这里插入图片描述


HTTP 请求(Request)

如下是一个 HTTP请求/响应的抓包结果:
在这里插入图片描述
其中

  • 首行为:[方法] + [URL] + [版本号];
  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束;
  • Body: 空行后面的内容都是BodyBody允许为空字符串; 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度;

协议格式总结

在这里插入图片描述

认识 URL
URL基本格式

URL:用来标识网络中某个资源的路径;

格式

协议名:// 服务器地址:服务器端口号/带层次的资源路径?查询字符串

注:URL中可省略部分

  • 浏览器上也可以不输入协议名,省略后默认为 http://

  • 浏览器不输入端口号,HTTP协议默认使用 80 端口,https 协议默认使用443端口;

  • 带层次的文件路径: 可以省略, 省略后相当于 /(根目录);

  • 查询字符串:queryString也可以省略;

queryString
(1)键值对的格式:键=值
(2)多个键值对之间 & 相隔;
(3)里边的键由程序猿决定;

  • 服务器路径可以使用 IP地址,也可以使用域名(域名更方便记忆);

注意

URL与HTTP关系:HTTP数据包包含URL

使用 Ping 来查看某个域名对应的IP地址
在这里插入图片描述
Ping 也是用来测试某个主机能否访问到的一种手段;

关于 URL encode

当地址栏输入的内容包含特殊字符、中文、空格等,都会发生转义,只是我们看到的是中文,但真实发送的HTTP数据包是转义后的内容;

将中文、空格转化为16进制的过程(URL编码),反之则为URL解码

urlencode工具

当输入汉语时:
在这里插入图片描述

编码后:
在这里插入图片描述


认识方法

常见的方法有:

方法说明支持的HTTP协议版本
GET获取资源1.0、1.1
POST传输实体主体1.0、1.1
PUT传输文件1.0、1.1
HEAD获得报文首部1.0、1.1
DELETE删除文件1.0、1.1
OPTIONS询问支持的方法1.1
TRACE追踪路径1.1
LINK建立和资源的联系1.0

较常用的有以下两种方法

GET 方法

GET 是最常用的 HTTP 方法, 常用于获取服务器上的某个资源;
当在浏览器中直接输入 URL, 此时浏览器就会发送出一个 GET 请求;

如下图所示
在这里插入图片描述
GET 请求的特点

  • 首行的第一部分为 GET
  • URL 的 queryString 可以为空, 也可以不为空.;
  • header 部分有若干个键值对结构.;
  • body 部分为空;

需要注意的是

  • URL 的长度取决于浏览器的实现和 HTTP 服务器端的实现;
POST 方法

POST 方法也是一种常见的方法,多用于提交用户输入的数据给服务器(例如:登陆页面);

如下所示在这里插入图片描述
POST 请求的特点

  • 首行的第一部分为 POST;
  • URLqueryString 一般为空 (也可以不为空);
  • header 部分有若干个键值对结构;
  • body 部分一般不为空, body 内的数据格式通过 header 中的 Content-Type 指定, body 的长度由header 中的 Content-Length 指定;

如下图所示在这里插入图片描述
content-Type 中的常见格式:

  1. application/x-www-form-urlencoded 为表单提交的格式:(键=值,多个键之间&间隔);
  2. image/jpeg 为图片格式;
  3. text/JavaScript、text/html、text/ss
  4. application/json,(键需要加双引号)
    格式为:
    {
    " username":“张三”,
    “age”:18
    }

经典面试题:GET 与POST区别

表现在以下四点

  • 语义上GET是获取资源/数据,POST是提交资源/数据;
  • 存放数据的位置GET放在 queryStringPOST一般放在 body
  • 幂等性GET一般具有幂等性,POST一般不具有幂等性(幂等性:多次请求得到的结果一样, 就视为请求是幂等的);
  • 缓存GET可以缓存,POST不能;(因为GET具有幂等性,浏览器为了提高性能,把GET获取的资源提前保存在本地);

补充

  • HTTP是一种以明文形式进行传输的协议,HTTP数据包的内容没有进行任何的加密操作,从该角度来讲,只要是HTTP协议就是不安全的;
  • GETPOST都可以传输文本及二进制数据;
认识请求报头(header)

header 的整体的格式也是 “键值对” 结构,标识HTTP数据包属性,每个键值对占据一行,键和值之间使用冒号分割;

报头的种类有很多,常见的有

  • HOST:标识服务器主机的地址和端口
  • Content-Length:标识 body 的数据长度,依据该长度进行解析数据;
  • Content-Type:标识请求的 body 的数据格式/数据类型;

有以下数据格式

(1)multipart/form-data:简称 form-data 格式,一般用于请求,不用于响应form-data可以上传任意多的数据(可以是简单的数据类型,也可以是复杂的数据类型),可以是多个文件;
(2)application/x-www-form-urlencoded :表单格式,发送的字段格式:键=值,每个字段 & 间隔,但这里的字段值只能说简单的数据类型;

(3)image/jpeg:指定具体的一个文件类型,用于客户端发送请求,就只能上传一个文件,用于服务端返回响应,只能返回一个图片;
(4)application/json: 数据为 json 格式,请求和响应都常用;

User-Agent (简称 UA):标识浏览器/操作系统的属性,目前常用来判断是哪个浏览器、PC机、手机等;

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

  • Referer:表示这个页面是从哪个页面跳转过来的;
  • Cookie:用于请求头,Set-Cookie 用于响应头;

Cookie 中存储了一个字符串, 这个数据可能是客户端(网页)自行通过 JS 写入的, 也可能来自于服务器(服务器在 HTTP 响应的header 中通过 Set-Cookie 字段给浏览器返回数据;

访问过的网页,删除Cookie的方式
在这里插入图片描述
在这里插入图片描述
补充:Cookie 与 Session

Cookie :一种客户端保存数据的技术
如何保存数据?
由服务端响应的数据包中,设置一个Set-Cookie头(可以是一个,也可以多个);不同的网站有不同的Cookie;
如何使用
浏览器在每次请求时,自动携带在Cookie头中;
保存的数据格式:多组键值对,键=值,多个键值对之间分号相隔;

Session:一种服务端保存数据的技术:由于HTTP协议是一种无状态的协议(一次请求,一次响应,服务端无法感知之前登陆的用户);
在服务端使用Map<String Session>的数据结构保存用户信息;

认识请求正文(body)

正文中的内容格式和 header 中的 Content-Type 密切相关;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Unity Tcp协议和Http协议有一些差别。首先,Tcp协议是一种面向连接的协议,而Http协议是一种无连接的协议。这意味着在使用Tcp协议时,需要先建立一个连接,然后才能进行数据传输,而Http协议则不需要建立连接,每次请求都是独立的。其次,Tcp协议提供可靠的字节流服务,确保数据的可靠传输,而Http协议则不提供可靠性,可能会丢失数据。此外,Tcp协议使用重传策略来防止丢包,而Http协议没有这个机制。最后,在连接和关闭方面,Tcp协议使用三次握手建立连接和四次挥手关闭连接,而Http协议没有这个过程。所以,虽然Tcp和Http都是网络协议,但它们在连接方式、可靠性和关闭机制等方面有一些差别。 #### 引用[.reference_title] - *1* *2* [Unity-TCP篇-初识TCP](https://blog.csdn.net/qq_30868065/article/details/124187430)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Unity Modbus Tcp 通讯协议](https://blog.csdn.net/cq786/article/details/124769619)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值