http基础


HTTP基本原理

1. URI URL

URI = URL(统一资源定位符,需要有路径) + URN(统一资源名称,只需要独一无二,例如ID card)

URL 统一格式:

scheme://[username:password@]hostname[:port][/path][;parameters][?query][#fragment]

解释:

scheme: 协议 也称protocol

[username:password@]:用户名和密码
hostname:主机地址

port:端口

path:路径,网络资源在服务器中的指定地址,类比操作系统中目录

parameters:参数,访问资源的附加信息

query:查询,查询某类资源,比如地址
https://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd=%E4%BD%A0%E5%A5%BD%E6%9D%8E%E7%84%95%E8%8B%B1
问号后面限制了搜索引擎关键词
fragment:片段,对资源描述的部分补充.应用之一作为现代前端框架做路由管理,其二是HTML锚点(href = “#top”)

2. HTTP HTTPS

HTTP只是单纯把超文本数据从网络传输到本地浏览器,HTTPS增加了SSL层,传输内容经过SSL加密.

这两个协议都是应用层协议,只负责信息传输的规范,其传输层还是TCP/IP(三次握手,四次挥手)协议,负责服务器和本地主机建立联系.

3.HTTP/HTTPS请求过程:

客户端发送Request(请求),服务器收到请求进行解析,然后服务器返回Response(响应).浏览器得到响应之后进行响应解析渲染呈现.

4.请求

请求 = 请求方法 + 请求网址 + 请求头 + 请求体

请求方法

常用getpost

GET方法:

当输入网址按下回车的时候就已经输入了GET方法到服务器,请求参数(query)会和URL一起发给服务器.一个Get请求一次最多发送1024Byte大小数据

POST方法:

当输入账号密码等需要提交表单的时候就是发送了post方法,参数不会包含在URL中,而是包含在请求体里面发给服务器.发送的数据没有大小要求.

不常用方法有HEAD,PUT,DELETE,CONNECT,OPTIONS,TRACE.

  • HEAD:类似于GET请求,但是Response中没有具体内容,用于获取响应头.
  • PUT: 用客户端发送给服务器的数据取代指定文档中的内容(修改操作,共享文档 或许是 )
  • DELET: 请求服务器删除指定页面(类似于不使用blank)
  • CONNECT: 通过服务器代替客户端访问其他网页(VPN)
  • OPTIONS: 允许客户端查看服务器性能
  • TRACE: 回显服务器收到的请求,主要用于测试和诊断

    请求网址

    URL,不再赘述.

    请求头(headers)

    服务器要使用的附加信息,常用来判断是否请求合法.

    常用请求头信息

  • Accept: 请求报头域,用于指定客户端可接受哪些类型的信息 (神画了一条线,说你只能在此地,不能逾越)
  • Accept-Language: 用于指定客户端的语言类型
  • Accept-Encoding:用于指定客户端可接受的编码(常用UTF-8,也有GBK)
  • Host:用于指定请求资源的主机IP和端口号
  • Cookie/Cookies: 网站用于辨别用户,进行会话跟踪而存储在 用户本地 的数据.功能是 维持当前访问会话.

    例如:
    登录网站之后,客户端本地会保存服务器发来的Cookies,这样之后在网站内跳转,凭借Cookies就能保持登录状态,如果Cookies被删掉就要重新获得Cookies.(为了保证个人信息安全,请及时删除Cookies,以免病毒获得了你的Cookies,登入网站)
  • Referer:用于标识请求是从那个页面发过来,判断访问是否合法(你不能在不进入浏览器的情况直接进入某宝的付款页面,但是正常登录就行,因为Referer不合法),以及来源统计(网站统计访问人数和来源).
  • User-Agent/UA:帮助服务器识别客户端使用的操作系统以及版本、浏览器和版本信息.爬虫加上此头用于模仿浏览器的正常访问,如果不加,该UA就是Python.
  • Content-Type: 也叫互联网媒体类型或者MIME类型,在HTTP中用来表示具体请求中的媒体类型信息,例如text/html表示HTML格式,image/gif表示GIF图片,application/json代表json类型

    请求体(body)

在GET中为空,POSI为提交的表单信息

Content-Type Post提交数据方式
application/x-www-form-urlencoded 表单数据
multipart/form-data 表单文件上传
application/json 序列化json数据(一种数据交换格式,本质是js对象的字符串表示方法)
text/xml xml数据(一种可拓展标签语言,用来传递数据)

5.响应

响应状态码

  • 状态码分类:
分类 分类描述
1xx 信息,服务器收到请求,需要请求者继续执行操作
2xx 成功,操作被成功接收并处理
3xx 重定向,需要进一步的操作以完成请求
4xx 客户端错误,请求包含语法错误或无法完成请求
5xx 服务器错误,服务器在处理请求的过程中发生了错误
  • 详解:
  • 状态码

详见响应状态码

响应头

响应头包含服务器对请求的应答

  • Date:日期
  • Last_Modified:指定资源的最后修改时间
  • Content_Encoding:指定响应内容的编码
  • Server:服务器信息
  • Content_Type:文档类型,见请求头Content_Type对应数据类型
  • Set_Cookie:服务器传给客户端的Cookies,需要在下次访问网站时携带此Cookie
  • Expires:用于指定响应的过期时间,在此时间内浏览器可把内容写入缓存,下次直接从缓存中获得.

响应体

客户端对于请求返回的响应数据皆在此部分.是爬虫的爬取目标.

6.HTTP2.0

二进制分帧层

  • 帧是HTTP2.0中的概念.代表数据通信最小单位.比如请求头帧,请求体帧.
  • 数据流:一个虚拟的双向通道,有唯一整数ID标识.
  • 信息:与逻辑请求或响应信息对应的完整的一系列帧.

HTTP2.0 将HTTP协议通信分解为二进制编码帧的交换,帧对应特定数据流中的信息,在一个TCP中复用,从而提高效率.

多路复用

HTTP2.0通过讲HTTP消息分解为互不依赖的帧,交错发送,从而达到多路并行的效果(类似Pipeline),客户端再把这些帧拼接起来.

流控制

流控制是为了防止服务器向客户端发送过量数据,客户端来不及处理.因为HTTP2.0只在一个TCP内复用,无法使用TCP自带流控制API.

为了解决这一问题,HTTP2.0提供了简单构建块.

  • 流控制具有方向性.每个接受方都能按自身需求为每个数据流甚至整个连接设置窗口大小.
  • 流控制窗口大小是动态控制的.每个接受方都可以公布其窗口,当发送方发送DATA时窗口变小,接收方发出WINDOW_UPDATA时窗口变大.
  • 流控制无法停止.

    服务器推送

    服务器可以对一个客户端请求发送多个数据.这个常用于发送了HTML文件之后再把CSS和JS发送过去.

Author: Dovahkiin
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Dovahkiin !
  TOC