第一课:网络基本知识
(一)关于网络请求
1. URL
一个网址(URL)的内容一般如下: http://www.baidu.com:80 ( 一般默认端口号是80 )
-
在符号#后面表示锚点, 会跳转到指定页面的特点区间,比如:
item.jd.com/11936238.html#product-detail -
在符号?后面表示输入参数,比如: www.baidu.com/s?wd=hello 就会搜索‘hello’
2. HTTP请求的格式
| 部分 | 详情 |
|---|---|
| 请求行(Request Line):请求行包含了请求的方法、请求的URL(统一资源定位符)和协议版本 | GET /example-page.html HTTP/1.1 |
| 请求头(Request Headers):请求头包含了关于请求的附加信息,以键值对的形式呈现,每个键值对由冒号分隔 | HeaderName: HeaderValue |
| 示例请求头 | User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.0.0 Safari/537.36 |
| — | Content-Type: application/json |
| 请求体(Request Body):对于一些HTTP请求,例如POST请求,请求体包含了要发送给服务器的数据。请求体的格式取决于请求的内容类型(Content-Type)。 | {"key1": "value1", "key2": "value2"} |
3. 状态码
| 状态代码 | 描述 |
|---|---|
| 1xx (Informational) | 请求正在处理或需要进一步的信息。 |
| 100 Continue | 服务器已接收了部分请求,客户端应该继续发送请求的其余部分。 |
| 2xx (Successful) | 请求已成功接收、理解和处理。 |
| 200 OK | 表示请求成功,服务器已成功处理了请求,并返回了所请求的资源。 |
| 201 Created | 表示请求已经被成功处理,并且服务器已创建了一个新的资源,通常在创建资源成功时使用。 |
| 204 No Content | 表示请求已成功处理,但服务器没有返回任何内容,通常在处理DELETE请求等时使用。 |
| 3xx (Redirection) | 客户端需要采取进一步的操作来完成请求。 |
| 301 Moved Permanently | 请求的资源已永久移动到新的URL,客户端应该更新其链接。 |
| 4xx (Client Error) | 客户端发送的请求有错误。 |
| 400 Bad Request | 表示请求有语法错误或无法理解服务器的请求。 |
| 401 Unauthorized | 表示需要进行身份验证才能访问资源,客户端需要提供有效的身份验证信息。 |
| 403 Forbidden | 表示服务器理解请求,但拒绝执行该请求,通常是因为权限不足。 |
| 404 Not Found | 表示请求的资源不存在,服务器未能找到所请求的资 源。 |
| 5xx (Server Error) | 服务器在处理请求时出现了错误。 |
| 500 Internal Server Server | 表示服务器在处理请求时发生了内部错误,通常是服务器出现问题。 |
| 502 Bad Gateway | 表示服务器作为网关或代理,从上游服务器接收到无效的响应。 |
| 503 Service Unavailable | 表示服务器当前无法处理请求,通常是由于服务器过载或维护等原因。 |
4. response headers响应标头
| 头部字段 | 描述 |
|---|---|
| Cache-Control: must-revalidate, no-cache, private | 指示客户端和代理服务器如何缓存响应。must-revalidate 表示必须重新验证缓存,no-cache 表示不允许缓存,private 表示响应只能被单个用户缓存。 |
| Connection: keep-alive | 表示客户端与服务器之间的连接状态。keep-alive 表示客户端要求保持连接以复用该连接,以减少后续请求的延迟。 |
| Content-Encoding: br | 表示响应主体的内容编码方式。br 表示使用 Brotli 压缩算法进行编码。 |
| Content-Type: text/html; charset=utf-8 | 表示响应主体的内容类型。text/html; charset=utf-8 表示响应是HTML文档,字符集为UTF-8。 |
| Date: Thu, 16 Nov 2023 02:56:38 GMT | 表示响应的日期和时间,用于缓存和验证响应的新鲜度。 |
| Expires: Sun, 1 Jan 2006 01:00:00 GMT | 表示响应的过期时间。设置 为一个已经过去的时间,意味着该响应已经过期,不能再被缓存使用。 |
| Keep-Alive: timeout=30 | 设置了与服务器的连接保持时间,timeout=30 表示在没有活动的情况下,连接将在30秒后关闭。 |
| Pragma: no-cache | 一个旧的HTTP头部字段,通常用于控制缓存行为。no-cache 表示不允许缓存。 |
| Server: dae | 表示服务器的标识。 |
| Set-Cookie: ck="deleted"; max-age=0; domain=.douban.com; expires=Thu, 01-Jan-1970 00:00:00 GMT; path=/ | 用于在客户端设置或删除Cookie,这里删除了名为 "ck" 的Cookie。 |
| Set-Cookie: dbcl2="deleted"; max-age=0; domain=.douban.com; expires=Thu, 01-Jan-1970 00:00:00 GMT; path=/ | 用于在客户端设置或删除Cookie,这里删除了名为 "dbcl2" 的Cookie。 |
| Strict-Transport-Security: max-age=15552000; | 设置了严格传输安全性策略,max-age=15552000 表示在接下来的约半年内,浏览器只能通过HTTPS连接来访问该站点。 |
| Transfer-Encoding: chunked | 表示响应主体的传输编码方式,chunked 表示响应主体以分块方式传输。 |
| X-Dae-App: sns | 自定义的HTTP头部,用于传递额外的信息或安全策略。 |
| X-Dae-Instance: home | 自定义的HTTP头部,用于传递额外的信息或安全策略。 |
| X-Dae-Mountpoint: True | 自定义的HTTP头部,用于传递额外的信息或安全策略。 |
| X-Douban-Mobileapp: 0 | 自定义的HTTP头部,用于传递额外的信息或安全策略。 |
| X-Frame-Options: SAMEORIGIN | 自定义的HTTP头部,用 于传递额外的信息或安全策略。 |
| X-Xss-Protection: 1; mode=block | 自定义的HTTP头部,用于传递额外的信息或安全策略。 |
5. request headers请求标头
| 头部字段 | 描述 |
|---|---|
| Accept: text/html,application/xhtml+xml,application/xml; q=0.9,image/webp,image/apng,/; q=0.8,application/signed-exchange;v=b3;q=0.7 | 指示客户端可以接受的响应内容类型(MIME类型)。可以接受HTML文档、XHTML文档、XML文档、WebP图片等,其中q参数表示了对各种类型的优先级,数字越高表示优先级越高。 |
| Accept-Encoding: gzip, deflate, br | 指示客户端支持的响应内容编码方式,例如gzip、deflate和br(Brotli压缩算法)。服务器可以根据这个字段来选择合适的内容编码方式以减小传输大小。 |
| Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 | 指示客户端首选的响应内容语言。首选语言是中文(zh-CN)和英语(en),其中q参数表示了对各种语言的优先级,数字越高表示优先级越高。 |
| Connection: keep-alive | 表示客户端与服务器之间的连接状态。keep-alive表示客户端要求保持连接以复用该连接,以减少后续请求的延迟。 |
| Cookie: ll="118172"; bid=_U1E8CXk3y0; __utmz=30149280.1697636418.1.1.utmcsr=cn.bing.com | utmccn=(referral) |
| Host: www.douban.com | 指定了目标服务器的主机名,这是HTTP/1.1中的必选字段。 |
| Sec-Ch-Ua: "Microsoft Edge";v="119", "Chromium";v="119", "Not?A_Brand";v="24" | 它是用于指示浏览器和操作系统信息的头部。表示浏览器是Microsoft Edge和Chromium的一个变体。 |
| Sec-Ch-Ua-Mobile: ?0 | —— |
| Sec-Ch-Ua-Platform: "Windows" | —— |
| Sec-Fetch-Dest: document | Sec-Fetch相关字段用于指示请求的来源和模式。Sec-Fetch-Dest表示请求的目标是文档。 |
| Sec-Fetch-Mode: navigate | Sec-Fetch-Mode表示请求的模式是导航。 |
| Sec-Fetch-Site: none | —— |
| Sec-Fetch-User: ?1 | —— |
| Upgrade-Insecure-Requests: 1 | 指示浏览器在HTTP页面上自动升级到HTTPS请求,以增强安全性。 |
| User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0 | 包含了客户端的用户代理信息,用于标识客户端的类型和版本。表示客户端是运行在Windows NT 10.0操作系统上的Microsoft Edge浏览器。 |
6. request.get() 中包含的参数:
| 参数名 | 类型 | 描述 |
|---|---|---|
| url | 字符串 | 必需。表示要请求的目标URL。 |
| params | 字典或字节序列 | 可选。用于向URL添加查询参数,允许在GET请求中传递数据,如搜索关键字或过滤条件。 |
| headers | 字典 | 可选。用于设置HTTP请求头部信息,如User-Agent、Accept-Language等,模拟不同类型的客户端。 |
| cookies | 字典或CookieJar对象 | 可选。用于设置请求中的Cookie信息,通常用于身份验证或会话管理。 |
| auth | 元组 | 可选。用于进行身份验证的元组,通常包括用户名和密码。 |
| timeout | 浮点数 | 可选。用于设置请求的超时时间,单位是秒。如果在指定时间内未收到响应,则会引发超时异常。 |
| allow_redirects | 布尔值 | 可选。指示是否允许自动重定向。如果设置为True(默认值),则请求会自动遵循服务器返回的重定向响应。 |
| proxies | 字典 | 可选。用于设置代理服务器的配置,以实现通过代理进行请求。 |
| verify | 布尔值或字符串 | 可选。用于控制SSL证书验证。True(默认)验证SSL证书的有效性,False禁用验证,或指定自定义CA证书文件路径。 |
| stream | 布尔值 | 可选。用于指示是否以流的方式获取响应内容。如果设置为True,则只下载响应头部信息,按需下载响应内容。 |
7. 顶级域名
顶级域名(Top-Level Domain,TLD)是互联网域名系统(DNS)中的最高级别域名分类,它位于域名的最右侧,用于标识域名的类型或国家/地区。
主要的顶级域名包括以下几种类型:
| 类型 | 描述 | 示例 |
|---|---|---|
| 通用顶级域名 (gTLDs) | 用于表示不特定于国家/地区的域名类型。 | .com:商业.org:非营利组织.net:网络服务提供商.gov:政府机构.edu:教育机构.mil:军事机构.int:国际组织.info:信息资源.biz:商业用途 |
| 国家和地区顶级域名 (ccTLDs) | 用于表示特定国家或地区的域名。 | .us:美国.uk:英国.de:德国.jp:日本.cn:中国 |
| 新通用顶级域名 (new gTLDs) | 相对较新的顶级域名,引入了更多的多样性和选择。 | .app、.blog、.guru、.io 等 |
| 基础设施顶级域名 | 用于表示互联网基础设施。 | .arpa(用于逆向域名解析) |
8. 不同的文件类型
| 请求类型 | 用途 | 包含的数据类型 |
|---|---|---|
| XHR (XMLHttpRequest) | 由JavaScript通过XMLHttpRequest对象发送的请求。用于在不刷新网页的情况下加载或提交数据,实现异步通信。 | 常用于获取JSON数据或XML数据。 |
| webp | 图像格式,用于提高网页上图像的压缩效率和加载速度。 | 包含图像数据,用于显示网页上的图像。 |
| preflight (OPTIONS) | CORS(跨源资源共享)机制中的预检请求。用于确定是否允许跨源请求。 | 不包含实际数据,用于验证跨域请求的合法性。 |
| fetch | 现代的网络请求API,用于在JavaScript中发起HTTP请求。 | 可用于获取JSON、HTML、XML、文本等数据。 |
| document | 获取整个HTML文档的请求。当访问网页时,浏览器通过此请求获取网页内容。 | 包含整个HTML文档,包括网页的结构和内容。 |
| audio | 用于获取音频文件,以便在网页上播放声音或音乐。 | 包含音频文件数据,用于在网页上播放音频。 |
| stylesheet | 用于获取网页的样式表(CSS文件)。定义了网页的外观和布局。 | 包含CSS文件数据,用于渲染网页的样式。 |
9. 异步通信
异步通信的特点是不需要等待一个操作完成,而可以同时执行其他操作。
在网页开发中,异步通信通常是指浏览器通过JavaScript发起的网络请求,而不会阻止或中断页面的其他操作。 例如,当用户点击一个按钮时,网页可以通过异步通信发送请求到服务器,而不会阻止用户继续与页面交互。