网络协议丨浏览器和服务器与HTTP的关系

首先说一下浏览器的定义。

浏览器的正式名字叫“Web Browser”,顾名思义,就是检索、查看互联网上网页资源的应用程序,名字里的 Web,实际上指的就是“World Wide Web”,也就是万维网,就是我们日常讲的互联网。

浏览器本质上是一个 HTTP 协议中的请求方,使用 HTTP 协议获取网络上的各种资源。

当然,浏览器上也不只有HTTP。

例如,HTML 排版引擎用来展示页面,JavaScript 引擎用来实现动态化效果,甚至还有开发者工具用来调试网页,以及五花八门的各种插件和扩展。

正是有了这些,我们才能使用浏览器,非常方便快捷地在互联网检索浏览我们想要的内容。

其中HTTP的作用就是帮助我们可以请求到我们想要浏览的内容。

在 HTTP 协议里,浏览器的角色被称为“User Agent”即“用户代理”,意思是作为访问者的“代理”来发起 HTTP 请求。不过在不引起混淆的情况下,我们通常都简单地称之为“客户端”。

而负责接收我们的HTTP请求的,是web服务器。我们叫“服务端”。也叫应答方。

服务器,Web Server。Web 服务器是一个很大也很重要的概念,它是 HTTP 协议里响应请求的主体,通常也把控着绝大多数的网络资源,在网络世界里处于强势地位。

当我们谈到“Web 服务器”时有两个层面的含义:硬件和软件。

硬件含义就是物理形式或“云”形式的机器,在大多数情况下它可能不是一台服务器,而是利用反向代理、负载均衡等技术组成的庞大集群。(可能看着是很多台机器)

软件含义的 Web 服务器可能我们更为关心,它就是提供 Web 服务的应用程序,通常会运行在硬件含义的服务器上。它利用强大的硬件能力响应海量的客户端 HTTP 请求,处理磁盘上的网页、图片等静态文件,或者把请求转发给后面的 Tomcat、Node.js 等业务应用,返回动态的信息。

此文章为2月Day3学习笔记,内容来源于极客时间《透视HTTP协议》,强烈推荐该课程!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编写简单的浏览器和 Web 服务器需要掌握以下技能: 1. 熟悉 HTTP 协议,了解请求和响应的格式和内容; 2. 掌握 Socket 编程,能够使用 Python 等语言进行网络编程; 3. 了解 HTML 和 CSS,能够构建简单的网页; 4. 掌握 HTTP 服务器框架,例如 Flask、Django 等。 下面是一个简单的例子,展示如何编写一个 Web 服务器并用浏览器请求它: ``` # 导入 socket 库 import socket # 定义服务器地址和端口号 HOST, PORT = '', 8888 # 创建一个 socket 对象 listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 设置 socket 的属性,使其可以重复使用地址 listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 绑定服务器地址和端口号 listen_socket.bind((HOST, PORT)) # 开始监听客户端请求 listen_socket.listen(1) print(f'Serving HTTP on port {PORT} ...') while True: # 接收客户端请求 client_connection, client_address = listen_socket.accept() # 接收客户端发送的数据 request_data = client_connection.recv(1024) # 打印客户端发送的请求数据 print(request_data.decode('utf-8')) # 构造响应数据 response_body = '<html><body><h1>Hello, World!</h1></body></html>' response_headers = [ ('Content-Type', 'text/html; charset=utf-8'), ('Content-Length', str(len(response_body))) ] response_headers_bytes = ''.join(f'{k}: {v}\r\n' for k, v in response_headers).encode('utf-8') response = b'HTTP/1.1 200 OK\r\n' + response_headers_bytes + b'\r\n' + response_body.encode('utf-8') # 发送响应数据给客户端 client_connection.sendall(response) # 关闭客户端连接 client_connection.close() ``` 上面的代码创建了一个 Web 服务器,监听在本机的 8888 端口上。当有客户端连接到该端口时,服务器会接收客户端发送的请求数据,并根据请求数据构造响应数据,最后发送响应数据给客户端。请求数据和响应数据都是 HTTP 协议格式的。 为了测试该服务器,我们可以打开浏览器,输入 `http://localhost:8888`,然后按下回车键。这样浏览器会向服务器发送一个 HTTP GET 请求。服务器接收到请求之后,会返回一个包含 "Hello, World!" 的 HTML 页面。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值