HTTP通信基础
DNS(Domain Name System)服务提供域名到IP地址之间的解析服务。计算机既可以被赋予IP地址,也可以被赋予主机名和域名。DNS的解析方向正向解析:域名到IP地址反向解析:IP地址到域名HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式GET,POST1.GET请求get:可以理解为 取 的意思,用来获取数据的,只是用来
一、HTTP知识
HTTP(超文本传输协议),是一种实现客户端浏览器和网站服务器之间通信的请求响应协议,它是用作客户端和服务器之间的请求和响应。
客户端(浏览器)会向服务器提交HTTP请求;然后服务器向客户端返回响应;其中响应包含有关请求的状态信息以及内容信息(图片、音频、视频、超链接、文本等)
URI(Uniform Resource Identifier): 统一资源标识符
URL(uniform resource locator):统一资源定位符
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu
http://www.atmcn.com/index.php?a=shows&catid=285&id=123
URL地址格式:
协议://域名(主机名 / IP地址):端口/访问得路径文件?参数名=参数值&参数2=参数值
?向资源文件进行传参
& 向资源文件传递多个参数
二、DNS域名解析
2.1 简介
DNS(Domain Name System)服务提供域名到IP地址之间的解析服务。计算机既可以被赋予IP地址,也可以被赋予主机名和域名。
DNS的解析方向
正向解析:域名到IP地址
反向解析:IP地址到域名
2.域名系统的工作原理
接下来我们以访问百度(baidu.com)为例,对应下图进行解析:
| 步骤 | 交互双方 | 操作说明 |
|---|---|---|
| 1 | 客户端 → 本地DNS服务器 | 客户端发起递归查询请求(“帮我查到www.baidu.com的IP”),本地DNS是用户网络配置的首选DNS(如运营商DNS、8.8.8.8)。 |
| 2 | 本地DNS → 根DNS服务器 | 本地DNS发起迭代查询:“我不知道www.baidu.com的IP,根服务器你告诉我该问谁”。 |
| 3 | 根DNS → 本地DNS | 根DNS返回“com顶级域DNS服务器的IP”(根服务器仅管理顶级域,如com、cn、org)。 |
| 4 | 本地DNS → com顶级域DNS | 迭代查询:“请告诉我baidu.com的DNS服务器IP”。 |
| 5 | com顶级域DNS → 本地DNS | 返回“baidu.com权威DNS服务器的IP”。 |
| 6 | 本地DNS → baidu.com权威DNS | 迭代查询:“请告诉我www.baidu.com的IP”。 |
| 7 | baidu.com权威DNS → 本地DNS | 返回www.baidu.com的真实IP地址(权威DNS是域名所属企业维护的服务器,存储域名与IP的映射)。 |
| 8 | 本地DNS → 客户端 | 将IP地址返回给客户端,同时缓存该解析结果(缓存时间由TTL值决定)。 |
三、HTTP请求类型
3.1 简介
HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式
常见的请求方法有:GET,POST, PUT,HEAD, DELETE, OPTIONS, CONNECT, TRACE、MOVE, COPY
1.GET请求
get:可以理解为 取 的意思,用来获取数据的,只是用来查询数据;发送一个GET请求获取到某服务器上的资源
PS:get请求会把请求的参数附加在URL后面,这样是不安全的,在处理敏感数据时不用,或者参数做加密处理。
2.POST请求
post可以理解为提交数据的意思, 发送一个POST请求向指定的提交数据或附加新的数据。
PS:post请求的请求参数都是请求body中
3.2 GET与POST区别
1.URL可见性:GET请求通过URL网址访问 POST请求将查询的数据放到HTTP请求数据包中访问 *
2.传输数据大小:GET请求的网址是有长度限制,POST请求没有长度限制 *
3.编码区别:Get请求只支持URL编码,Post支持多种编码方式! *
四、HTTP请求/响应包介绍
4.1 HTTP请求报文
1:组成
一个HTTP请求报文由四个部分组成:请求行、请求头部、空行、请求数据
2:HTTP请求报文格式
3:请求行
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。比如 GET /data/info.html HTTP/1.1
方法字段就是HTTP使用的请求方法,比如常见的GET/POST
4:空行
它的作用是通过一个空行,告诉服务器请求头部到此为止。
5:请求数据/请求体
若方法字段是GET,则此项为空,没有数据;
若方法字段是POST,则通常来说此处放置的就是要提交的数据;
比如要使用POST方法提交一个表单,其中有user字段中数据为“admin”, password字段为123456,那么这里的请求数据就是 user=admin&password=123456,使用&来连接各个字段。
6:常见的请求头部
| 字段名 | 核心说明 | 示例 |
|---|---|---|
| Host | 指定请求的服务器的域名和端口号 | - |
| Referer | 先前网页的地址,当前请求网页紧随其后(即来路地址) | - |
| User-Agent* | 发出请求的用户信息(如浏览器/操作系统版本等) | - |
| Content-Length | 请求的内容长度(字节数) | - |
| Content-Type* | 请求的与实体对应的MIME信息(多用于POST请求) | - |
| X-forward-for(XFF)* | 记录客户端的真实IP地址(可穿透代理) | - |
| Cookie* | HTTP请求发送时,将该请求域名下的所有Cookie值发送给Web服务器 | Cookie: role=admin;ssid=1 |
| Accept | 指定客户端能够接收的内容类型 | Accept: text/plain, text/html |
| Accept-Charset | 浏览器可以接受的字符编码集 | Accept-Charset: iso-8859-5 |
| Accept-Encoding | 指定浏览器支持的Web服务器返回内容的压缩编码类型 | Accept-Encoding: compress, gzip |
| Accept-Language | 浏览器可接受的语言(优先级从高到低) | Accept-Language: en,zh |
| Date | 请求发送的日期和时间(遵循GMT格式) | Date: Tue, 15 Nov 2010 08:12:31 GMT |
4.2 HTTP响应报文
1:响应行
响应行一般由协议版本、状态码及其描述组成 比如 HTTP/1.1 200 OK;
其中协议版本HTTP/1.1或者HTTP/1.0,200就是它的状态码,OK则为它的描述。
2:响应头
响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理它回送的数据。
3:响应体
响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。
4:常见的响应头
| 字段名 | 核心说明 | 示例 |
|---|---|---|
| Allow | 标识某网络资源支持的有效请求方法;若请求方法不被允许,服务器返回405错误 | Allow: GET, HEAD Allow: get,head,put,delete |
| Content-Encoding | Web服务器支持的返回内容压缩编码类型 | Content-Encoding: gzip |
| Content-Language | 响应体内容的语言类型 | Content-Language: en,zh |
| Content-Length | 响应体的字节长度 | Content-Length: 348 |
| Content-Type* | 返回内容的MIME类型(核心字段) | Content-Type: text/html; charset=utf-8 |
| Date | 原始服务器发送该响应消息的时间(遵循GMT格式) | Date: Tue, 15 Nov 2010 08:12:31 GMT |
| Location | 用于重定向客户端到非请求URL的位置,完成请求或指向新资源 | Location: http://www.zcmhi.com/archives/94.html |
| Refresh | 用于重定向或标识新资源创建,指定延迟(秒)后跳转至目标URL | Refresh: 5; url=http://www.zcmhi.com/archives/94.html |
| Server* | 标识Web服务器软件的名称/版本等信息 | Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) |
| Set-Cookie* | 服务器向客户端设置HTTP Cookie(核心字段) | Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1 |
| Accept-Ranges | 表明服务器是否支持范围请求,及支持的分段请求类型 | Accept-Ranges: bytes |
| Access-Control-Allow-Origin* | 配置允许跨域访问该资源的域名(CORS核心字段) | Access-Control-Allow-Origin: |* |
更多推荐

所有评论(0)