前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTTP协议

HTTP协议

作者头像
小闫同学啊
发布2019-07-18 11:30:01
8900
发布2019-07-18 11:30:01
举报
文章被收录于专栏:小闫笔记小闫笔记

1.前情回顾

1.match 和 search 返回对象

2.findall 返回列表

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

4.split切割

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

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

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

代码语言:javascript
复制
\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服务器 提供网页资源 图片视频音频

代码语言:javascript
复制
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请求后得到的各个请求资源信息(包括状态、资源类型、大小、所用时间等),可以根据这个进行网络性能优化。
代码语言:javascript
复制
# 请求报文第一行,请求行,分为三部分
GET / HTTP/1.1
   # 请求方法 GET 获取资源  浏览器向服务器请求资源
   #        POST 浏览器向服务器提交数据
   #        HEAD 验证前后台工作是否正常
   # 资源请求路径(域名后面的就是请求路径)
   #      如果浏览器的路径是/或者没有   那么请求路径是就是/
   #      / 在web服务器中表示首页
   # HTTP协议版本
# 请求头  名称:值
Host: www.baidu.com
   #请求的主机名称
Connection: keep-alive
   # 连接方式  保持存活<长连接>   close直接关闭<短连接>
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36
   # 用户代理(浏览器身份) 适配网页(手机网页或者电脑网页):反爬Python3.5
   # 爬虫的时候可以将自己伪装成其他用户   爬虫的时候不要将别人的网站弄奔溃
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
   # 浏览器接受文件的类型 数据类型
Accept-Encoding: gzip, deflate, br
   # 可以接受的压缩算法   数据太大,网络传输过程中提高效率
   #      可以节约带宽资源,提高网页传输效率
Accept-Language: en-US,en;q=0.9
   # 接受的语言  语言的优先级

课堂思考问题

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

2.2.2HTTP请求报文格式总结

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

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

空行[\r\n]

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

代码语言:javascript
复制
# 请求报文
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响应报文

代码语言:javascript
复制
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响应报文格式

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

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.前情回顾
  • 2.HTTP协议(重点是格式)
    • 2.1简单介绍
      • 2.2HTTP请求报文格式
        • 2.2.1谷歌浏览器
        • 2.2.2HTTP请求报文格式总结
      • 2.3响应报文
        • 2.3.1HTTP响应报文格式总结
      • 2.4 验证HTTP响应报文格式
        • 2.5 长连接和短连接
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档