2021-05-05

HTTP:超文本传输协议

概念

  • HTTP == Hyper Text Transfer Protocol
  • 超文本传输协议

<font color='blue'>传输协议:定义了客户端和服务器端通信时,发送数据的格式。</font>

特点

  1. 基于TCP/IP的高级协议
  2. 默认端口号:80
  3. 基于请求/响应模型的:一次请求对应一次响应

  4. 无状态的:每次请求之间相互独立,不能交互数据

  5. 网页中每一个文件都是一次单独的请求,几张图片,就是几次请求。如下图所示。

<!--more-->

历史版本

http 0.9

  • 只有一个命令GET
  • 没有HEADER等描述数据的信息
  • 服务器发送完毕,就关闭TCP连接
  • 每一次请求响应都会建立新的连接

http 1.0

  • 增加了很多命令,如status code和header
  • 多字符集支持、多部分发送、权限、缓存等

http 1.1

  • 持久连接:keep-alive
  • 复用连接(较http1.0的每一次请求响应都会建立新的连接。好处:节约了连接的资源,提升了传输的速度。
  • 提高性能的关键是低延迟而不是高带宽。
  • 较http1.0,对缓存的支持更好

推送:主动发送js、css推送到浏览器。

二进制流:可以并行发送数据。

http 2.0

  • 所有数据以二进制传输
  • 同一个连接里面发送多个请求不再需要按顺序来
  • 头消息压缩以及推送等提高效率的功能
  • 所有的请求共用一个连接,可以更有效的使用tcp连接,通过带宽来提升http性能
  • 可以减少服务链接的压力,内存减少了,链接吞吐量大了
  • 解决浏览器连接数有限的问题
  • 资源合并减少请求的优化手段在http2.0来说是没有效果

请求信息数据 格式

  • Servlet类中service()方法的参数ServletRequest
  • 字符串格式,比如:
 
  1. POST /login.html HTTP/1.1
  2. Host: localhost
  3. User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  5. Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
  6. Accept-Encoding: gzip, deflate
  7. Referer: http://localhost/login.html
  8. Connection: keep-alive
  9. Upgrade-Insecure-Requests: 1
  10.  
  11. username=zhangsan

以下关于 <font color='blue'>请求信息数据格式</font> 的内容有缺省,详细见下一篇博客 《HTTP请求信息数据 - Request》 中。

请求行

  • 格式:请求方式 请求url 请求协议/版本

请求方式

  • HTTP协议有7种请求协议,常用的有GET、POST两种
  • <font color='orange'>GET</font>

  1. 请求参数在请求行中,在url后
  2. 请求的url长度有限制的
  3. 不太安全(参数跟在url之后)
  4. 浏览器控制台显示👇

  • <font color='orange'>POST</font>

  1. 请求参数在请求体中
  2. 请求的url长度没有限制的
  3. 相对安全(参数在请求体中)
  4. 浏览器控制台显示👇

请求url

  • 假设为 /login.html

请求协议/版本

  • HTTP/1.1

请求头

  • 客户端浏览器告诉服务器一些信息
  • 格式:请求头名称 : 请求头值
  • 若有多个,则一行一个

常见的请求头

  • Host

  • User-Agent

  • Referer

Host

  • 请求的主机地址

User-Agent

  • 浏览器告诉服务器,我访问你时候使用的浏览器版本信息
  • 作用:可以在服务器端获取该头的信息,解决浏览器的兼容性问题

Referer

  • 比如上面几张图片的Referer是 http://localhost/login.html
  • 告诉服务器,我(当前请求)从哪里来?
  • 作用:防盗链、统计工作
  • 举个例子:我的网站想播放《战狼2》电影👇

Connection

  • keep-alive
  • http1.1,表示该链接可以被复用

请求空行

  • 就是一个空行(空白行)
  • 作用:分割POST请求的请求头和请求体

请求体/请求正文

  • 封装POST请求信息的请求参数

<br>下一篇博客 《HTTP请求信息数据 - Request》 中,详细学习了 请求信息数据 - Request

响应信息数据 格式

  • Servlet类中service()方法的参数ServletResponse

  • 字符串数据,比如:

 
  1. HTTP/1.1 200 OK
  2. Content-Type: text/html;charset=UTF-8
  3. Content-Length: 101
  4. Date: Wed, 06 Jun 2018 07:08:42 GMT
  5.  
  6. <html>
  7. <head>
  8. <title>$Title$</title>
  9. </head>
  10. <body>
  11. hello , response
  12. </body>
  13. </html>

响应行

  • 格式:协议/版本 响应状态码 状态码描述

响应状态码

  • 服务器告诉客户端浏览器本次请求和响应的一个状态。

特点

  • 状态码都是3位数字

分类

  1. 1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx状态码
  2. 2xx:成功。代表:
    • 200
  3. 3xx:重定向。代表:
    • 302:重定向
    • 304:访问缓存
  4. 4xx:客户端错误。代表:
    • 403:错误是一种在网站访问过程中,常见的错误提示,表示资源不可用。服务器理解客户的请求,但拒绝处理它,通常由于服务器上文件或目录的权限设置导致的WEB访问错误。
    • 404:请求路径没有对应的资源
    • 405:请求方式没有对应的doXxx方法
  5. 5xx:服务器端错误。代表:500(服务器内部出现异常)

响应头

  • 格式:响应头名称 :值

常见的响应头

  • Content-Type
  • Content-disposition

Content-Type

  • 服务器告诉客户端本次响应体数据格式以及编码格式

Content-disposition

  • 服务器告诉客户端以什么格式打开响应体数据

  • 其值:

  • in-line:默认值,在当前页面内打开

  • attachment;filename=xxx:以附件形式打开响应体。涉及文件下载等功能。

响应空行

  • 就是一个空行(空白行)
  • 作用:分割响应头和响应体

响应体

  • 传输的数据
  • 文件、HTML网页源码等等。比如,
 
  1. <html>
  2. <head>
  3. <title>$Title$</title>
  4. </head>
  5. <body>
  6. hello , response
  7. </body>
  8. </html>

<br>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些分析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛项目需要团队协作来完成,这促使学生学会有效地与他人合作、协调分工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和分工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛项目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖项不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。
这个数据可以使用Python进行解析和处理。可以按照以下步骤进行: 1. 将数据分割成每个数据项。 ``` data_items = data.split(',') ``` 2. 对于每个数据项,将其按#分割成四个小项,并存储到一个列表中。 ``` data_list = [] for item in data_items: item_list = item.split('#') data_list.append(item_list) ``` 3. 对于每个小项,进行相应的类型转换。 ``` for item in data_list: item[0] = int(item[0]) # 题号转换为整数 item[1] = datetime.datetime.strptime(item[1], '%Y-%m-%d %H:%M:%S') # 时间转换为datetime类型 if item[2] != '': # 操作类型转换为整数 item[2] = int(item[2]) item[3] = str(item[3]) # 科目转换为字符串类型 ``` 4. 可以按照需要对数据进行进一步处理,如按照题号、时间等进行排序、筛选等操作。 完整的Python代码如下: ``` import datetime data = '''1#2021-05-18 14:31:55##初级会计实务,2#2021-05-18 14:31:57#12#初级会计实务,2#2021-05-18 14:32:08##初级会计实务,3#2021-05-18 14:32:09#12#初级会计实务,4#2021-05-18 14:32:34#12#初级会计实务,4#2021-05-18 14:32:45##初级会计实务,5#2021-05-18 14:32:46#12#初级会计实务,5#2021-05-18 14:32:57##初级会计实务,6#2021-05-18 14:33:00#12#初级会计实务,7#2021-05-18 14:33:44#12#初级会计实务,7#2021-05-18 14:34:42##初级会计实务,8#2021-05-18 14:34:43#12''' # 将数据分割成每个数据项 data_items = data.split(',') # 对于每个数据项,将其按#分割成四个小项,并存储到一个列表中 data_list = [] for item in data_items: item_list = item.split('#') data_list.append(item_list) # 对于每个小项,进行相应的类型转换 for item in data_list: item[0] = int(item[0]) # 题号转换为整数 item[1] = datetime.datetime.strptime(item[1], '%Y-%m-%d %H:%M:%S') # 时间转换为datetime类型 if item[2] != '': # 操作类型转换为整数 item[2] = int(item[2]) item[3] = str(item[3]) # 科目转换为字符串类型 print(data_list) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值