HTTP是什么?
HTTP 全称是“超文本传输协议”,是互联网上应用最广泛的应用层协议,用于客户端和服务器之间的通信。
HTTP 的实现在 HTTP 3.0之前都是基于传输层的 TCP 实现的, HTTP 3.0 改为了基于 UDP 实现,但是现在市面上只要使用的是 HTTP 1.1 、HTTP 2.0。
HTTP 的体现在生活中随处可见,比如使用浏览器访问网站时,就是使用的 HTTP 来传输数据的,在早期,包括了登录网站的用户名、密码等都是经过 HTTP 明文传输,这样也就意味着会造成用户信息泄露,这就涉及了网络安全问题,这个话题以后再说。
HTTP 工作流程
HTTP 协议是一个经典的“一问一答” 的模型,就是我们通过浏览器向服务器发送一个 HTTP请求,然后被访问的服务器有一个相应。
HTTP 协议格式
这里格式分为请求格式和响应格式,请求格式包含请求头、请求报头、空行、请求正文,响应格式包含 状态码、响应报头、空行、请求正文。
HTTP 请求格式
首行:[方法] + [URL] + [版本]
Header:请求的属性,冒号分割的键值对;每组属性之间使⽤\n分隔;遇到空⾏表⽰Header部分结束
Body:空⾏后⾯的内容都是Body.Body允许为空字符串.如果Body存在,则在Header中会有⼀个Content-Length属性来标识Body的⻓度;
HTTP 响应格式
⾸⾏:[版本号] + [状态码] + [状态码解释]
Header:请求的属性,冒号分割的键值对;每组属性之间使⽤\n分隔;遇到空⾏表⽰Header部分结束
Body:空⾏后⾯的内容都是Body.Body允许为空字符串.如果Body存在,则在Header中会有⼀个
Content-Length属性来标识Body的⻓度;如果服务器返回了⼀个html⻚⾯,那么html⻚⾯内容就是在body中.
冷知识:
HTTP 是依赖 TCP 协议,而 TCP 是面向字节流的,没有空行就会出现粘包问题。
URL
URL 就是我们口中说的 “网址” ,每一个 URL 都对应这唯一的资源。
- 协议名:常见的有 HTTP 、HTTPS ;
- 登录信息:目前已经淘汰了,没有网站会用这种方式进行认证了,因为非常不安全。
- 服务器地址:这里的会通过 DNS 服务器 对域名和 IP 地址进行匹配,我们只用记住便于记忆的域名,有时一个 IP 会对应着多个域名。
- 查询字符串:也就是 “query string”
url encode
像/?:等这样的字符,已经被url当做特殊意义理解了.因此这些字符不能随意出现. ⽐如,某个参数中需要带有这些特殊字符,就必须先对特殊字符进⾏转义.
转义的规则如下:将需要转码的字符转为16进制,然后从右到左,取4位(不⾜4位直接处理),每2位做 ⼀位,前⾯加上%,编码成%XY格式
例如:在百度上搜 “C++”,如图所示 “+” 被转译成了 “%2B”
HTTP 请求
“方法”(method)
1、GET 方法
GET 是最常⽤的 HTTP ⽅法.常⽤于获取服务器上的某个资源.在浏览器中直接输⼊ URL,此时浏览器就会发送出⼀个 GET 请求.
特点:
2、POST 方法
POST⽅法也是⼀种常⻅的⽅法.多⽤于提交⽤⼾输⼊的数据给服务器(例如登陆⻚⾯).
通过HTML中的form标签可以构造POST请求,或者使⽤JavaScript的ajax也可以构造POST请求.
特点:
报头参数
1、Host
表示服务器主机的地址和端口
2、Conten-Length
表示body 中的数据长度
3、Conten-Type
表示请求的body 中的数据类型
4、User-Agent
表示浏览器/操作系统的属性
5、Referer
表示这个页面是从哪个页面跳转过来的
6、Cookie
当我们打开一个网站时,如果这个网站我们曾经登录过,那么当我们再次打开网站时,发现就不需要再次登录了,而是直接进入了首页。例如bilibili,csdn等网站。这是怎么做到的呢?其实就是游览器保存了我们的cookie,里面记录了一些信息,当然,这些cookie是服务器创建后返回给游览器的。游览器只进行了保存。