02Http协议

  1. HTTP协议:超文本传输协议
  1. 无状态协议:协议对于事物处理没有记忆功能(下一次请求页面不可以得到上一次页面的信息,不可以进行数据保存,数据独立,没有联系),平常网页的数据保存,是通过cookie、session机制实现有状态的web

Web=http协议+状态机制+其他机制

  • 为什么不改进:
  1. 历史原因,最初只浏览静态文件,负担轻
  2. 每一次的请求都有状态,在两个网页之间维持状态代价太高,也不是所以页面之间需要状态,所以引入了其他机制(cookie、session、application)来实现有状态的连接
  1. 用于通过Internet发送请求消息和相应消息
  2. 通过浏览器和服务器进行数据传输,进行超文本(文本、图片、视频)传输的规定(HTTP协议规定了超文本传输要遵守的规则)
  3. 用户在浏览器输入请求域名——HTTP协议将数据传送给服务器——服务器通过HTTP协议将数据返还到浏览器上
  1. 流程
  1. 用户:在浏览器中输入URL
  2. 浏览器:发送http请求——(包含)请求行--头--体
  3. 服务器:处理http请求
  4. 浏览器:响应http请求——(包含)响应码--头--体
  1. URL:统一资源定位符,包含了用于查找的资源的足够的信息

  1. 链接地址        2.键值对的方式,两个当前请求参数给服务器   3.锚点
  • 协议部分:http表示网页部分用的是http协议,后面//为分隔符
  • 域名部分:www.fishbay.cn,发送请求时,需要向DNS服务器解析IP,如果为了优化请求,可以直接用IP作为域名部分使用
  • 端口部分:80,和域名之间用:分隔不是一个URL的必须部分,如果端口80,也可以省略不写
  • 虚拟目录部分:从域名的第一个/开始到最后一个/为止不是URL的必须部分,本例中的虚拟目录是/mix/
  • 文件名部分:从域名的第一个/开始到?为止,如果没有?则从域名最后一个/开始到#为止,是文件名76.html,不是URL的必须部分,如果没有文件名,则使用默认文件名
  • 锚部分:从#开始到最后,本部分锚是first,不是URL的必须部分
  • 参数部分:从?开始到#为止之间的部分,又称搜索部分、查询部分,本例中的参数是name=kelvin&password=123456,如果有多个参数,各个参数之间用&作为分隔符
  1. 工作原理:http协议采用请求/响应模式,客户端向服务器发送一个请求报文,然后服务器响应请求

请求过程:

  1. 在浏览器中输入URL
  2. 浏览器向DNS服务器请求解析该URL中的域名对应的IP地址(如果IP请求,则不需要此步骤)
  3. 解析出IP后,根据IP和端口号,和服务器建立TCP连接
  4. 浏览器向服务器发送请求,该请求报文作为TCP三次握手的第三个报文发送给服务器
  5. 服务器作出响应,把数据发送给浏览器
  6. 通信完成,断开TCP连接
  7. 浏览器解析收到的数据并显示
  1. HTTP请求报文结构:三部分组成(请求行,请求头,请求体)

报文结构解剖

  • 请求方法,GET和POST是最常见的HTTP方法,多数浏览器支持
  • 请求URL,它和报文的Host属性组成完整的请求URL
  • HTTP协议名称及版本号
  • HTTP的报文头,包含若干个属性,格式为”属性名:属性值”,服务端据此获取客户端的信息
  • HTTP的报文体,它将一个页面单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据,不但报文体可以传递请求参数,请求URL也可以通过类似于”/chapter15/user.html?param1=value1¶m2=value2”的方式传递请求参数
  1. 最常见的两种HTTP方法
  1. GET方法:不提交大量的数据,无敏感、保密数据时使用
  • 超级链接访问,默认GET方法
  • Form提交,不指定method,默认GET方法
  • Form提交,指定method=GET,很少使用
  1. POST方法:需要提交敏感、保密数据或数据量较大
  • Form提交,指定method=POST
  1.  HTTP请求:GET方式

  1.  HTTP请求:POST方式

  1. HTTP响应

  1. HTTP响应报文结构:三部分组成(响应行,响应头,响应体)

报文结构解剖

 

  • 报文协议及版本
  • 状态码及状态描述
  • 响应报文头,也是由多个属性组成
  • 响应报文体,即我们真正要的干货

和请求报文相比,响应报文多了一个响应状态码,它以清晰明确的语言告诉客户端本次请求的处理结果

HTTP响应状态由5段组成:

  • 1xx消息,一般是告诉客户端,请求已经收到了,正在处理
  • 2xx处理成功,一般表示:请求知悉等信息
  • 3xx重定到其他地方,它让客户端发起一个请求以完成整个处理
  • 4xx处理发送错误,责任在客户端,如客户端的请求一个不存在的资源客户端未被授权,禁止访问等
  • 5xx处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持
  1. 以下几个常见的状态码
  1. 200 OK:处理成功!
  2. 400:请求语法错误,服务器无法理解
  3. 403:服务器收到请求,但拒绝提供服务
  4. 404:你最不希望看到的,即找不到页面
  5. 500:服务器内部错误
  6. 503:服务器当前不能处理客户端请求,可能需要一段时间后才能恢复正常
  1. HTTP协议

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是基于Spring Boot设计支持HTTP、MQTT、CoAP协议的物联网平台的代码,包含了协议网关、协议数据发送端、协议数据订阅端、协议服务器信息等功能,并能将来自不同协议的信息转化为JSON格式的数据。 依赖项: ```xml <dependencies> <!-- Spring Boot Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Eclipse Paho - MQTT Client --> <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.2.2</version> </dependency> <!-- Californium - CoAP --> <dependency> <groupId>org.eclipse.californium</groupId> <artifactId>californium-core</artifactId> <version>2.0.0-M8</version> </dependency> <!-- JSON Processing API --> <dependency> <groupId>javax.json</groupId> <artifactId>javax.json-api</artifactId> <version>1.1.2</version> </dependency> <!-- JSON Processing Implementation --> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.json</artifactId> <version>1.1.2</version> </dependency> </dependencies> ``` 代码: ```java import javax.json.Json; import javax.json.JsonObject; import javax.json.JsonReader; import javax.json.JsonValue; import javax.servlet.http.HttpServletRequest; import org.eclipse.californium.core.CoapClient; import org.eclipse.californium.core.CoapResponse; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class IotPlatformApplication { public static void main(String[] args) { SpringApplication.run(IotPlatformApplication.class, args); } @PostMapping("/data") public ResponseEntity<JsonValue> processData(@RequestBody String data, HttpServletRequest request) { // Get protocol gateway ID from request URL String gatewayId = getGatewayId(request.getRequestURI()); // Parse JSON data JsonReader reader = Json.createReader(new StringReader(data)); JsonObject json = reader.readObject(); reader.close(); // Create JSON response object JsonObject responseJson = Json.createObjectBuilder() .add("mode", "1") // 1 for data sender .add("gateID", gatewayId) .add("obid", json.getString("obid")) .add("obtype", json.getInt("obtype")) .add("value", json.getJsonNumber("value")) .build(); // Publish data to MQTT broker try { MqttClient mqttClient = new MqttClient("tcp://localhost:1883", "iot_platform"); mqttClient.connect(); MqttMessage message = new MqttMessage(responseJson.toString().getBytes()); message.setQos(0); mqttClient.publish("data", message); mqttClient.disconnect(); } catch (MqttException e) { e.printStackTrace(); } // Send data to CoAP server CoapClient coapClient = new CoapClient("coap://localhost:5683/data"); CoapResponse coapResponse = coapClient.post(responseJson.toString(), 50); coapClient.shutdown(); // Return JSON response return new ResponseEntity<>(responseJson, HttpStatus.OK); } private String getGatewayId(String requestUri) { String[] parts = requestUri.split("/"); return parts[parts.length - 2]; } } ``` 上述代码,`processData`方法接收来自HTTP协议的POST请求,解析请求的JSON数据,并将数据发送到MQTT broker和CoAP服务器。在返回的JSON数据,`mode`字段为1表示数据来自数据发送端,为0表示数据来自数据订阅端。`gateID`字段表示协议网关类型,01表示HTTP02表示MQTT,03表示CoAP。`obid`字段表示传感器的标识,`obtype`字段表示传感器编号,`value`字段表示具体传感数值。 该物联网平台支持HTTP、MQTT、CoAP三种协议,并能够将来自不同协议的数据转化为JSON格式进行处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值