HTTP——JavaWeb教案(三)

HTTP

概念

Hyper Text Transfer Protocol 超文本传输协议

传输协议:定义了,客户端和服务器端通信时,发送数据的格式。

特点:

  1. 基于TCP/ IP的高级协议

  2. 位于osi网络七层协议模型中的最上层:应用层,由请求和响应组成

  3. 默认端口号:80

  4. 基于请求/响应模型的:一次请求对应一次响应

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

  6. 无连接:限制每次连接只处理一个请求

  7. 灵活:正在传输的类型由content——type加以标记。

HTTPS:HTTP承载在TLS和SSL之上,通过加密,认证的方式实现数据传输安全。称为HTTPS。默认端口号为443

一次请求过程

  1. 客户端与服务器建立TCP连接

  2. 客户端发出HTTP请求

  3. 服务端发出HTTP响应

  4. 客户端与服务器之间的TCP链接关闭

举例:浏览器输入www.baidu.com后,浏览器与服务端的通信过程:

浏览器与网络上域名为www.baidu.com的web服务器建立TCP连接

浏览器发出要求访问index.html(网站首页)的HTTP请求

web服务器接到HTTP请求后,解析HTTP请求,然后发回包含吧index.html文件数据的HTTP响应。

浏览器接收到HTTP的响应和后,解析HTTP响应,并在窗口展示index.html

浏览器与web服务器之前的TCP链接关闭。

浏览器具备的功能:

  1. 请求web服务器建立TCP连接

  2. 创建并发送HTTP请求

  3. 接收并解析HTTP响应

  4. 在浏览器窗口展示HTML文档

web服务器应具备的功能:

  1. 接收来自客户端浏览器的TCP链接请求。

  2. 接收并解析HTTP请求。

  3. 创建并发送HTTP响应。

问题:不同浏览器,不同服务器之前如何确保传送数据解析的一致性。

浏览器有很多种,服务器也有很多种,并且服务端开发的语言也是多种多样的,如何确保java语言编写的程序和其他语言编写的程序顺利通信呢?这就需要统一 的协议了,这就是HTTP协议。HTTP协议严格规定了HTTP请求和HTTP响应的数据格式。只要HTTP服务器与客户程序之间的交换数据都遵守HTTP协议。双方都能看懂对方发送的数据,从而顺利交流。

HTTP协议由请求部分和响应部分组成。

历史版本:

1.0:每一次请求响应都会建立新的连接

1.1:复用连接

image-20211216220221517

数据格式

通过service()方法的参数我们可以得知,它的两个参数一个是请求,一个是响应。

通过基本介绍我们知道,HTTP是定义了客户端与服务器端数据交互时定义数据格式的。

数据格式分为:请求消息数据格式和响应消息数据格式

image-20211216220306873

请求消息数据格式

1. 请求行

请求方式 请求url 请求协议/版本

GET /login.html HTTP/1.1 .

请求方式:

HTTP协议有7种请求方式,常用的有2种

GET :

  1. 在没指明请求方式下,默认为get请求

  2. 请求参数在请求行中,在ur1后。

  3. 请求的url 长度有限制的

  4. 不太安全

<form action="/servlet/sep" method="get">
    <h1>发送get请求</h1>
    用户名:<input name="username" type="text">
    <br>
    密码:<input name="password" type="text">
    <br>
    <input type="submit" value="提交">
</form>

请求参数:请求参数在请求行上面

image-20211219102134706POST :

1.请求参数在请求体中

2.请求的url长度没有限制的

3.相对安全

<form action="/servlet/sep" method="post">
    <h1>发送post请求</h1>
    用户名:<input name="username" type="text">
    <br>
    密码:<input name="password" type="text">
    <br>
    <input type="submit" value="提交">
</form>

请求参数:

此时我们的请求参数在请求体里面。

image-20211216220405501

2. 请求头

客户端浏览器告诉服务器一些信息

image-20211216220419177

格式:

请求头名称:请求头值

  1. 常见的请求头:

    1. User-Agent(用户代理):浏览器告诉服务器,我访问你使用的浏览器版本(不同浏览器的兼容不同)

      可以在服务器端获取该头的信息,解决浏览器的兼容问题

    2. Referer:http://localhost/login.html 告诉服务器,当前请求从哪里来

      1. img

      2. 防盗链:

        假如我有一个电影网站,但是我没有战狼这部电影的版权,优酷有,我就可以在我的网站上建立一个超链接,连接到优酷战狼的这个页面,从而达到我网站的流量增加。这样就造成优酷的损失,优酷可以通过防盗链的方法,获取请求从哪里来,通过逻辑来进行响应处理(比如:如果这个请求从我的首页来,你就可以观看,如果不是,你就不能观看)

      3. 统计工作:

        假如我花钱分别让百度,新浪,搜狐给我打广告,增加我网站的访问量,那么我该如何判断我的用户是通过谁的广告来的呢?就可以通过此头,根据请求来的位置,判断是谁的广告引来的用户。

image-20211216220448907

3. 请求空行

用于分隔post请求的请求头和请求体的。用来告诉服务端已经没有请求头了。即使请求体没有内容,也必须有一个请求空行。

4. 请求体(正文)

  1. 封装请求参数的

image-20211216220503500

  1. post请求参数以键值对形式保存。

  2. get请求没有请求体

image-20211216220549961

响应消息数据格式

响应消息:服务器端发送给客户端的数据

image-20211216220602841

1. 响应行

  1. 组成:协议/版本响应状态码状态码描述

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

    1. 状态码都是3位数字

    2. 分类:

​ 1.1xx :服务器就收客户端消息,但没有接受完成,等待一段时间后, 发送1xx多状态码

​ 2.2xx:成功。代表:200

  1. 3xx:重定向。代表: 302(重定向),304(访问缓存)

    1. 重定向

    image-20211216134725155

    1. 访问缓存image-20211219110150889
  2. 4xx :客户端错误。

​ 代表:

​ 404 (请求路径没有对应的资源)

​ 405 :请求方式没有对应的doXxx方法(请求get,没有doGet()方法)

  1. 5xx :服务器端错误。代表: 500(服务器内部出现异常,代码出错)

状态码大全:

https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=aladdin

状态码说明
200响应成功
301永久重定向,搜索引擎将删除源地址,保留重定向地址
302暂时重定向,重定向地址由响应头中的Location属性指定。由于搜索引擎的判定问题,较为复杂的URL容易被其他网站使用更为精简的URL以及302重定向劫持
400客户端请求有语法错误,不能被服务器识别
404请求资源不存在
500服务器内部错误

2. 响应头

描述服务器的基本信息,以及对返回的数据进行描述,服务器通过这些数据的描述信息,通知客户端如何处理服务器端返回的数据。HTTP响应中常用以下响应头告诉浏览器的一些信息。

1.格式:头名称:值

2.常见的响应头:

  1. Content- Type :服务器告诉客户端本次响应体数据格式以及编码格式

  2. Content-disposition :服务器告诉客户端以什么格式打开响应体数据

值:

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

  1. attachment ;filename=xxx :以附件形式打开响应体。文件下载
响应头说明实例状态
Age响应对象在代理缓存中存在的时间,以s为单位Age:12固定
Allow对于特定资源的有效动作Allow:GET,HEAD固定
Connection针对该连接所预期的选项Connection:close固定
Date此条消息发送的日期与时间固定
Expires指定一个日期/时间,超过该事件则认为此回应已经过期Expires: Thu, 01 Dec 2020 08:08:00 GMT标准
Link用来表示与另一个资源之间的类型关系,此类型关系是在RFC 5988中定义Link:rel=“akternate”固定
Location用于在进行重定向,或者创建了某个新资源时使用Location:http://www.baidu.com固定
Server服务器名称Server:nginx/1.6.3固定
Set-Cookie设置HTTPCookieSet-Cookie:UserID=123;Max=Age=36000;Version=1标准
Status通过网关接口的响应头字段Status:200 OK
Upgrade要求客户端升级到另一个高版本协议Upgrade:HTTP/2.0,SHTTP/1.3,IRC/6.9,RTA/x11固定
Via告知代理服务器的客户端,当前响应是通过什么途径发送的Via:1.0 fred, 1.1 baidu.com(nginx/1.6.3)固定
Warning一般性警告Warning:199Miscellaneous warning固定

3.响应空行

与请求一样,响应头和响应体必须由空行连接

4.响应体

响应体主要是包含服务器对应于浏览器请求的响应消息,该响应消息可以是一个HTML文档。浏览器可以指接识别这个HTML文件。而如果访问的是一个JSP文件,但是响应回去的是一个HTML文件,就说明服务器将该JSP翻译为了HTML,然后再响应给浏览器。

优秀博文:

http:

https://blog.csdn.net/u010256388/article/details/68491509

三次握手,四次挥手:

面试必备HTTP之TCP三次握手及四次挥手详解 - 简书 (jianshu.com)

TCP链接过程:

拒绝八股文,透过实战理解TCP连接过程 - 简书 (jianshu.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

See you !

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

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

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

打赏作者

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

抵扣说明:

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

余额充值