与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.1Host: www.baidu.comUser-Agent: curl/7.54.0Accept: */*Frank: xxx //可无视复制代码
请求示例2
curl -X POST -s -v -H "Frank: xxx" -- "https://www.baidu.com"复制代码
请求的内容
POST / HTTP/1.1Host: www.baidu.comUser-Agent: curl/7.54.0Accept: */*Frank: xxx //可无视复制代码
请求示例3
curl -X POST -d "1234567890" -s -v -H "Frank: xxx" -- "https://www.baidu.com"复制代码
请求的内容
POST / HTTP/1.1Host: www.baidu.comUser-Agent: curl/7.54.0Accept: */*Frank: xxxContent-Length: 10Content-Type: application/x-www-form-urlencoded1234567890复制代码
请求的格式
1 动词 路径 协议/版本2 Key1: value12 Key2: value22 Key3: value32 Content-Type: application/x-www-form-urlencoded2 Host: www.baidu.com2 User-Agent: curl/7.54.03 4 要上传的数据复制代码
注:
1.请求最多包含四部分,最少包含三部分。(也就是说第四部分可以为空)2.第三部分永远都是一个回车(\n)3.动词有 GET POST PUT PATCH DELETE HEAD OPTIONS 等4.这里的路径包括「查询参数」,但不包括「锚点」5.如果你没有写路径,那么路径默认为 /6第 2 部分中的 Content-Type 标注了第 4 部分的格式复制代码
HTTP请求动词
GET : 用于从服务器获取资源信息完成请求后返回状态码 200 OKPOST : 用于创建新资源(上传、登录)创建完成后返回状态码 201 CreatedPUT : 用于完整的替换资源或者创建指定身份的资源(整体更新)如果是创建了资源,则返回 201 Created如果是替换了资源,则返回 200 OKPATCH : 用于局部更新资源(部分更新)完成请求后返回状态码 200 OKHEAD : 用于只获取请求某个资源返回的头信息DELETE : 用于删除某个资源完成请求后返回状态码 204 No ContentOPTION : 用于获取资源支持的所有 HTTP 方法复制代码
用 Chrome 发请求
1.打开 Network2.地址栏输入网址3.在 Network 点击,查看 request,点击「view source」4.点击「view source」,可以看到请求的前三部分5.如果有请求的第四部分,那么在 FormData 或 Payload 里面可以看到复制代码
HTTP响应
有请求必有响应,上述请求1、请求2的响应如下:
响应示例1
响应内容
HTTP/1.1 200 OKAccept-Ranges: bytesCache-Control: private, no-cache, no-store, proxy-revalidate, no-transformConnection: Keep-AliveContent-Length: 2443Content-Type: text/htmlDate: Tue, 10 Oct 2017 09:14:05 GMTEtag: "5886041d-98b"Last-Modified: Mon, 23 Jan 2017 13:24:45 GMTPragma: no-cacheServer: bfe/1.0.8.18Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/ ……复制代码
响应示例2
响应内容
HTTP/1.1 302 FoundConnection: Keep-AliveContent-Length: 17931Content-Type: text/htmlDate: Tue, 10 Oct 2017 09:19:47 GMTEtag: "54d9749e-460b"Server: bfe/1.0.8.18 ……复制代码
响应的格式
1 协议/版本号 状态码 状态解释2 Key1: value12 Key2: value22 Content-Length: 179312 Content-Type: text/html34 要下载的内容复制代码
状态码是服务器对浏览器说的话第 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