10分钟入门HTTP协议

HTTP协议入门1


所学习的协议版本是HTTP 1.1

请求与响应

HTTP是基于TCP的协议, 所以可靠性是由传输层来保障的.在使用协议时,发出请求的是客户端, 接收请求的是服务端。

所以在操作方面,HTTP协议分为了2部分:request请求、response响应

URI:Uniform Resource Identifier
格式:http://user:password@www.abcd.com:80/dir/index.html?uid=1
例如:http://ftp.is.co.za/rfg/abc.txt

URL:Uniform Resource Locator
就是访问网页时需要输入的网址。
例如:http://www.baidu.com

换行符说明:
\r\n =CR+LF
CR    Carriage Return 16进制:0x0d 
LF    Line Feed 16进制:0x0a

请求方面:
图是打开百度图片时用wireshark捕获到的请求包
注意到,每行结尾都是以\r\n换行。
请求头request header与request body之间用一个空行分割
GET / HTTP/1.1\r\n
请求的服务类型 URI HTTP版本号 换行符

响应方面:
图为打开百度图片时用wireshark捕获到的响应包
类似的,响应头每行以\r\n结尾(CR+LF)。
响应头respose header与response body之间使用一个空行分割。
HTTP/1.1 200 OK\r\n
协议版本 200是状态码 OK是状态码的原因
状态码大全FromBaidu

获取资源

HTTP协议不保存状态, 所以HTTP协议是简单的。 所以可以处理大量的事务。但是现代网站都有保存登录状态的能力,使用的事cookie技术。

方法:Method
1. GET方法
目的:请求资源,主要就是请求Response body。
如果请求的是文本资源, 则直接原样返回。 如果是CGI那样的程序, 则返回经过执行后的程序
2. POST
目的:POST的目的是向服务器发送信息。而不是请求response body。
3. PUT
用于文件传输
4. HEAD
目的:只获得报文的header
用于确认URI的有效性
5. DELETE
目的:删除文件
6. CONNECT
目的:用隧道协议链接代理

链接类型:HTTP/1.1默认是持久链接

使用持久连接(响应接收顺序不确定)
TCP3次握手建立连接
发送请求1
发送请求1
发送请求1
接收响应2
接收响应3
接收响应1
TCP4次挥手断开连接

以下使用非持久连接
比如有3个请求
TCP3次握手建立连接
发送请求1
接收响应1
TCP4次挥手断开连接

TCP3次握手建立连接
发送请求2
接收响应2
TCP4次挥手断开连接

TCP3次握手建立连接
发送请求3
接收响应3
TCP4次挥手断开连接

可以看出,持久连接明显节约的链接建立带来的网络延时问题并节约了流量。

报文传输的选项:

  1. 压缩
  2. 分割传输编码:(让浏览器可以逐步显示页面*)
  3. 同时发送中数据对象:(文本, 图片,视频等)
  4. 获取部分内容,断点恢复:当图片接收了50%网络不好断开时,可以选择继续接收后面的50%.
  5. 内容协商:针对不同地域,服务供应商提供不同语言的页面,不同的编码。Accept,Accept-Charset,Accept-Encoding,Accept-Language,Content-Language。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebSocket是一种在单个TCP连接上进行全双工通信的协议。与HTTP不同,WebSocket允许服务器和客户端在任何时候开始发送数据,并且没有请求和响应之间的延迟。 WebSocket可以用于实时通信,如聊天应用程序、在线游戏和交易系统等。在Spring Boot中,我们可以使用Spring WebSocket来构建WebSocket应用程序。 下面是一个简单的示例,演示如何在Spring Boot中使用WebSocket。 首先,我们需要添加以下依赖项: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 接下来,我们需要创建一个WebSocket配置类。该类应该扩展`AbstractWebSocketMessageBrokerConfigurer`类,并重写`registerStompEndpoints()`方法和`configureMessageBroker()`方法。 ```java @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/ws").withSockJS(); } @Override public void configureMessageBroker(MessageBrokerRegistry registry) { registry.enableSimpleBroker("/topic"); registry.setApplicationDestinationPrefixes("/app"); } } ``` 在上面的代码中,我们使用`@EnableWebSocketMessageBroker`注解启用WebSocket消息代理。`registerStompEndpoints()`方法注册一个WebSocket端点,客户端可以使用该端点连接到服务器。`configureMessageBroker()`方法配置消息代理。 接下来,我们需要创建一个控制器类,用于处理WebSocket请求。该类应该使用`@Controller`注解和`@MessageMapping`注解来处理消息。例如,以下控制器类处理`/hello`端点的消息: ```java @Controller public class WebSocketController { @MessageMapping("/hello") @SendTo("/topic/greetings") public Greeting greeting(HelloMessage message) throws Exception { Thread.sleep(1000); return new Greeting("Hello, " + message.getName() + "!"); } } ``` 在上面的代码中,`@MessageMapping`注解指定要处理的消息的端点。`@SendTo`注解指定要将响应发送到的目标。在这种情况下,响应将被发送到`/topic/greetings`目标。 最后,我们需要创建一个WebSocket客户端。以下是一个简单的JavaScript示例,演示如何连接到WebSocket服务器,并发送和接收消息: ```javascript var stompClient = null; function connect() { var socket = new SockJS('/ws'); stompClient = Stomp.over(socket); stompClient.connect({}, function(frame) { console.log('Connected: ' + frame); stompClient.subscribe('/topic/greetings', function(greeting) { showGreeting(JSON.parse(greeting.body).content); }); }); } function sendName() { var name = document.getElementById('name').value; stompClient.send('/app/hello', {}, JSON.stringify({ 'name': name })); } function showGreeting(message) { var greeting = document.createElement('div'); greeting.appendChild(document.createTextNode(message)); document.getElementById('greetings').appendChild(greeting); } ``` 在上面的代码中,`connect()`函数连接到WebSocket服务器,并订阅`/topic/greetings`目标。`sendName()`函数将消息发送到`/app/hello`端点。`showGreeting()`函数显示接收到的消息。 这是一个非常简单的示例,演示如何在Spring Boot中使用WebSocket。使用Spring WebSocket,您可以构建复杂的实时应用程序,例如聊天应用程序和在线游戏。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值