HTTP基本原理
- 1,URL组成部分详解
- 2,HTTP和HTTPS
- 3,HTTP请求过程
- 4,请求(Request)
- 请求方法(Request Method)
- 请求的网址(Request URL)
- 请求头(Request Headers)
- 请求体(Request Body)
- 5、响应(Response)
- 响应状态码(Response Status Code)
- 响应体(Response Body)
- 6、HTTP/2.0
- 二进制分帧层
- 多路复用
- 流量控制
- 服务端推送
1,URL组成部分详解
URL是uniform Resource Locator的简写,统一资源定位符
一个URL由以下几部分组成:
- scheme:代表的是访问的协议,一般为http或https以及ftp等
- host:主机名,域名,比如www.baidu.com
- port:端口号,http协议是80端口,https协议是443端口
- path:查找路径。比如:www.baidu.com/trending/now,后面的trending/now就是path
- query-string:查询字符串,用来传参。比如:www.baidu.com/s?wd=python&a=1,后面的wd=python和a=1就是查询字符串
- anchor:锚点,后台一般不用管。前端用来做页面定位
2,HTTP和HTTPS
- HTTP:全称是Hyper Text Transfer Protocol,中文名叫做超文本传输协议;HTTP协议是从网络传输超文本数据到本地浏览器的传送协议,它能保证高效而准确地传送超文本文档。
- HTTPS:全称是Hyper Text Transfer Protocol over Secure Socket Layer,是以安全为目标的HTTP通道,简单将是HTTP的安全版,即在HTTP下加入SSL层,简称HTTPS。
3,HTTP请求过程
我们在浏览器中输入一个 URL,回车之后便会在浏览器中观察到页面内容。解析这个过程
- 1,浏览器向网站所在的服务器****发送了一个请求;网页服务器****接收到这个请求后进行处理和解析;服务器返回对应的响应接着传回给浏览器;浏览器对返回的响应进行解析(相应中包含页面的源代码等内容,所以需解析);网页呈现
- 2, Chrome 浏览器开发者模式下的 Network 监听组件
-
- Name:请求的名称,一般会将 URL 的最后一部分内容当作名称。
-
- Status:响应的状态码,这里显示为 200,代表响应是正常的。通过状态码,我们可以判断发送了请求之后是否得到了正常的响应。
-
- Type:请求的文档类型。这里为 document,代表我们这次请求的是一个 HTML 文档,内容就是一些 HTML 代码。
-
- Initiator:请求源。用来标记请求是由哪个对象或进程发起的。
-
- Size:从服务器下载的文件和请求的资源大小。如果是从缓存中取得的资源,则该列会显示 from cache。
-
- Time:发起请求到获取响应所用的总时间。
- Time:发起请求到获取响应所用的总时间。
4,请求(Request)
- 请求:客户端向服务器发出,可以分为4个部分:
-
- 请求方法(Request Method)
-
- 请求网址(Request URL)
-
- 请求头(Request Headers)
-
- 请求体(Request Body)
请求方法(Request Method)
- 请求方法:用于标识请求客户端请求服务端的方式,常见的请求方式有两种:GET和POST
-
- GET请求中的参数包含在URL里面,数据可以在URL中看到,也就是Query信息部分;而POST请求的URL不回包含这些数据,数据都是通过表单形式传输的,会包含在请求体中,
-
- GET请求提交的数据最多只有1024字节,而POST方式没有限制
- 其他请求方法:
-
- HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
-
- PUT 从客户端向服务器传送的数据取代指定文档中的内容
-
- DELETE 请求服务器删除指定的页面
-
- CONNECT 把服务器当作跳板,让服务器代替客户端访问其他网页
-
- OPTIONS 允许客户端查看服务器的性能
-
- TRACE 回显服务器收到的请求,主要用于测试或诊断
请求的网址(Request URL)
- 请求的网址可以唯一确定我们想请求的资源,关于URL的构成解析如上
请求头(Request Headers)
- 请求头用来说明服务器要使用的附加信息,比较重要的信息有Cookie、Referer、Uaer-Agent等
- 常见的头信息:
-
- Accept:请求报头域,用于指定客户端可接受哪些类型的信息。
-
- Accept-Language:指定客户端可接受的语言类型。
-
- Accept-Encoding:指定客户端可接受的内容编码。
-
- Host:用于指定请求资源的主机 IP 和端口号,其内容为请求 URL 的原始服务器或网关的位置。从 HTTP 1.1 版本开始,请求必须包含此内容。
-
- Cookie:也常用复数形式 Cookies,这是网站为了辨别用户进行会话跟踪而存储在用户本地的数据。它的主要功能是维持当前访问会话。
-
- Referer:此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计、防盗链处理等。
-
- User-Agent:简称 UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息,可以****伪装为浏览器;如果不加,很可能会被识别为爬虫。
-
- Content-Type:也叫互联网媒体类型(Internet Media Type)或者 MIME 类型,在 HTTP 协议消息头中,它用来表示具体请求中的媒体类型信息。
请求体(Request Body)
- 请求体一般承载的内容是是POST请求中的表单数据,而对于GET请求,请求体为空。
- Content-Type 和 POST 提交数据方式的关系:
5、响应(Response)
- 相应:由服务器返回给客户端,可以分为三部分:
-
- 相应状态码(Response Status Code)
-
- 响应头(Response Headers)
-
- 响应体(Response Body)
响应状态码(Response Status Code)
- 相应状态码:表示服务器的响应状态,如200代表服务器正常相应;404代表页面未找到;500代表服务器内部发生错误。我们可以根据状态码来判断服务器响应状态
- 常见的错误代码及错误原因
响应体(Response Body)
- 响应体:最关键的部分,相应的正文数据都在响应体中。比如请求网页时,它的响应体就是网页的 HTML 代码;请求一张图片时,它的响应体就是图片的二进制数据。我们做爬虫请求网页后,要解析的内容就是响应体。
- 在做爬虫时,我们主要通过响应体得到网页的源代码、JSON 数据等,然后从中做相应内容的提取。
6、HTTP/2.0
- HTTP/2.0 在内部实现上新的二进制分帧层,这是没法与之前的 HTTP/1.x 的服务器和客户端实现向后兼容的,所以直接修改了主版本号为 2.0。
二进制分帧层
- HTTP/2.0 所有性能增强的核心就在于这个新的二进制分帧层。HTTP/2.0 做了优化,将文本格式修改为了二进制格式,使得解析起来更加高效。同时将请求和响应数据分割为更小的帧,并采用二进制编码。
多路复用
- 在 HTTP/2.0 中,由于又了二进制分帧技术的加持,HTTP/2.0 不用再以来 TCP 连接去实现多路并行了,客户端和服务器可以将 HTTP 消息分解为互不依赖的帧,然后交错发送,最后再在另一端把它们重新组装起来
流量控制
- 流量控制是一种阻止发送方向接收方发送大量数据的机制,以免超出后者的需求或处理能力。可以理解为,接收方已经太繁忙了,来不及处理收到的消息了,但是发送方还在一直大量发送消息,这样就会出现一些问题。
服务端推送
HTTP/2.0 新增的另一个强大的新功能是,服务器可以对一个客户端请求发送多个响应。 换句话说,除了对最初请求的响应外,服务器还可以向客户端推送额外资源,而无需客户端明确地请求。