当前位置: 首页 > news >正文

初识HTTP

与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

转载于:https://juejin.im/post/5a3930be6fb9a044fc44de86

相关文章:

  • jfinal-admin 后台框架永久开源
  • 数据库索引实例之二consistent gets
  • Windows下搭建Redis集群
  • iOS系列开发-版本控制工具Git的使用
  • workSpace中多个工程方法互调
  • PXE网络装机服务器
  • 简单升级了一下可着色的ListBox控件
  • jsoup入门
  • ospf和rip和静态路由三者的区别?各能实现什么功能?
  • 【译】ASP.NET Identity Core 从零开始
  • 工作中用到的linux、SQL、Python语句
  • php 几个算法
  • 2018年武汉大学653数学分析
  • iOS 中表格按时间戳分组排序
  • Java设计模式23种(搞笑版) (转)
  • 【前端学习】-粗谈选择器
  • ➹使用webpack配置多页面应用(MPA)
  • AHK 中 = 和 == 等比较运算符的用法
  • Angular2开发踩坑系列-生产环境编译
  • Codepen 每日精选(2018-3-25)
  • docker容器内的网络抓包
  • IDEA常用插件整理
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • JS实现简单的MVC模式开发小游戏
  • Median of Two Sorted Arrays
  • node 版本过低
  • spring-boot List转Page
  • TypeScript迭代器
  • 闭包,sync使用细节
  • 当SetTimeout遇到了字符串
  • 浅谈Golang中select的用法
  • 悄悄地说一个bug
  • 数组的操作
  • 通信类
  • 自动记录MySQL慢查询快照脚本
  • 【云吞铺子】性能抖动剖析(二)
  • ​虚拟化系列介绍(十)
  • (06)金属布线——为半导体注入生命的连接
  • (30)数组元素和与数字和的绝对差
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二十三)Flask之高频面试点
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (三)elasticsearch 源码之启动流程分析
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (一) springboot详细介绍
  • (一)80c52学习之旅-起始篇
  • (转)创业的注意事项
  • .net core开源商城系统源码,支持可视化布局小程序
  • .Net IE10 _doPostBack 未定义
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET构架之我见