学习自刘大拿的Python课程
1 HTTP简介
- 超文本
- URL
- HTTP
1.1 超文本 Hyper Text
-
包含有超链接(Link)和各种多媒体元素标记(Markup)的文本。
即不全是文本的文本,信息多元化
这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page)。这些链接使用URL表示。最常见的超文本格式是超文本标记语言HTML。
1.2 URL
- URL即统一资源定位符(Uniform Resource Locator),用来唯一地标识万维网中的某一个文档
相当于某一个资源(如文本、图片等)上传到网上的唯一识别码
。
- 命名规则:
由协议、主机和端口(默认为80)以及文件名三部分构成。
- 主机(IP) + 端口:(端口值) :IP为四个数字串,不好记 → 起别名(www.xxx.com)
- 此处文件名路径不一定为该机器真实目录,但可以与其主机文件对应(用server对应) 一般首页为
/index.html
1.3 HTTP超文本传输协议
- 是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能。
2 HTTP工作原理
- 请求/响应模型
- 连接方式
- 无状态性
2.1 请求/响应模型
http请求/响应模型- 如上,在用户点击URL为 http://www.sxtyu.com:80/news/index.html 的链接后,浏览器和Web服务器执行以下动作:
① 浏览器分析超链接中的URL
② 浏览器向DNS请求解析www.sxtyu.com
的IP地址
③ DNS将解析出的IP地址202.2.16.21返回浏览器DNS解析器像军队邮寄的邮局,出于保密需要。全球仅十几台DNS根服务器,大多在USA。
④ 浏览器与服务器建立TCP连接(80端口)
⑤ 浏览器请求文档:GET/index.html
⑥ 服务器给出响应,将文档index.html发送给浏览器
⑦ 释放TCP连接
⑧ 浏览器显示index.html中的内容
-
持久链接与非持久链接
持久、非持久链接
- 域名系统(英语:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
- 传输控制协议(英语:Transmission Control Protocol,缩写:TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
2.2 无状态性
记不住曾经访问过的机器
- 是指同一个客户端(浏览器)第二次访问同一个Web服务器上的页面时,服务器无法知道这个客户曾经访问过。HTTP的无状态性简化了服务器的设计,使其更容易支持大量并发的HTTP请求。
3 HTTP报文结构
- 请求报文
- 返回报文
- 请求报文中的方法
- 响应报文中的状态码
- 首部字段或消息头
- 报文结构实例
3.1 请求/返回报文
- 即从客户端(浏览器)向Web服务器发送的请求报文。报文的所有字段都是ASCII码。
- 请求行:典型的 动宾 结构
- 首部行:用来说明浏览器、服务器或报文主体的一些信息。
合同头
- 实体主体(Entity body):完全自定义
合同条款
3.2 请求报文中的方法
- 方法(Method)是对所请求对象所进行的操作,也就是一些命令。
- 常见请求报文方法:有些可以不实现
方法 | 功能 |
---|---|
GET | 请求读取一个Web页面 |
POST | 附加一个命名资源(如Web页面),给服务器发信息 |
DELETE | 删除Web页面(比如用户注销) |
CONNECT | 用于代理服务器 |
HEAD | 请求读取一个Web的首部 |
PUT | 请求存储一个Web页面 |
TRACE | 用于测试,要求服务器送回收到的请求,追踪 |
OPTION | 查询特定选项 |
3.3 响应报文中的状态码
- 状态码(Status-Code)是响应报文状态行中包含的一个3位数字,指明特定的请求是否被满足,如果没有满足,原因是什么,状态码分为以下五类:
状态码 | 含义 | 已定义范围 | 例如 |
---|---|---|---|
1xx | 通知信息提示 | 100~101 | 100=服务器正在处理客户请求 |
2xx | 成功 | 200~206 | 200=请求成功(OK),仅代表请求到,不应太乐观 |
3xx | 重定向 | 300~305 | 301=页面改变了位置 |
4xx | 客户端错误 | 400~415 | 401=未授权,需要输入用户名和密码(Unauthorized);403=禁止的页面;404=页面未找到 |
5xx | 服务器错误 | 500~505 | 500=服务器内部错误;503=以后再试 |
- 具体各状态码的含义,请参考W3C的 HTTP1.1标准规范RFC2616
3.4 首部字段或消息头
头(header) | 类型 | 说明 |
---|---|---|
User_Agent | 请求 | 关于浏览器和它平台的信息,如Mozilla5.0 (爬虫时要将Python程序伪装成其他平台程序,防止反爬禁止Python,可编辑此选项改为其他平台程序) |
Accept | 请求 | 客户能处理的页面的类型,如text/html |
Accept-Charset | 请求 | 客户可以接受的字符集,如Unicode-1-1 |
Accept-Encoding | 请求 | 客户能处理的页面编码方法,如gzip |
Accept-Language | 请求 | 客户端能处理的自然语言,如en(英语),zh-cn(简体中文) |
Host | 请求(必需) | 服务器的DNS名。从URL中提取出来,确认主机连接正确 |
Authorization | 请求 | 客户的信息凭据列表 |
Cookie | 请求 | 将以前设置的Cookie送回服务器,可用来作为会话信息 |
Data | 双向 | 信息被发送的时间和日期 |
Server | 响应 | 关于服务器的信息,如Microsoft-IIS/6.0 |
Content-Encoding | 响应 | 内容是如何被编码的(如gzip) |
Content-Language | 响应 | 页面所使用的自然语言 |
Content-Length | 响应(很重要) | 以字节计算的页面长度,要一致 |
Content-Type | 响应 | 页面的MIME类型 |
Last-Modified | 响应 | 页面最后被修改的时间和日期,在页面缓存机制中意义重大 |
Location | 响应 | 指示客户将请求发送给别处,即重定向到另一个URL |
Set-Cookie | 响应 | 服务器希望客户保存一个Cookie |
- 常见首部实例
首部实力 | 描述 |
---|---|
Date: Tue, 3Oct 1997 02:16:03 GMT | 服务器产生响应的日期 |
Content-length: 15040 | 实体的主体部分包含了15 040字节的数据 |
Content-type: image/gif | 实体的主体部分是一个GIF图片 |
Accept: image/gif, image/jpeg, text/html | 客户端可以接收GIF图片和JPEG图片以及HTML |
3.5 报文结构实例
请求和响应报文示例浏览器界面点 F12 键可打开Web开发界面,可直接看 网络
4 HTTP代理
- 什么是HTTP代理
- 使用HTTP代理的Web访问过程
4.1 HTTP代理
- HTTP代理又称Web缓存或代理服务器(Proxy Server),是一种网络实体,能代表浏览器发出HTTP请求,并将最近的一些请求和响应暂存在本地磁盘中,当请求的Web页面先前暂存过,则直接将暂存的页面发给客户端(浏览器),无须再次访问Internet.
- 个人认为代理服务器扮演的角色:地方人民代表
- 听取人民(客户端)的诉求
- 向总部(服务器端)提出诉求
- 收到总部下达的解决办法,自己记录该解决办法(临时储存)
- 将解决办法告诉人民
- 当再有人民提出该诉求,直接将自己记录的解决办法告诉他,无需再向总部提出诉求。
-
这种方法主要解决的是每个客户端同时访问资源服务器导致的带宽不够导致的传输效率低下的问题。
校园网代理服务器示意图
网友评论