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.htmlhttp://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.mzph.cn/news/736223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

雷赛控制卡获取轴当前位置的值不正确问题处理

现像 从雷赛控制卡中获取当前轴位置值时发现轴在向零点的右边走时显示的值是负数。正常来就一般是要反馈正数的。一般轴零点右边是正方向&#xff0c;限位是正限位&#xff0c;反馈的位置也应该是正数。 如果雷赛软件中的【单轴参数】中的基本设置中的【脉冲模式】设置的是对的…

【C语言基础】:深入理解指针(终篇)

文章目录 深入理解指针一、函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用4.3 typedef关键字 二、函数指针数组三、转移表四、回调函数4.1 什么是回调函数4.2 qsort使用举例4.2.1 使用qsort函数排序整形数据4.2.2 使用qsort排序结构数据4.2.3 qsort函数的模拟实现 …

elasticsearch 深度分页查询 Search_after(图文教程)

Search_after使用 一. 简介二. 不带PIT的search_after查询2.1 构造数据2.2 search_after分页查询2.2 问题 三. 带PIT的search_after查询3.1 构建第一次查询条件3.2 进行下一页查询3.3 删除PIT 四.参考文章 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注…

傅里叶变换pytorch使用

参考视频&#xff1a;1 傅里叶变换原理_哔哩哔哩_bilibili 傅里叶变换是干嘛的&#xff1a; 傅里叶得到低频、高频信息&#xff0c;针对低频、高频处理能够实现不同的目的。 傅里叶过程是可逆的&#xff0c;图像经过傅里叶变换、逆傅里叶变换后&#xff0c;能够恢复到原始图像…

【管理干部竞聘上岗】某星级酒店中层干部竞聘上岗管理咨询项目纪实

在这次项目合作中&#xff0c;我们的目的主要是设计一次公开、透明的竞聘活动&#xff0c;通过科学、公正的方法选拔出公司管理级岗位的最佳候选人。基于华恒智信的专业性&#xff0c;我们再次选择与其合作开展项目。在项目合作中&#xff0c;专家团队为我们进行了专业性的培训…

AIGC实战——GPT(Generative Pre-trained Transformer)

AIGC实战——GPT 0. 前言1. GPT 简介2. 葡萄酒评论数据集3. 注意力机制3.1 查询、键和值3.2 多头注意力3.3 因果掩码 4. Transformer4.1 Transformer 块4.2 位置编码 5. 训练GPT6. GPT 分析6.1 生成文本6.2 注意力分数 小结系列链接 0. 前言 注意力机制能够用于构建先进的文本…

【网络原理】TCP 协议中比较重要的一些特性(一)

目录 1、TCP 协议 2、确认应答 2.1、确认序号 3、超时重传 4、连接管理 4.1、建立连接&#xff08;三次握手&#xff09; 4.2、断开连接&#xff08;四次挥手&#xff09; 1、TCP 协议 TCP 是工作中最常用到的协议&#xff0c;也是面试中最常考的协议&#xff0c;具有面…

Electron程序如何在MacOS下获取相册访问权限

1.通过entitiment.plist&#xff0c;在electron-builder签名打包时&#xff0c;给app包打上签名。最后可以通过codesign命令进行验证。 TestPhotos.plist electron-builder配置文件中加上刚刚的plist文件。 通过codesign命令验证&#xff0c;若出现这个&#xff0c;则说明成…

Fortran语法介绍(三)

个人专栏—ABAQUS专栏 Abaqus2023的用法教程——与VS2022、oneAPI 2024子程序的关联方法 Abaqus2023的用法教程——与VS2022、oneAPI 2024子程序的关联方法Abaqus有限元分析——有限元网格划分基本原则 Abaqus有限元分析——有限元网格划分基本原则各向同性线弹性材料本构模型…

《手把手教你》系列技巧篇(二十七)-java+ selenium自动化测试- quit和close的区别(详解教程)

1.简介 尽管有的小伙伴或者童鞋们觉得很简单&#xff0c;不就是关闭退出浏览器&#xff0c;但是宏哥还是把两个方法的区别说一下&#xff0c;不然遇到坑后根本不会想到是这里的问题。 2.源码 本文介绍webdriver中关于浏览器退出操作。driver中有两个方法是关于浏览器关闭&…

SQL28 计算用户8月每天的练题数量

&#x1f468;‍&#x1f4bb; 大唐coding&#xff1a;个人主页 &#x1f381; 个人专栏: 《力扣高频刷题宝典》《SQL刷题记录》 ⛵ 既然选择远方&#xff0c;当不负青春&#xff0c;砥砺前行&#xff01; 大家好&#xff0c;我是大唐&#xff0c;今天我们来做一道牛客题库SQL…

MySQL-----存储过程

▶ 介绍 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合&#xff0c;调用存储过程可以简化应用开发人员的很多工作&#xff0c;减少数据在数据库和应用服务器之间的传输&#xff0c;对于提高数据处理的效率是有好处的。 存储过程思想上很简单&#xff0c;…

C switch 语句

一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case&#xff0c;且被测试的变量会对每个 switch case 进行检查。 语法 C 语言中 switch 语句的语法&#xff1a; switch(expression){case constant-expression :statement(s);break; /* 可选的 */ca…

C语言中的UTF-8编码转换处理

C语言UTF-8编码的转换 1.C语言简介2.什么是UTF-8编码&#xff1f;2.1 UTF-8编码特点&#xff1a; 3.C语言中的UTF-8编码转换处理步骤1&#xff1a;获取UTF-8编码的字节流步骤2&#xff1a;解析UTF-8编码步骤3&#xff1a;Unicode码点转换为汉字 4.总结 1.C语言简介 C语言是一门…

【面试精讲】Java线程6种状态和工作原理详解,Java创建线程的4种方式

Java线程6种状态和工作原理详解&#xff0c;Java创建线程的4种方式 目录 一、Java线程的六种状态 二、Java线程是如何工作的&#xff1f; 三、BLOCKED 和 WAITING 的区别 四、start() 和 run() 源码分析 五、Java创建线程的所有方式和代码详解 1. 继承Thread类 2. 实现…

Node-RED在Linux二次开发网关中能源数据实时采集与优化

智能电网与分布式能源系统已成为推动绿色能源转型的重要载体。为了更好地应对多样化的能源供给与需求挑战&#xff0c;以及实现更高效的能源管理&#xff0c;Linux二次开发网关与Node-RED这一创新组合应运而生。 Linux二次开发网关作为高度定制化的硬件平台&#xff0c;其开源特…

【深入理解LRU Cache】:缓存算法的经典之作

目录 一、什么是LRU Cache&#xff1f; 二、LRU Cache的实现 1.JDK中类似LRUCahe的数据结构LinkedHashMap 2.自己实现双向链表 三、LRU Cache的OJ 一、什么是LRU Cache&#xff1f; LRU Cache&#xff08;Least Recently Used的缩写&#xff0c;即最近最少使用&#xff0…

跨平台是什么意思?——跟老吕学Python编程

跨平台是什么意思&#xff1f;——跟老吕学Python编程 跨平台跨平台释义跨平台软件数据库管理系统(DBMS)&#xff1a;网站服务器、应用程序服务器&#xff1a;网络浏览器&#xff1a; 跨平台编程语言跨平台详细解说跨平台应用前景 跨平台 计算机领域术语 跨平台概念是软件开发中…

Zookeeper详解

1.Zookeeper概述 1.Zookeeper概念 Zookeeper是 Apache Hadoop 项目下的一个子项目&#xff0c;是一个树形目录服务 Zookeeper 翻译过来就是动物园管理员&#xff0c;他是用来管 Hadoop&#xff08;大象&#xff09;、Hive(蜜蜂)、Pig(小猪)的管理员。简称zk Hadoop: 存储海…

canvas实现水印逻辑分析

目录 效果图一、相关文档二、分析三、实现1、将水印文字转为水印图片2、给刚生成的水印图片加入旋转以及间隔&#xff08;1&#xff09;旋转位移&#xff08;2&#xff09;间隔位移&#xff08;3&#xff09;最后使用toDataURL导出为png图片 3、将生成的水印图片依次排布在需要…