一、http协议简介

http协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议,使用TCP/IP通信协议传输数据,面向对象简洁、快速、无连接、无状态。

二、http工作原理

1、客户端连接到Web服务器

HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认80)建立一个TCP连接。

2、发送HTTP请求

客户端向Web服务器发送一个请求报文,一个请求报文由请求行、请求头部、空行和请求数据组成。

3、服务器接受请求并返回HTTP响应

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

4、释放连接TCP连接

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

5、客户端浏览器解析HTML内容

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

三、http请求方法

GET:向指定的资源发出“连接”请求

 //向指定的资源发出“连接”请求
UnityWebRequest request = UnityWebRequest.Get(URI);
//开始通讯
_ = request.SendWebRequest();

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

 //获取指定URI资源信息
UnityWebRequest request = UnityWebRequest.Head(URI);
//设置表头
request.SetRequestHeader(name, Value);
//开始通讯
_ = request.SendWebRequest();

POST: 向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。

 //创建一个空WWWForm表单数据
WWWForm form = new WWWForm();
form.AddField(Key, Value.ToString());
//向该指定URI发送表单数据
UnityWebRequest request = UnityWebRequest.Post(URI,form);
//设置表头
request.SetRequestHeader(name, Value);
//开始通讯
_ = request.SendWebRequest();

PUT: 向指定资源位置上传其最新内容。

 //创建 字节数组 或 字符串
byte[] bodyData= { 20 , 10 , 30 , 5 };
//向该指定URI发送表单数据
UnityWebRequest request = UnityWebRequest.Put(URI,bodyData);
//开始通讯
request.Send()

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

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

OPTIONS: 使服务器传回该资源所支持的所有HTTP请求方法。用’*'来代替资源名称,向Web服务器发送

OPTIONS请求,可以测试服务器功能是否正常运作。

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

四、http状态码

1、状态码格式

1xx:指示信息–表示请求已接收,继续处理

2xx:成功–表示请求已被成功接收、理解、接受

3xx:重定向–要完成请求必须进行更进一步的操作

4xx:客户端错误–请求有语法错误或请求无法实现

5xx:服务器端错误–服务器未能实现合法的请求

2、常见状态码

200 OK //客户端请求成功

400 Bad Request //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized //请求未经授权,这个状态代码需和WWW-Authenticate报头域一起使用

403 Forbidden //服务器收到请求,但是拒绝提供服务

404 Not Found //请求资源不存在,eg:输入了错误的URL

500 Internal Server Error //服务器发生不可预期的错误

503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

3、响应状态码有5类

100~199 表示成功接收请求。要求客户端继续提交下一次请求才能完成整个处理过程。

200~299:表示成功接睡请求并完成整个处理过程。常用是200。

300~399:为完成请求,客户需要进一步细化请求,例如,请求的资源已移动一个新地址,常用302 307 304。

400~499:客户端的请求错误,通常拽请的资源不在服务器上,常用是404 ,403指是浏览器没有权限去访问页面。

500~599:服务器端出现错误,常用是500。

五、http请求格式



GET /index.asp HTTP/1.1 ( 作用于描述客户端的请求方式GET POST …;请求的资源名称;以及使用的HTTP协议版本),GET表示获取2003服务器上资源(/index.asp页面)。 HTTP/1.1协议版本是1.1,以前的版是1.0

Host: www.daiv.com (代表的是请求服务器的地址)

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0 这里是记录的客户机本地的信息:Mozilla/5.0收搜引擎内核版本,Windows NT 6.1代表是WIN7系统,WOW64代表操作系统的位置。Firefox/49.0代表的是客户机使用的是Firefox浏览器。

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

代表的是告诉WEB服务器客户机浏览器只能接收html,xhtml+xml,xml的格式文件。服务器接收到这个请求之后会返回相信的格式html,xhtml+xml,xml的文件给客户机。

Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

代表告诉服务器客户机浏览器默认支持中文

Accept-Encoding: gzip, deflate(为什么有:是用来提高传效率的。

指定客户端浏览器可以支持的WEB服务器返回内容压缩编码类型。节约带宽。

Cookie: ASPSESSIONIDACDAQTDC=PHGBDEGAFNHPIONAIAMDNNOC

COOKIE保存的是用户名和密码信息:(很多黑客会去获取你本地电脑的COOKIE信息然后利用你的身份去访问服务器)

Connection: keep-alive(客户机与服务器保持长链接)

六、http响应格式



HTTP/1.1 200 OK (HTTP版本号 状态码 原因描述)

Date: Fri, 14 Oct 2016 13:30:52 GMT: 表求服务器上多少时间向客户机返回信息的时间。可以确定服务器的响应速度。

Server: Microsoft-IIS/6.0 : 服务器告诉客户端采用的是什么解析环境

X-Powered-By: ASP.NET : 服务器告诉客户服务端的采的是什么语言开发。

Content-Length: 17270 : 客户面请求页面的大小/index.asp 大小/时间

Content-Type: text/html : 返回给客户端的网页类型。

Cache-control: private : 告诉客户端可以将本页面进行缓存。这个也不能绝对的提高网站的速度------CDN

七、URI与URL与URN

1、URI(uniform resource identifier)统一资源标识符,用来唯一的标识一个资源。

Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的,URI一般由三部组成:

①访问资源的命名机制

②存放资源的主机名

③资源自身的名称,由路径表示,着重强调于资源

2、URL(uniform resource locator)统一资源定位器,它是一种具体的URI,标识了一个资源的具体获取位置

URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL一般由三部组成:

①协议(或称为服务方式)

②存有该资源的主机IP地址(有时也包括端口号)

③主机资源的具体地址。如目录和文件名等

3、URN(uniform resource name)统一资源命名,通过名字标识资源

URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。上面的 mailto、news 和 isbn URI 都是 URN 的示例。在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的。在Java类库中,URI类不包含任何访问资源的方法,它唯一的作用就是解析。相反的是,URL类可以打开一个到达资源的流。

Unity 用法

  private async UniTask<JObject> Post(string path, Dictionary<string, object> data)
{
//创建一个空WWWForm表单数据
WWWForm form = new WWWForm();
foreach (var item in data)
{
form.AddField(item.Key, item.Value.ToString());
}
//向该指定URI发送表单数据
UnityWebRequest request = UnityWebRequest.Post(path, form);
//设置表头
request.SetRequestHeader(name, Value);
//开始通讯
_ = request.SendWebRequest();
//请求成功
if (request.result == UnityWebRequest.Result.Success)
{ }
else
{ } }

版权声明:本文为CSDN博主「大汉皇叔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_46913514/article/details/116480652

HTTP协议分析与Unity用法的更多相关文章

  1. [转载] TLS协议分析 与 现代加密通信协议设计

    https://blog.helong.info/blog/2015/09/06/tls-protocol-analysis-and-crypto-protocol-design/?from=time ...

  2. RTSP协议分析

    RTSP 协议分析 1.概述:  RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetw ...

  3. TLS协议分析

    TLS协议分析 本文目标: 学习鉴赏TLS协议的设计,透彻理解原理和重点细节 跟进一下密码学应用领域的历史和进展 整理现代加密通信协议设计的一般思路 本文有门槛,读者需要对现代密码学有清晰而系统的理解 ...

  4. Google的Protobuf协议分析

    protobuf和thrift类似,也是一个序列化的协议实现,简称PB(下文出现的PB代表protobuf). Github:https://github.com/google/protobuf 上图 ...

  5. 蓝牙协议分析(7)_BLE连接有关的技术分析

    转自:http://www.wowotech.net/bluetooth/ble_connection.html#comments 1. 前言 了解蓝牙的人都知道,在经典蓝牙中,保持连接(Connec ...

  6. 协议分析TMP

    最近闲来有事, 分析了一个非常低端(非常低端的意思是说你不应该对她是否能取代你现有的QQ客户端作任何可能的奢望,她只是一个实验性的东西)的手机QQ的协议, 是手机QQ3.0,      所用到的TCP ...

  7. 协议分析 - DHCP协议解码详解

    协议分析 - DHCP协议解码详解 [DHCP协议简介]         DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 ...

  8. PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析

    Python黑帽编程1.5  使用Wireshark练习网络协议分析 1.5.0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...

  9. Thrift的TCompactProtocol紧凑型二进制协议分析

    Thrift的紧凑型传输协议分析: 用一张图说明一下Thrift的TCompactProtocol中各个数据类型是怎么表示的. 报文格式编码: bool类型: 一个字节. 如果bool型的字段是结构体 ...

  10. BT协议分析(1)—1.0协议

    简述 BT下载是采用P2P的下载方式,下载的大致形式采用如下图所示,处于图示中心的称为Tracker服务器,其余称为Peer.   缺点 1.资源的安全性 2.资源的实效性(没有上传者则BT也将失效) ...

随机推荐

  1. mysql之数据库操作-第一篇

    1.数据库的创建 mysql> create database if not exists myTestDB; Query OK, 1 row affected (0.00 sec) 2.查看可 ...

  2. git log 查看分支图

    操作: 在git config文件里面设置别名. git config --global alias.lg "log --graph --all --pretty=format:'%Cred ...

  3. 在mysql中正常查询的句子,在C#中出错,原因是定义了变量。

    在C#中 查询一样. 运行报错 Fatal error encountered during command execution." 命令执行过程中碰到的致命错误." MySqlE ...

  4. homework2软件方法论

    什么是软件工程方法论? 1.软件工程是一个方法论,就是我们在开始一个项目时,大体框架一定要有这么一个概念,而具体实施时,必须根据公司一些特点,优化项目开发的流程,这样才是有实效而方法论只是软件工程的结 ...

  5. Windows修改用户名

    修改用户名 右键此电脑>>管理>>本地用户和组>>用户,找到要修改的用户,重命名 修改用户home目录名 1.激活管理员账号 右键此电脑>>管理> ...

  6. 看懂插入才算看懂redis跳表

    跳表的数据结构 forward相当于9之于8,12之于8 插入算法流程: 1.初始化两个数组update和rank数组:update表示每一层的前继节点.rank表示update节点到头结点的距离(用 ...

  7. C语言初级阶段8——预处理

    C语言初级阶段8--预处理 预定义符号 1.概念:预处理是编译之前做的一些事. 2.常用的预定义符号: 注意:: (1)-(4)的格式占位符都用%是,如:printf("%s",D ...

  8. 简单了解promise

    promise是什么: JavaScript中存在很多异步操作, Promise将异步操作队列化,按照期望的顺序执行,返回 符合预期的结果.可以通过链式调用多个 Promise达到我们的目的. Pro ...

  9. json for python学习笔记

    1.json作用 存储数据与数据传输 2.python中的json可以在代码中用字符串表示,字符串内部类似于字典 如: json1 = '{"name":"Bob&quo ...

  10. IEEE会议论文投稿系统问题之一:WinEdt编译生成DVI文件的方法

    问题描述:如何将tex文件正确编译为dvi文件,以正常使用IEEE投稿系统? 方法: 1.打开WinEdt中的命令行: 2.使用latex TexFileName编译tex生成aux文件和dvi文件: ...