一篇文章看懂HTTP+WebSocket+计算机网络(附思维导图)

HTTP协议

  • HTTP协议
  • 协议简介

HTTP 超文本传输协议,是基于TCP/IP协议之上的应用层协议。

特点:

基于请求-响应的模式。

状态保存:不保存之前发送过的请求或响应,为了实现保存功能引入了cookie。

无连接:服务器处理完客户的请求,并收到客户的应答后,即断开连接。HTTP1.0是直接断开,1.1就是长连接机制。

  • HTTP的请求方法
  1. HTTP有几种请求方法?

一共有八种方法,以不同的方式操作资源:

GET:发出获取资源的请求,只用在读取数据

POST:提交数据,创建或修改资源

PUT:只能修改已有字段的资源。

DELETE:删除Request—URI所表示的资源。

HEAD:发出资源请求,服务器不传回资源的文本部分。

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

OPTIONS:使服务器传回该资源所支持的所有HTTP请求的方法,可在CORS跨域资源共享时测试是否有访问权限。

CONNECT:通常用于SSL加密服务器的链接,管道方式的连接

  1. GET与POST的区别?

数据存放位置:GET放在URL中(请求行)。POST放在请求体中。

数据限制:GET数据大小有限制(URL长度限制,IE最小为2083字节),POST没有。

安全性:GET安全性低,会被保存在历史记录中。

  1. PUT与POST的区别?

PUT是更新数据,因为PUT是幂等的,幂等就是如果两个请求相同,后一个请求会把第一个请求覆盖掉。而POST则不是幂等的,他是新增数据。

 

  • 常见的HTTP请求头

Accept

浏览器能够处理的内容类型

Accept-Charset

浏览器能够显示的字符集

Accept-Encoding

浏览器能够处理的压缩编码

Accept-Language

浏览器当前设置的语言

Connection

浏览器与服务器之间连接的类型

Cookie

当前页面设置的任何Cookie

Host

发出请求的页面所在的域

Referer

发出请求的页面的URL

User-Agent

浏览器的用户代理字符串

  • 常见的HTTP响应头

Date

rfc822格式表示消息发送的时间

server

服务器名称

Connection

连接的类型

Cache-Control

控制HTTP缓存

content-type

后面的文档属于什么MIME类型

常见的Content-Type 属性值有以下四种:

(1)application/x-www-form-urlencoded:浏览器的原生form表单,按照key=val&的方式进行URI转码。

(2)multipart/form-data:通常表单POST上传文件时使用该方式。

(3)application/json:服务器消息主体是序列化后的JSON字符串

(4)text/xml:主要用来提交XML格式的数据。

 

五、HTTP迭代

1、HTTP1.0到HTTP1.1的区别?

①引入长连接机制

1.0是一个请求响应后就马上关闭TCP连接。而1.1则基于TCP长连接机制(传输层才需要建立连接),一般几十秒内没有操作才断开连接。这样避免了频繁的三次握手和四次挥手,建立和关闭TCP连接带来的开销和时延。

②管道机制实现同时发送多个HTTP请求

1.0一个请求发送后,必须等待响应才能发送下一个请求,而1.1可以同时发送多个请求,节约等待时长。

③分块传输

1.0是content-length确定响应体长度。但数据过大或不断增大,则无法准确知道内容长度大小。1.1则采用流模式分块传输,每个数据块前指明大小,最后一个0表示结束。

④断点传输

1.1将已传输的部分写入临时文件.temp/.download,当网络断开重连,HTTP请求报文中会添加已经传输部分的长度

2、HTTP1.1到HTTP2.0的区别?

①二进制

1.1请求体可以是不同的格式,其他是文本形式,2.0则是完全的二进制格式,即帧。

②I/O多路复用

2.0以前因为浏览器限制了同一个域名下的请求数量,页面要请求很多资源时会有队头阻塞的情况,而2.0基于二进制分帧可以同时交错的发送和请求数据,再重新组装。

③服务器推送

2.0服务端可以对一个客户端请求发出多个响应,预计需求推送额外的资源给客户端,这样可以减少请求的次数,提高页面响应速度。

④头信息压缩

1.1每次都要传输一样的请求字段(如cookie)。2.0将头信息压缩后再传输,且服务器和客户端同时维护一张头信息表,只发送索引即可。

3、页面有多张图片,HTTP是怎么加载的?

HTTP1,浏览器对同域名最大TCP连接数为6,所以会请求多次。可以多域名部署解决。

HTTP2支持多路复用,可以在一个TCP里发送多个HTTP请求,一瞬间加载很多资源。

 

六、HTTPS和HTTP

HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。

HTTPS和HTTP的区别主要如下:

1、HTTPS协议需要到ca申请证书,需要一定费用。

2、HTTP信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议,更安全。

3、HTTP是80端口,HTTPS是443。

七、HTTP状态码

1xx

请求正在处理

2xx

请求正常处理完毕

200

正常处理

204

正常处理但无需服务端返回内容

206

响应指定范围的实体内容

3xx

重定向

301

永久重定向,已分配新的URI

302

临时重定向,资源临时被分配了新的 URI

303

资源存在着另一个 URI,应使用GET方法获取资源

304

告诉客户端可以直接使用缓存的内容

307

临时重定向,保持方法不变重新请求新URI

4xx

客户端错误码

400

请求报文中存在语法错误

401

需要有通过HTTP认证的认证信息

403

请求资源的访问被服务器拒绝了

404

服务器上无法找到请求的资源

405

服务器禁止使用该请求方法

5xx

服务器错误状态码

500

服务器执行时发生错误

502

网关或代理服务器错误

503

服务器暂时超负荷或正在停机维修

504

超时未得到响应

304多好还是少好?

304优点:提高网站访问速度,对有缓存的页面直接使用缓存。

304多缺点:内容源更新频繁的页面,搜索引擎蜘蛛抓取频率更高,访问量更多。

八、WebSocket

是H5提供的一种浏览器与服务器进行全双工通信的网络技术,基于TCP连接,只需要完成一次握手后就能创建持久性的连接,且双向数据传输。即服务器和客户端都可以向对方主动推送消息。没有同源限制,协议标识符是ws/wss。

计算机网络

计算机网络模型

ISO为了更好的使网络应用更为普及,推出了OSI参考模型

ISO

TCP/IP

作用

举例

应用层

应用层

为应用程序提供服务

HTTP/HTTPS/FTP

表示层

数据加密、编码和转换

base64对数据编码

会话层

建立、管理和维护会话

单工、半双工和全双工

传输层

传输层

端到端的连接

TCP/UDP,端口号

网络层

网络层

IP寻址及路由选择

IP寻址建立两个节点之间的连接

数据链路层

数据链路层

组帧、物理编址

物理层

物理层

物理层

TCP的三次握手和四次挥手?

TCP三次握手:客户端向服务器发送SYN,服务端返回 SYN ACK ,客户端再发送ACK。

TCP四次挥手:客户端向服务器发送连接释放请求,服务器接收后返回ACK确定包。但因为TCP连接是双向的,如果此时服务端还有数据没发完,会继续发送数据,结束后向客户端发送连接释放请求,客户端收到后发送ACK应答。

为什么建立连接只要三次而关闭连接却要四次?

因为服务端LISTEN状态下,当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

TCP和UDP的区别

UDP无连接,不可靠传输,可同时对多个设备通信,适用于实时应用,例如视频会议。

TCP有连接,可靠传输(流浪控制、拥塞控制),只能一对一,适用于可靠的文件传输。

DNS解析过程

首先在浏览器缓存中查找对应的IP地址,若无进行下一步。

本地DNS服务器发送请求,若本地DNS服务器有缓存则返回,没有则下一步。

本地DNS服务器分别向域名服务器->顶级域名服务器->权威域名服务器发送请求,获取到IP地址后保存在缓存中,同时将结果返回给浏览器。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
HTML 5 Web Sockets is a powerful and effective technique for real-time information processing. There exists many techniques such as Poling, Long Poling and Streaming that are said to be better earier days. With web sockets, it shows a better outcome for the end user as well as a proper utilization of the server bandwidth. WebSocket is a web technology providing full-duplex communications channels over a single TCP connection. The WebSocket protocol was standardized by the IETF as RFC 6455 in 2011, and the WebSocket API for in Web IDL is being standardized by the W3C.WebSocket is designed to be implemented in web browsers and web servers, but it can be used by any client or server application. The WebSocket Protocol is an independent TCP-based protocol. Its only relationship to HTTP is that its handshake is interpreted by HTTP servers as an Upgrade request. The WebSocket protocol makes possible more interaction between a browser and a web site, facilitating live content and the creation of real-time games. This is made possible by providing a standardized way for the server to send content to the browser without being solicited by the client, and allowing for messages to be passed back and forth while keeping the connection open. In this way a two-way (bi-directional) ongoing conversation can take place between a browser and the server. A similar effect has been achieved in non-standardized ways using stop-gap technologies such as Comet.In addition, the communications are done over TCP port number 80, which is of benefit for those environments which block non-standard Internet connections using a firewall. WebSocket protocol is currently supported in several browsers including Google Chrome, Internet Explorer, Firefox, Safari and Opera. WebSocket also requires web applications on the server to support it. Here goes a comparison of polling vs Web Sockets.
以下是一个简单的 Java Vue WebSocket 应用程序的示例代码,其中使用了 Spring Boot 作为后端框架,前端使用 Vue.js。这个应用程序将向客户端发送一个简单的问候语,并且可以在客户端发送消息时回显该消息。 Java 代码: ```java package com.example.websocketdemo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; import org.springframework.web.socket.server.standard.ServerEndpointExporter; @SpringBootApplication @EnableWebSocket public class WebsocketDemoApplication implements WebSocketConfigurer { public static void main(String[] args) { SpringApplication.run(WebsocketDemoApplication.class, args); } @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(new WebSocketHandler(), "/websocket").setAllowedOrigins("*"); } } ``` Vue.js 代码: ```html <template> <div> <h1>{{ message }}</h1> <input type="text" v-model="inputMessage" @keyup.enter="sendMessage"> </div> </template> <script> import { WebSocketClient } from 'vue-native-websocket' export default { name: 'App', data: () => ({ message: '', inputMessage: '' }), mounted () { this.websocket = new WebSocketClient('ws://localhost:8080/websocket') this.websocket.onMessage(this.handleMessage) }, methods: { handleMessage (data) { this.message = data }, sendMessage () { this.websocket.send(this.inputMessage) this.inputMessage = '' } } } </script> ``` WebSocket 处理程序代码: ```java package com.example.websocketdemo; import java.io.IOException; import javax.websocket.OnMessage; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; @ServerEndpoint("/websocket") public class WebSocketHandler { @OnMessage public void onMessage(String message, Session session) throws IOException { session.getBasicRemote().sendText("Hello, " + message); } } ``` 这个示例程序使用了 Spring Boot 和 Vue.js,其中后端的 WebSocket 处理程序使用了 Java WebSocket API,前端使用了 vue-native-websocket 库。运行这个应用程序,可以在浏览器中打开应用程序的 URL,输入一些文本并按下 Enter 键,可以看到服务器回显这个文本。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值