与www有关的三个名词
1.URI
概念:统一资源标识符,俗称网址 。URI分为URN和URL,通常使用URL,如下图:
作用:访问页面
2.HTTP
概念:两个电脑之间传输内容的协议
作用:下载页面
3.HTML
概念:超级文本,主要用来做页面跳转
作用:观看页面
域名
以www.baidu.com为例:
.com——顶级域名,一级域名
baidu——二级域名
www——三级域名
大多数工程师忽略一级域名,将二级域名成为一级域名,依次类推
DNS
域名系统,输入域名即可输出ip
如下图查询百度ip
服务器与浏览器的交互
1.浏览器负责发起请求
2.服务器在 80 端口接收请求
3.服务器负责返回内容(响应)
4.浏览器负责下载响应内容
HTTP 的作用就是指导浏览器和服务器如何进行沟通。
HTTP请求
请求示例1
curl -s -v -H "Frank: xxx" -- "https://www.baidu.com"
复制代码
请求的内容
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: */*
Frank: xxx //可无视
复制代码
请求示例2
curl -X POST -s -v -H "Frank: xxx" -- "https://www.baidu.com"
复制代码
请求的内容
POST / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: */*
Frank: xxx //可无视
复制代码
请求示例3
curl -X POST -d "1234567890" -s -v -H "Frank: xxx" -- "https://www.baidu.com"
复制代码
请求的内容
POST / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: */*
Frank: xxx
Content-Length: 10
Content-Type: application/x-www-form-urlencoded
1234567890
复制代码
请求的格式
1 动词 路径 协议/版本
2 Key1: value1
2 Key2: value2
2 Key3: value3
2 Content-Type: application/x-www-form-urlencoded
2 Host: www.baidu.com
2 User-Agent: curl/7.54.0
3
4 要上传的数据
复制代码
注:
1.请求最多包含四部分,最少包含三部分。(也就是说第四部分可以为空)
2.第三部分永远都是一个回车(\n)
3.动词有 GET POST PUT PATCH DELETE HEAD OPTIONS 等
4.这里的路径包括「查询参数」,但不包括「锚点」
5.如果你没有写路径,那么路径默认为 /
6第 2 部分中的 Content-Type 标注了第 4 部分的格式
复制代码
HTTP请求动词
GET : 用于从服务器获取资源信息
完成请求后返回状态码 200 OK
POST : 用于创建新资源(上传、登录)
创建完成后返回状态码 201 Created
PUT : 用于完整的替换资源或者创建指定身份的资源(整体更新)
如果是创建了资源,则返回 201 Created
如果是替换了资源,则返回 200 OK
PATCH : 用于局部更新资源(部分更新)
完成请求后返回状态码 200 OK
HEAD : 用于只获取请求某个资源返回的头信息
DELETE : 用于删除某个资源
完成请求后返回状态码 204 No Content
OPTION : 用于获取资源支持的所有 HTTP 方法
复制代码
用 Chrome 发请求
1.打开 Network
2.地址栏输入网址
3.在 Network 点击,查看 request,点击「view source」
4.点击「view source」,可以看到请求的前三部分
5.如果有请求的第四部分,那么在 FormData 或 Payload 里面可以看到
复制代码
HTTP响应
有请求必有响应,上述请求1、请求2的响应如下:
响应示例1
响应内容
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: Keep-Alive
Content-Length: 2443
Content-Type: text/html
Date: Tue, 10 Oct 2017 09:14:05 GMT
Etag: "5886041d-98b"
Last-Modified: Mon, 23 Jan 2017 13:24:45 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> <head> ……
复制代码
响应示例2
响应内容
HTTP/1.1 302 Found
Connection: Keep-Alive
Content-Length: 17931
Content-Type: text/html
Date: Tue, 10 Oct 2017 09:19:47 GMT
Etag: "54d9749e-460b"
Server: bfe/1.0.8.18
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"> ……
复制代码
响应的格式
1 协议/版本号 状态码 状态解释
2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html
3
4 要下载的内容
复制代码
状态码是服务器对浏览器说的话
第 2 部分中的 Content-Type 标注了第 4 部分的格式
第 2 部分中的 Content-Type 遵循 MIME 规范
复制代码
HTTP状态码
请求成功
200 : 求执行成功并返回相应数据
201 : 创建成功并返回相应资源数据
202 : 接受请求,但无法立即完成创建行为
204 : 请求执行成功,不返回相应资源数据
复制代码
重定向
301 : 被请求的资源已永久移动到新位置
302 : 请求的资源现在临时从不同的 URI 响应请求
303 : 对应当前请求的响应可以在另一个 URI 上被找到,客户端应该使用 GET 方法进行请求
307 : 对应当前请求的响应可以在另一个 URI 上被找到,客户端应该保持原有的请求方法进行请求
复制代码
条件请求
304 : 资源自从上次请求后没有再次发生变化,主要使用场景在于实现数据缓存
409 : 请求操作和资源的当前状态存在冲突。主要使用场景在于实现并发控制
412 : 服务器在验证在请求的头字段中给出先决条件时,没能满足其中的一个或多个。主要使用场景在于实现并发控制
复制代码
客户端错误
400 : 请求体包含语法错误
401 : 需要验证用户身份
403 : 服务器拒绝执行
404 : 找不到目标资源
405 : 不允许执行目标方法,响应中应该带有 Allow 头,内容为对该资源有效的 HTTP 方法
406 : 服务器不支持客户端请求的内容格式
410 : 被请求的资源已被删除
413 : POST 或者 PUT 请求的消息实体过大
415 : 服务器不支持请求中提交的数据的格式
422 : 请求格式正确,但是由于含有语义错误,无法响应
428 : 要求先决条件,如果想要请求能成功必须满足一些预设的条件要求先决条件,如果想要请求能成功必须满足一些预设的条件
复制代码
服务端错误
500 : 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理
502 : 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应
501 : 服务器不支持当前请求所需要的某个功能
503 : 由于临时的服务器维护或者过载,服务器当前无法处理请求
复制代码
注:请求失败时,仍存在响应第四部分。响应第四部分只与请求第二部分有关,与状态码无关
参考资料 链接:https://my.oschina.net/upcyan/blog/916959