非零基础自学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连接。