11_Http

整体流程图

在这里插入图片描述

  • 前端:负责获取数据,展示数据
  • 程序:负责监听端口,并对请求作出响应,这中间需要从数据库获取数据
  • 数据库:数据仓库。通过标准化语言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. 完整性校验:哈希

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coo1heisenberg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值