golang学习十一: 网络编程之HTTP

一、概述

1. Web工作方式:

对于普通的上网过程, 系统其实是这样做的:
浏览器本身是一个客户端, 当输入URL的时候, 首先浏览器会去请求DNS服务器, 通过DNS获取相应的域名对应的IP, 然后通过IP地址找到IP对应的服务器后, 要求建立TCP连接, 等浏览器发送完HTTP Request(请求)包后, 服务器接收到请求包之后才开始处理请求包, 服务器调用自身服务, 返回HTTP Response(响应)包; 客户端收到来自服务器的响应后开始渲染这个Response包里的主体(body), 等收到全部的内容随后断开与该服务器之间的TCP连接;

在这里插入图片描述

DNS域名服务器(Domain Name Server)是进行域名(domain name)和与之相对应的IP地址转换的服务器; DNS中保存了一张域名解析表;解析消息的域名;
一个Web服务器也被称为HTTP服务器, 它通过HTTP(HyperText Transfer Protocol 超文本传输协议)协议与客户端通信; 这个客户端通常指的是Web浏览器(其实手机端客户端内部也是浏览器实现的);
Web服务器的工作原理可以简单地归纳为:

  • 客户机通过TCP/IP协议建立到服务器的TCP连接;
  • 客户端向服务器发送HTTP协议请求包, 请求服务器里的资源文档;
  • 服务器向客户机发送HTTP协议应答包, 如果请求的资源包含有动态语言的内容, 那么服务器会调用动态语言的解释引擎负责处理“动态内容”, 并将处理得到的数据返回给客户端;
  • 客户机与服务器断开; 由客户端解释HTML文档, 在客户端屏幕上渲染图形结果;

2. HTTP协议

超文本传输协议(HTTP, HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议, 它详细规定了浏览器和万维网服务器之间互相通信的规则, 通过因特网传送万维网文档的数据传送协议;
HTTP协议通常承载于TCP协议之上, 有时也承载于TLS或SSL协议层之上, 这个时候, 就成了HTTPS; 如下图所示:

在这里插入图片描述

3. 地址(URL)

URL全称为Unique Resource Location, 用来表示网络资源, 可以理解为网络文件路径;
基本URL的结构包含模式(协议)、服务器名称(IP地址)、路径和文件名; 常见的协议/模式如http、https、ftp等; 服务器的名称或IP地址后面有时还跟一个冒号和一个端口号; 再后面是到达这个文件的路径和文件本身的名称; 如:

http://localhost[":"port][abs_path]
http://192.168.31.1/html/index
https://pan.baidu.com/

URL的长度有限制, 不同的服务器的限制值不太相同, 但是不能无限长;

二、HTTP报文解析:

1. 请求报文格式:

在这里插入图片描述
在这里插入图片描述

  • 请求行:
    • 请求行由方法字段、URL 字段 和HTTP 协议版本字段 3个部分组成, 他们之间使用空格隔开;
  • 请求头部
    • 请求头部为请求报文添加了一些附加信息, 由名/值对组成, 每行一对, 名和值之间使用冒号分隔; 请求头部通知服务器有关于客户端请求的信息, 典型的请求头有:
      |请求头 |含义|
      |-|-|
      |User-Agent |请求的浏览器类型|
      |Accept| 客户端可识别的响应内容类型列表, 星号“ * ”用于按范围将类型分组, 用“ / ”指示可接受全部类型, 用“ type/* ”指示可接受 type 类型的所有子类型|
      |Accept-Language |客户端可接受的自然语言|
      |Accept-Encoding| 客户端可接受的编码压缩格式
      |Accept-Charset |可接受的应答的字符集|
      |Host |请求的主机名, 允许多个域名同处一个IP 地址, 即虚拟主机|
      |connection |连接方式(close或keepalive)|
      |Cookie| 存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie|
  • 空行
    • 最后一个请求头之后是一个空行, 发送回车符和换行符, 通知服务器以下不再有请求头;
  • 请求包体
    • 请求包体不在GET方法中使用, 而在POST方法中使用; POST方法适用于需要客户填写表单的场合了; 与请求包体相关的最常使用的是包体类型Content-Type和包体长度Content-Length;

2.响应报文格式:

http的成功响应报文:
在这里插入图片描述

http的失败响应报文:
在这里插入图片描述

HTTP 响应报文由状态行、响应头部、空行、响应包体4个部分组成, 如下图所示:
在这里插入图片描述

  • 状态行:
    • 状态行由 HTTP 协议版本字段、状态码和状态码的描述文本3个部分组成, 他们之间使用空格隔开;
    • 状态码: 状态码由三位数字组成, 第一位数字表示响应的类型, 常用的状态码有五大类如下所示:
状态码 含义
1xx 表示服务器已接收了客户端请求,客户端可继续发送请求
2xx
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅弋、璃鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值