HTTP协议

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: HTTP协议

1.前情回顾

1.match 和 search 返回对象

2.findall 返回列表

3.sub返回的是替换之后的结果

4.split切割

5.贪婪和懒惰是相对的,而且是有前提的,需要满足全局的情况

6.\b在ASCII码中表示退格,有特殊的含义

在正则中也有特殊含义,匹配的是数字到非数字的边界("123!"匹配的是3和!之间),不是数据

\b 在ASCII是一个转义字符   表示退格 ASCII码8

  在正则中也有特殊的含义  用以匹配 数字-非数字字符边界 而不匹配数据

  单词边界符能够匹配中文符号、英文符号、空格、制表符、回车符号,以及各种边界

 

含义不一样 使用不一样  

  比如匹配字符串中\b字符 需要正则有\b且不加r

  如果 需要匹配 数字-非数字字符边界 则应该使用r'\b'

  re.match(r"h\f\b", "h\f\b").group()   # 以下代码合法吗

  re.match( "h\f\b", "h\f\b").group()   # 以下代码合法吗

 

那到底什么时候不能用r,什么时候应该用r呢

  如果匹配数据是ASCII码中转义字符的含义 那么不应该使用r字符

  除此之外一般情况下都可以加上r字符


7.\r是将正则中的\变成\\

8.浏览器-服务器工作流程

浏览器        发起资源请求;显示资源

DNS服务器  将域名转换为IP地址

web服务器   提供网页资源 图片视频音频

1. 用户在浏览器地址栏输入资源网址 URL(协议 主机名 资源路径)

2. 浏览器把网址中主机名发送DNS服务器 进行域名解析 获取到IP地址

3. 通过IP地址 和 (协议)端口 连接服务器 connect

4. 向服务器发起资源请求(包括资源路径)

5. 服务器会读取资源请求 解析 发送对应的资源数据给浏览器

6. 浏览器解析数据并且进行显示

7. 如果网页显示还需要其他资源 重复执行56步  直到获取到所有的资源


2.HTTP协议(重点是格式)

2.1简单介绍

协议:规定了数据的格式,就是一种约定,让双方可以通信。

HTTP协议作用:

就是浏览器和服务器之间传输网页资源的数据采用的一种协议格式

超文本传输协议(HTTP协议)

应用层次的协议

基于请求响应模式

基于TCP

91年0.9版本

97年1.1版本(现在使用的版本)

超文本就是超文本标记语言写的HTML

HTTP协议是基于TCP实现的应用层协议

TCP/IP模型每一层的作用:

按照图片右侧的例子理解一下即可,了解,不需要死记硬背。

HTTP协议的工作模式:一次请求request和一次响应response的模式

浏览器主动发起请求,服务器才响应。

响应的数据是两部分:一部分是请求结果,一部分是数据

2.2HTTP请求报文格式

2.2.1谷歌浏览器

开发者模式(WindowsF12打开):

  • Elements:查找网页源代码HTML中的任一元素,手动修改任一元素的属性和样式且能实时在浏览器里面得到反馈。
  • Console:记录开发者开发过程中的日志信息,且可以作为与JS进行交互的命令行Shell。
  • Sources:断点调试JS。
  • Network:从发起网页页面请求Request后分析HTTP请求后得到的各个请求资源信息(包括状态、资源类型、大小、所用时间等),可以根据这个进行网络性能优化。
1# 请求报文第一行,请求行,分为三部分
 2GET / HTTP/1.1
 3   # 请求方法 GET 获取资源  浏览器向服务器请求资源
 4   #        POST 浏览器向服务器提交数据
 5   #        HEAD 验证前后台工作是否正常
 6   # 资源请求路径(域名后面的就是请求路径)
 7   #      如果浏览器的路径是/或者没有   那么请求路径是就是/
 8   #      / 在web服务器中表示首页
 9   # HTTP协议版本
10# 请求头  名称:值
11Host: www.baidu.com
12   #请求的主机名称
13Connection: keep-alive
14   # 连接方式  保持存活<长连接>   close直接关闭<短连接>
15User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36
16   # 用户代理(浏览器身份) 适配网页(手机网页或者电脑网页):反爬Python3.5
17   # 爬虫的时候可以将自己伪装成其他用户   爬虫的时候不要将别人的网站弄奔溃
18Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
19   # 浏览器接受文件的类型 数据类型
20Accept-Encoding: gzip, deflate, br
21   # 可以接受的压缩算法   数据太大,网络传输过程中提高效率
22   #      可以节约带宽资源,提高网页传输效率
23Accept-Language: en-US,en;q=0.9
24   # 接受的语言  语言的优先级
25

课堂思考问题

请求行分为几部分、每一部分分别表示什么、请求头有什么特点、分别表示什么含义

2.2.2HTTP请求报文格式总结

请求行[方法  资源路径  版本 \r\n]      \r\n代表换行符

请求头[名称:值\r\n]

空行[\r\n]

请求体[存储的是  浏览器提交给服务器的数据]

# 请求报文
GET /index.html HTTP/1.1\r\n
Host: 127.0.0.1\r\n
Connection: keep-alive\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n
Accept-Encoding: gzip, deflate, sdch\r\n
Accept-Language: zh-CN,zh;q=0.8\r\n
\r\n


GET方法用以资源获取    一般都没有请求体,POST用以资源提交  一般都带请求体

GET方法用以资源获取    一般都没有请求体

请求行[GET  资源路径  版本 \r\n]      \r\n代表换行符

请求头[名称:值\r\n]

空行[\r\n]

POST用以资源提交  一般都带请求体

请求行[POST 资源路径  版本 \r\n]      \r\n代表换行符

请求头[名称:值\r\n]

空行[\r\n]

请求体[存储的是  浏览器提交给服务器的数据]

课堂思考问题:

1请求报文整个分为几部分,哪几部分

2post方法和get方法的请求报文有什么区别

3 常用的头部的意义

2.3响应报文

HTTP/1.1 200 OK
    start-line 起始行  状态行  响应行
    版本
    状态码  
        200成功 2xx表示成功  
        3xx表示重定向   302Found/307
           Location: https://www.baidu.com/
        4xx 客户端错误  404 Not Found
            表示用户端请求错误
       5xx 服务器错误  503服务不可用
   状态说明
# 响应头部说明
Connection: Keep-Alive    连接方式  HTTP/1.1默认 长连接
Content-Encoding: gzip    数据采用的压缩方式 解压缩
Content-Language:zh-CN   数据采用的语言
content-Length:1002      数据的长度,单位是字节
Content-Type: text/html(Content-Type: 
application/javascript;charset=UTF-8)
   数据类型   charset=UTF-8表示数据采用的字符集是utf-8
   有可能是网页有可能是图片
Date: Sun, 25 Nov 2018 04:10:00 GMT  日期时间
   格林威治时间 0时区
   北京时间    东八区   +8
Expires: Sun, 25 Nov 2018 04:09:33 GMT
   代表过期时间
Server: BWS/1.1
   服务器后台程序的名称  名称可以随便改
# Content-X头部一般都是标识后面的数据的属性

2.3.1HTTP响应报文格式总结

响应行[版本  状态码  说明\r\n]

响应头[名称  :   值\r\n]

空行[\r\n]   用来分割上下内容,表示响应头结束

响应体[存储的是  服务器发送给浏览器的数据 图片等网页资源]

2.4 验证HTTP响应报文格式

为了强化对响应报文的认识,这套格式,不是为了记住代码

import socket
 # 1 创建出 TCP套接字  IPv4    基于字节流
 tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 # 2 输入URL-->域名---DNS解析--->获取到服务器ip地址
 #  IP 和 端口 连接服务器
 tcp_socket.connect(('tlias-stu.boxuegu.com',80))
 # 3 组装请求报文,发送给服务器 请求行 +
 request_data = "GET / HTTP/1.1\r\n" +"Host:www.tlias-stu.boxuegu.com\r\n" + "\r\n"
 tcp_socket.send(request_data.encode())
# 4 接收响应报文  验证
response_data = tcp_socket.recv(4096)
print(response_data)
# 5 关闭和服务器的连接 - 短连接方式
tcp_socket.close()------------------------------------------------------
HTTP/1.1 200 OK\r\n
Server: nginx/1.10.2\r\n
Date: Sun, 25 Nov 2018 08:06:02 GMT\r\n
Content-Type: text/html;charset=ISO-8859-1\r\n
Content-Length: 2729\r\n
Connection: keep-alive\r\n
X-Application-Context: application:production:6303\r\n
Last-Modified: Mon, 20 Aug 2018 06:01:44 GMT\r\n
Accept-Ranges: bytes\r\n
Content-Language: en-US\r\n
Vary: Accept-Encoding\r\n
\r\n
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link rel=icon href=/favicon.ico><title>TLIAS\xe7\xa0\x94\xe8\xae\xa8\xe6\xb1\x87</title><link href=/css/chunk-07a5.d674c38c.css rel=prefetch><link href=/css/chunk-095e.15abea5b.css rel=prefetch><link href=/css/chunk-0f9f.415bfa1c.css rel=prefetch><link href=/css/chunk-1247.03e81ebe.css rel=prefetch><link href=/css/chunk-1bfa.d674c38c.css rel=prefetch><link href=/css/chunk-2a87.acf8c5c1.css rel=prefetch><link href=/css/chunk-3d0b.d674c38c.css rel=prefetch><link href=/css/chunk-40ec.d674c38c.css rel=prefetch><link href=/css/chunk-4762.d674c38c.css rel=prefetch><link href=/css/chunk-4b2e.c5eb09a1.css rel=prefetch><link href=/css/chunk-591c.fae7b595.css rel=prefetch><link href=/css/chunk-6be2.69dfb6f2.css rel=prefetch><link href=/css/chunk-6c19.d6ab9cf4.css rel=prefetch><link href=/css/chunk-6dcb.557aa669.css rel=prefetch><link href=/css/chunk-6f19.d674c38c.css rel=prefetch><link href=/css/chunk-7704.d674c38c.css rel=prefetch><link href=/css/chunk-8417.d674c38c.css rel=prefetch><link href=/css/chunk-882d.d674c38c.css rel=prefetch><link href=/css/chunk-8f38.abf43e65.css rel=prefetch><link href=/js/chunk-07a5.a94bf613.js rel=prefetch><link href=/js/chunk-095e.a3a72cc2.js rel=prefetch><link href=/js/chunk-0b75.f3f85fd8.js rel=prefetch><link href=/js/chunk-0f9f.05daa514.js rel=prefetch><link href=/js/chunk-1247.e84febb0.js rel=prefetch><link href=/js/chunk-1bfa.1da67777.js rel=prefetch><link href=/js/chunk-2a87.5d2fd4c1.js rel=prefetch><link href=/js/chunk-3d0b.d4a0e6b9.js rel=prefetch><link href=/js/chunk-40ec.be23cbb7.js rel=prefetch><link href=/js/chunk-4762.0c96e4a5.js rel=prefetch><link href=/js/chunk-4b2e.dfb6d161.js rel=prefetch><link href=/js/chunk-591c.77c06357.js rel=prefetch><link href=/js/chunk-6be2.06b40164.js rel=prefetch><link href=/js/chunk-6c19.3edf1e2d.js rel=prefetch><link href=/js/chunk-6dcb.d6226677.js rel=prefetch><link href=/js/chunk-6f19.e05576f1.js rel=prefetch><link href=/js/chunk-7704.9281e4d1.js rel=prefetch><link href=/js/chunk-8417.1d4c7b26.js rel=prefetch><link href=/js/chunk-882d.6b54c3c9.js rel=prefetch><link href=/js/chunk-8f38.8de796a5.js rel=prefetch><link href=/css/app.231297aa.css rel=preload as=style><link href=/css/chunk-vendors.849b725d.css rel=preload as=style><link href=/js/app.0b402d7b.js rel=preload as=script><link href=/js/chunk-vendors.849d86b7.js rel=preload as=script><link href=/css/app.231297aa.css rel=stylesheet><link href=/css/chunk-vendors.849b725d.css rel=stylesheet></head><body><div id=app></div><script src=/js/app.0b402d7b.js></script><script src=/js/chunk-vendors.849d86b7.js></script></body></html>

2.5 长连接和短连接

HTTP中基于TCP<面向连接>实现

短连接:

优点:管理多个连接 简单  容易实现

缺点:如果用户频繁操作,消耗大量的资源进行套接字的创建和销毁

由于在用户发起请求的时候才创建连接 容易造成用户体验差

Connection: close

长连接:

需要同时保持和大量客户端连接的存活 实现复杂  对应硬件的需求高

用户频繁操作  节约了大量的资源(不需要进行 大量资源的创建和销毁)

用户体验更好

现行web服务器常用的做法

Connection: Keep-Alive

相关文章
|
10天前
|
算法 网络协议 安全
HTTP/2 协议的缺点是什么?
HTTP/2 协议的缺点是什么?
|
11天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
45 3
|
22天前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
49 13
|
14天前
|
传感器 缓存 网络协议
CoAP 协议与 HTTP 协议的区别
CoAP(Constrained Application Protocol)协议是为资源受限的设备设计的轻量级协议,适用于物联网场景。相比HTTP,CoAP具有低功耗、低带宽占用和简单易实现的特点,支持多播通信和无连接的交互模式。
|
19天前
|
开发者
HTTP 协议请求方法的发展历程
【10月更文挑战第21天】
|
19天前
|
安全
HTTP 协议的请求方法
【10月更文挑战第21天】
|
19天前
|
缓存 安全 前端开发
HTTP 协议的请求方法在实际应用中有哪些注意事项?
【10月更文挑战第29天】HTTP协议的请求方法在实际应用中需要根据具体的业务场景和需求,合理选择和使用,并注意各种方法的特点和限制,以确保网络通信的安全、高效和数据的一致性。
|
21天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
23天前
|
网络协议 前端开发 API
HTTP 和 TCP 协议的应用场景有哪些不同
【10月更文挑战第25天】HTTP(超文本传输协议)和 TCP(传输控制协议)处于网络协议栈的不同层次,各自具有独特的功能和特点,因此它们的应用场景也存在明显的差异。
|
23天前
|
安全 前端开发 JavaScript
利用HTTP协议进行文件上传和下载的常见方法
【10月更文挑战第25天】可以利用HTTP协议方便地实现文件的上传和下载功能,满足不同应用场景下的需求。在实际应用中,还可以根据具体的业务需求和安全要求,对文件上传和下载的过程进行进一步的优化和安全处理。
下一篇
无影云桌面