11_Http

文章目录

  • Http
    • Http协议
    • 网络模型
    • Http协议的工作流程
    • Http请求报文
      • 请求行
        • 请求方法
        • 请求资源
        • 协议版本
      • 请求头
      • 空行
      • 请求体
      • 抓包软件:Fiddler
    • Http响应报文
      • 响应行
        • 状态码
      • 响应头
      • 响应体
    • 请求完整的处理流程
  • Https

整体流程图

在这里插入图片描述

  • 前端:负责获取数据,展示数据
  • 程序:负责监听端口,并对请求作出响应,这中间需要从数据库获取数据
  • 数据库:数据仓库。通过标准化语言SQL进行操作,在Java代码中,是通过JDBC进行操作。

Http

网络协议:通讯双方传递信息时,传递的信息应当具有的格式。只有共同遵循一致的格式,那么双方才可以正常进行通讯。

Http协议

  • HTTP:Hyper Text Transfer Protocol超文本传输协议
    • 超文本:超越了普通的文本,资源类型是丰富的,比如文本、音视频、图片等资源。
    • 传输:通讯的双方。客户端、服务器
    • 协议:通讯双方应该在传递时遵循的规则

网络模型

在这里插入图片描述

Http协议的工作流程

  1. 域名解析

    • 域名:jd.com、taobao.com,可以用来指代网络中的一台计算机主机,对应ip地址。
    • jd.com----------解析 xxx.xxx.xxx.xxx
      • 浏览器缓存
        • 从浏览器缓存里去拿域名到ip的映射
      • 操作系统缓存
      • hosts文件(127.0.0.1,localhost指的是本机)
      • DNS服务器解析
  2. 建立TCP连接

  3. 浏览器发送HTTP请求

  4. HTTP请求经过中转到达服务器之后,被服务器接收到,服务器解析HTTP请求,并且做出HTTP响应。

  5. HTTP响应经过中转再次返回给客户端,客户端接收到HTTP响应,并且加以解析、渲染

  6. 如果解析的过程中,发现需要去加载其他的css、js、img等资源,那么会自行再次发送请求,整个过程同上

  7. 最终浏览器渲染出来页面,呈现页面给用户。


Http请求报文

  • 发送的HTTP请求一般称之为HTTP请求报文,分为请求行、请求头、空行、请求体四部分
  • 其中的一些消息头和正文都是可选的,消息头和正文内容之间要用空行(CRLF即\r\n)隔开

在这里插入图片描述

请求行

Accept:浏览器可接受的
MIME类型 / (大类型)/(小类型)。浏览器可以接收的类型,言外之意是服务器做出响应时,应当优先响应我可以接收处理的类型。
MIME:使用一种大类型/小类型的方式将互联网上面的资源加以分类。比如text/html、text/txt、audio/mp3、video/mkv、image/jpeg、image/png
Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。浏览器利用该头告诉服务器,如果返回的资源需要进行压缩,那么应该使用浏览器可以支持的压缩算法。
Accept-Language: 浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到,
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8;q代表权重,没有q代表默认为1

可以在浏览器中进行设置。twitter.com
Host:初始URL中的主机和端口
Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面 (防盗链)
Content-Type:内容类型
If-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT 服务器利用这个头与服务器的文件进行比对,如果一致,则告诉浏览器从缓存中直接读取文件。
User-Agent:浏览器类型.
Content-Length:表示请求消息正文的长度。表示的是体的长度。
Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接
Cookie:这是最重要的请求头信息之一
Date: Mon, 22 Aug 2011 01:55:39 GMT请求时间GMT。常见的请求方法 GETPOST

分为三个部分:

  • 请求方法
  • 请求资源
  • 协议版本
请求方法

怎么发get和post请求

  1. get请求可以通过浏览器以及form表单发送
    • <form></form>
  2. post请求只能form表单发送

GET和POST区别
本质的区别在于语义的不同。

  • GET的语义是用来进行查询、获取数据。99%的情况下通过浏览器访问网站都是get请求。比如查询商品信息
  • POST的语义是用来进行提交数据。注册、登录、文件上传(微信更换头像)等

eg:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

以post请求方法访问baidu.com,不可以直接在浏览器地址栏直接输入网址
如果希望使用post方法访问baidu.com,需要:
1.先访问1.html(当前页面),将form表单加载出来
2.点击form表单的提交按钮
    
    <form action="http://www.baidu.com" method="post">
        <input type="text" name="username"><br>
        <input type="submit">
    </form>
</body>
</html>
请求资源

指的是访问服务器上面的哪个资源(访问不同页面时,区别主要在于请求资源的不同)

eg:

http://www.baidu.com/forum-280-1.html

http://www.baidu.com/forum-279-1.html
协议版本

HTTP/1.1:当前使用的是HTTP 1.1的版本

  • 在1.1之前的上一个版本是1.0.他们两者之间的区别主要在于是否支持长连接。

长连接:在一个TCP连接内,是否允许发送多个HTTP请求。如果支持就是长连接。

  • 1.0版本不支持长连接

  • 1.1默认支持长连接


请求头

  • 请求头可以理解为是对于请求信息的额外补充,类似于合同的附加合同、补充条款。
  • 主要是key-value数据
Accept:浏览器可接受的    
MIME类型 */*   (大类型)/(小类型)。浏览器可以接收的类型,言外之意是服务器做出响应时,应当优先响应我可以接收处理的类型。
	MIME:使用一种大类型/小类型的方式将互联网上面的资源加以分类。比如text/html、text/txt、audio/mp3、video/mkv、image/jpeg、image/png
Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。浏览器利用该头告诉服务器,如果返回的资源需要进行压缩,那么应该使用浏览器可以支持的压缩算法。
Accept-Language: 浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到,
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8;q代表权重,没有q代表默认为1

可以在浏览器中进行设置。twitter.com
Host:初始URL中的主机和端口 
Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面 (防盗链)
Content-Type:内容类型
If-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT 服务器利用这个头与服务器的文件进行比对,如果一致,则告诉浏览器从缓存中直接读取文件。
User-Agent:浏览器类型.
Content-Length:表示请求消息正文的长度。表示的是体的长度。
Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接 
Cookie:这是最重要的请求头信息之一 
Date: Mon, 22 Aug 2011 01:55:39 GMT请求时间GMT

空行

请求体

  • 可以用来大量放置数据的地方。客户端希望提交大量的数据到服务器,那么就把数据放置在请求体里面。
  • 例如:微信更换头像。

抓包软件:Fiddler


Http响应报文

  • 服务器发送的HTTP响应信息,一般情况下也称作HTTP响应报文。
  • 分为响应行、响应头、空行、响应体四部分,其中的一些消息头和正文都是可选的,消息头和正文内容之间要用空行(CRLF即\r\n)隔开

在这里插入图片描述

响应行

响应行主要是三部分组成:

  • 版本协议
  • 状态码
  • 原因短语
状态码
  • 200:代表一切访问过程是正常的
  • 301、302、307:重定向。
    • 当前的地址不可用,服务器需要将请求重新定向到一个新的地址。
    • 重定向一定会搭配着Location响应头一起来发挥作用。
    • eg:
首先请求 http://www.bing.com/    --------------->     307  Location: https://www.bing.com/


然后根据Location网址去请求 https://www.bing.com/   --------------->      302  location: https://cn.bing.com/


然后根据上一次Location网址请求 https://cn.bing.com/    --------------->      200
  • 304:未修改。使用缓存。

  • 404:没有找到。

  • 500:服务器异常。

    • 有bug。如果出现500状态码,那么一定有bug,但是200状态码不一定没有bug

响应头

Location: http://www.baidu.com/指示新的资源的位置.需要搭配着重定向状态码(301、302、307)一起来使用。
Server: apache tomcat 指示服务器的类型
Content-Encoding: gzip 服务器发送的数据采用的编码格式。
Content-Length: 80 告诉浏览器正文的长度
Content-Language: zh-cn服务发送的文本的语言
Content-Type: text/html;  服务器发送的内容的MIME类型
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT文件的最后修改时间
Refresh: 1;url=http://www.cskaoyan.com指示客户端刷新频率。单位是秒
Content-Disposition: attachment; filename=aaa.zip指示客户端保存文件
Set-Cookie: SS=Q0=5Lb_nQ; path=/search服务器端发送的Cookie
Expires: 0
Cache-Control: no-cache (1.1)  
Connection: close/Keep-Alive   
Date: Tue, 11 Jul 2000 18:23:51 GMT

响应体

  • 用来存放服务器返回给客户端大量的数据。响应体里面的数据会最终出现在浏览器的窗口界面中。
  • 可以响应文本类型,也可以响应二进制类型;如果响应二进制类型,那么需要返回特定的Content-Type
    • 比如,现在写回了一张图片,但是content-type写的是text/html,浏览器得到的信息是我现在拿到了一个网页,然后获取它的响应体,会按照网页进行解析,就会乱码(乱码的本质:编解码不一致)

请求完整的处理流程

以访问http://www.xxxx.com为例:

  1. 域名解析。首先尝试使用浏览器缓存查找,再次通过操作系统缓存查找,借助于hosts文件,最终利用DNS服务器来进行解析。

    • eg:xxxx.com------225.171.182.79
  2. 建立TCP连接

  3. 浏览器会代理用户发送HTTP请求报文(GET /1.html HTTP/1.1…),请求报文在网络中中转传输到达服务器之后,会服务器接收到,进行解析

  4. 服务器产生HTTP响应报文(HTTP/1.1 200 OK …),响应报文在网络中中转传输返回给客户端之后,客户端会将响应报文进行解析、渲染

  5. 如果发现需要再次加载新的资源文件,那么浏览器会自行再次发起请求,过程同上

  6. 加载获取到所有的资源文件之后,最终渲染,将页面呈现在用户面前。


Https

  • 目前主流的网站使用的都是https协议了。
  • HTTPS = HTTP + Secure/SSL

http协议存在的问题

  1. 传输过程全程明文传输

  2. 不验证通讯另一方的身份

  3. 没有完整性校验,可能报文在中途已经被篡改,但是无从得知

https针对http进行的改进

  1. 加密

    • 加密算法:对称加密(加密解密使用的是同一把秘钥;效率高,但是安全性不高)、非对称加密(公钥加密,私钥解;公钥加密,公钥无法解;安全程度非常高,但是效率低)、混合加密
  2. 证书:证书颁发者(一般是一个权威机构)颁发给当前网站的一个凭证。

  3. 完整性校验:哈希

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/437101.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql bug( InnoDB: Error number 22),表突然不能读取

mysql bug&#xff08; InnoDB: Error number 22&#xff09;&#xff0c;表突然不能读取 bug最开始的bug&#xff1a;表突然不能读取关闭mysql容器&#xff0c;再次重启失败 解决方案不重建容器的几种可能措施重建容器重建如果懒得打命令或者忘记命令可能的run bug&#xff1a…

【MySQL知识体系】第2章 数据库与表的创建(一)

第2章 数据库与表的创建 2.1 数据库操作 2.2 表操作 文章目录 第2章 数据库与表的创建2.1 数据库操作2.1.1 创建第一个数据库2.1.2 更新数据库名称&#xff08;数据库创建后无法修改名称&#xff09;2.1.3 删除数据库2.1.4 取个合适的数据库名称 第2章 数据库与表的创建 2.1 数…

Vue2 中通过自定义指令将字母转大写

需求是需要将 Code 录入的字母转为大写 /*** 字母转大写*/function inputHandler(e) {e.target.value e.target.value.toUpperCase();// 触发 input 事件以便 v-model 更新数据e.target.dispatchEvent(new Event("input")); }export default {bind: function (el) {…

教育界杂志《教育界》杂志社教育界编辑部2024年第2期目录

教育视界 小学语文课内外阅读的有效融合策略 任小惠; 2-4 项目化学习在初中音乐教学中的应用探索 毛海蓉; 5-7 探索之窗《教育界》投稿&#xff1a;cn7kantougao163.com 儿童无边界阅读支撑系统的建构与实施 袁干斌;蒯红良; 8-10 中学教学 基于核心素养培养的高…

Mybatis-Plus——07,性能分析插件

性能分析插件 一、导入插件二、SpringBoot中配置环境为dev或test环境三、运行测试————————创作不易&#xff0c;笔记不易&#xff0c;如觉不错&#xff0c;请三连&#xff0c;谢谢~~ MybatisPlus也提供了性能分析插件&#xff0c;如果超过这个时间就停止运行&#xff0…

【系统学习】2-Java进阶知识总结-3-集合-1-补充【泛型、树、数据结构】

文章目录 泛型什么是泛型&#xff1f;常见的泛型标识符泛型类泛型方法泛型接口通配符 树树的基本概念什么是二叉树&#xff1f;二叉树--普通二叉树二叉树--二叉查找树定义规则优缺点 二叉树--平衡二叉树定义规则旋转机制 二叉树--红黑树定义规则红黑规则 常见数据结构总体特点结…

AI-数学-高中-31-统计-总体方差与样本方差(新教材内容)

原作者视频(P158)&#xff1a;【统计】【一数辞典】5方差知识补充&#xff08;中档&#xff09;&#xff08;新教材内容&#xff09;_哔哩哔哩_bilibili 方差研究的实际意义&#xff1a;方差是充分反映一组数据内波动大小程度的代表性描述数值。若一组数据内&#xff0c;方差越…

谷歌seo外链怎么发?

谷歌SEO外链建设&#xff0c;说白了&#xff0c;就是让别的网站放一条或几条链接指向你的网站&#xff0c;这事听着简单&#xff0c;但你凭什么在别人的地盘放自己网站的链接&#xff0c;就算真的能放自己网站的链接&#xff0c;你又是否能保证你发的内容跟自己网站相关&#x…

AI论文速读 | 【综述】城市计算中跨域数据融合的深度学习:分类、进展和展望

题目&#xff1a;Deep Learning for Cross-Domain Data Fusion in Urban Computing: Taxonomy, Advances, and Outlook 作者&#xff1a;Xingchen Zou, Yibo Yan, Xixuan Hao, Yuehong Hu, Haomin Wen&#xff08;温皓珉&#xff09;, Erdong Liu, Junbo Zhang&#xff08;张钧…

Java适配器设计模式

Java适配器设计模式这一节后面的内容

面向对象中不可变性

软件设计中的不可变性是一个非常重要的概念&#xff0c;它可以在多个方面提高代码的可靠性、可维护性和安全性。 从开发者角度&#xff08;代码提供者&#xff09;&#xff1a; 在软件开发过程中&#xff0c;当某个对象的属性是不可变的时候&#xff0c;这意味着这些属性的值…

用java实现A*寻路算法

前言&#xff1a; 最近的开发中遇到了寻路这个知识点&#xff0c;然后去了解了一下最常见的A算法&#xff0c;本会会结合我的理解&#xff0c;用最通俗易懂的话语讲解A算法的原理&#xff0c;下面会给出代码示例。 说到寻路算法&#xff0c;就涉及到了图的遍历&#xff0c;然…

开年采购云服务器,怎么买最划算?看这篇!

在2024年开年之际&#xff0c;对于许多企业和个人而言&#xff0c;采购云服务器已成为一项重要的决策。云服务器以其灵活性、可扩展性和高可用性等特点&#xff0c;吸引了越来越多的用户。然而&#xff0c;市场上的云服务器提供商众多&#xff0c;如何选择一家值得入手的服务商…

Domain Driven Design (DDD)

Domain Driven Design (DDD领域驱动设计)主要是业务分类例如&#xff08;订单、合同、生产、检测、物流、运输等&#xff09;&#xff0c;独立单元相互不干扰&#xff0c;仅暴露接口的模型。核心在Domain&#xff0c;所有业务模块放这边&#xff0c;当然我们做的时候微服务是一…

如何对接1688平台官方开发平台的商品发布/商品过期处理/商品订单接口?

custom-自定义API操作 API测试 注册开通 1688.custom 1688平台官方开放接口 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[…

windows部署ruoyi-vue-pro

前提 安装java 安装maven 安装redis mysql 源代码下载 后端 ruoyi-vue-pro 前端 yudao-ui-admin-vue3 后端项目 配置maven 导入数据 CREATE DATABASE ruoyi_vue_pro;修改mysql连接配置 修改redis 打包项目 mvn clean install package -Dmaven.test.skiptrue启动YudaoSe…

TC397 Tasking CMake Gitlab CI CD 环境配置

文章目录 Aurix Development Studio 新建工程与配置Tasking 环境配置CMake 集成Win CMake MinGW 安装Tasking Toolchain 工具链CMakeLists.txtPowershell 脚本 Gitlab CI CDGithub Link 本篇先演示了ADS新建激活编译工程, 讲述了浮点模型, 链接脚本文件, 静态库集成等的设置, 接…

python并发编程:IO模型

一 IO模型 二 network IO 再说一下IO发生时涉及的对象和步骤。对于一个network IO \(这里我们以read举例\)&#xff0c;它会涉及到两个系统对象&#xff0c;一个是调用这个IO的process \(or thread\)&#xff0c;另一个就是系统内核\(kernel\)。当一个read操作发生时&#xff…

C语言学习--摩尔投票算法

目录 1.引入 2.摩尔投票算法 3.具体步骤 3.1抵消阶段 3.2检验过程 4.代码实现 5.总结 1.引入 今天做题看到一个解题思路真的看不懂&#xff0c;一艘才知道是这个算法。 int majorityElement(int* nums, int numsSize) { int notenums[0]; int count1; for(int i1;i<n…

day7-网络编程

1>基于UDP的网络聊天室 Ser.c #include <myhead.h> #define SER_IP "10.211.55.9" // 服务器IP #define SER_PORT 9999struct user {char usrName[20];struct sockaddr_in cin; }; int main(int argc, char const *argv[]) {// 1.创建用于监听的套接字int…
最新文章