当前位置: 首页 > news >正文

非零基础自学Golang 第17章 HTTP编程(上) 17.1 HTTP简介

非零基础自学Golang

文章目录

      • 非零基础自学Golang
      • 第17章 HTTP编程(上)
        • 17.1 HTTP简介
          • 17.1.1 HTTP 协议
          • 17.1.2 URL 地址
          • 17.1.3 Web 工作方式

第17章 HTTP编程(上)

Go语言的最大优势在于并发和性能,其性能可以媲美C和C++,并发在网络编程中更是至关重要。

如何使用Go语言创建HTTP服务器和客户端,使用Go语言开发Web服务,让开发者不需要进行各种繁杂的性能优化就可以很轻松地开发出一个高性能的Web服务。

17.1 HTTP简介

17.1.1 HTTP 协议

HTTP,即超文本传输协议(HyperText Transfer Protocol),是互联网上应用最为广泛的一种网络协议。

它详细规定了浏览器和万维网服务器之间的相互通信规则,所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

【提示】

HTML叫超文本标记语言(HyperText Markup Language),是标准通用标记语言下的一个应用。HTML不是一种编程语言,而是一种标记语言(markup language),是网页制作所必备的。

“超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。超文本标记语言(或超文本标签语言)的结构包括“头”部分和“主体”部分,其中“头”部提供关于网页的信息,“主体”部分提供网页的具体内容。

HTTP是一个客户端和服务器端请求和应答的标准。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其他的工具,客户端发起一个到服务器上指定端口(默认端口为80,HTTPS网站默认端口为443)的HTTP请求。

【提示】

HTTP协议是基于TCP协议之上建立的,有时也会承载于TLS或SSL协议之上,这时候HTTP协议就变成了加密的HTTPS协议。

通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口的TCP连接,HTTP服务器则在那个端口监听客户端发送过来的请求。

一旦收到请求,服务器(向客户端)发回一个状态行,比如“HTTP/1.1 200 OK”,以及响应的消息,消息的消息体可能是请求的文件、错误消息或者其他一些信息。

HTTP协议包含请求体和响应体,我们来看最简单的HTTP协议的请求体:

GET / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.55.1
Accept: */*

这段请求的目标地址是www.baidu.com,User-Agent为curl,表示这个请求是由curl这个工具发出的,请求的地址为目标地址的根目录“/”。

服务端接收到后,会做出响应的回应,响应体主要包含响应头和响应内容,如下所示,“<!DOCTYPE html>……”为响应的内容,之上的内容为响应头。

HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, notransform
Connection: Keep-Alive
Content-Length: 2381
Content-Type: text/html
Date: Sun, 25 Aug 2019 12:13:07 GMT
Etag: "588604dc-94d"
Last-Modified: Mon, 23 Jan 2017 13:27:56 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<!DOCTYPE html>
<!--STATUS OK--><html>
……
17.1.2 URL 地址

URL(Uniform Resource Locator)是统一资源定位符,是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。

互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

基本URL包含模式(或称协议)、服务器名称(或IP地址)、路径和文件名。

协议://主机地址/路径?查询

https://www.baidu.com/s?wd=Go语言

完整的、带有授权部分的普通统一资源标志符语法如下:

协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值#标志

http://admin:password@ceshi.baidu.com:8080/dir/test.php?id=1#flag=1

URL的长度有限制,不同的服务器限制值不同:

  • IE(Browser):对URL的最大限制为2083个字符。
  • Firefox(Browser):URL的长度限制为65536个字符
  • Safari(Browser):URL最大长度限制为80000个字符。
  • Opera(Browser):URL最大长度限制为190000个字符。
  • Chrome(Browser):URL最大长度限制为8182个字符。
  • Apache(Server):能接受最大URL长度为8192个字符。
  • Microsoft Internet Information Server(IIS):能接受最大URL长度为16384个字符。

当然现在 2022 年12月 7日 可能不是这样子 的了

17.1.3 Web 工作方式

我们在浏览网页时,从打开浏览器、输入网址到按下回车键后网页上出现内容,这过程中浏览器到底做了哪些操作呢?

浏览器本身是一个客户端(手机端客户端内部也是浏览器实现的),当你输入URL的时候,首先浏览器会去请求DNS服务器,通过DNS获取相应的域名对应的IP,如:

www.example.com => DNS服务器 => 获取域名地址为1.1.1.1

然后,浏览器通过IP地址找到对应的服务器,要求建立TCP连接,等浏览器发送完HTTP请求包,服务器接收到请求后开始处理请求包,服务器调用自身服务,返回HTTP响应包,客户端收到来自服务器的响应后开始渲染这个响应包里的主体body,等收到全部的内容后断开与该服务器之间的TCP连接。

相关文章:

  • 5G数据库组网方案
  • 全国职业院校技能大赛中职组网络安全竞赛试题 —命令注入(笔记文档)
  • Zookeeper 4 Zookeeper JavaAPI 操作 4.9 模拟12306 售票案例
  • RabbitMQ学习初整理
  • 20221223英语学习
  • 电脑桌面文件删除了怎么找回?
  • 测试资源管控
  • 大数据处理之ClickHouse概述及架构参考(未完)
  • 实验室搬迁改造需要注意哪些
  • p5.js 光速入门
  • 成功转行Python工程师,年薪30W+,经验总结都在这!
  • 网络安全方向好吗?
  • 华为云CDN,助力电商平台无惧流量洪峰
  • Euler identity
  • 技能梳理32@电源防反接电路+光耦隔离电路+串口磁耦隔离电路
  • 更改Docker容器网络地址
  • 最平坦的路线题解
  • 芯片漫游指南(4) -- UVM序列
  • ACP刷题笔记第一天
  • IPv4地址和子网划分