关于HTTP协议(一)

HTTP简介

1 HTTP 简介

HTTP, Hyper Text Transfer Protocol(超文本传输协议)
用于从 万维网服务器 传输 超文本 到 本地浏览器 的传送协议

HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件, 图片文件, 查询结果等)。

HTTP协议工作于客户端-服务端架构之上。
浏览器 作为 HTTP客户端 通过URL向 HTTP服务端即WEB服务器 发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

2 HTTP 主要特点

1、简单快速:
客户向服务器请求服务时,只需传送请求方法和路径。

HTTP报文格式为 body+header,header也是key-value的文本形式,简单易于理解

由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

2、灵活易于扩展:
HTTP允许传输任意类型的数据对象。
HTTP还允许开发人员自定义和扩充
(正在传输的类型由Content-Type加以标记。)

3、跨平台、应用广泛:
PC和手机终端都支持HTTP应用
天然具有跨平台的优越性 ❓❓❓

3 HTTP 双刃剑

1、无状态:
好处是,减轻服务器的负担,让服务器把更多的CPU和内存资源用于处理请求
因为无状态使得服务器无需去记忆HTTP的状态,不需要额外资源来记录这些状态信息

坏处是,没有记忆能力,因此每次在处理 有关联性的操作 时会很麻烦,如同一个账户短时间内多次访问一个网页

—> 解决方法: cookies机制、session机制

2、明文传输
好处是,方便可阅读,方便开发人员,同时不加密解密也降低开销

坏处是,信息暴露,容易被窃取

3、安全性
HTTP不安全


针对以上,HTTPS 的改进:
引入加密认证机制(TCP连接 多了 SSL握手的过程)


TODO

HTTP/1.1 、HTTP/2 、HTTP/3 的演变和变化

3.无连接
~~无连接的含义是限制每次连接只处理一个请求。~
~~服务器处理完客户的请求,并收到客户的应答后,即断开连接。~
采用这种方式可以节省传输时间。

4.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
5、支持B/S及C/S模式。

4 HTTP 状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求

200 OK                        //客户端请求成功
400 Bad Request               //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized              //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
403 Forbidden                 //服务器收到请求,但是拒绝提供服务
404 Not Found                 //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error     //服务器发生不可预期的错误
503 Server Unavailable        //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

5 HTTP 请求方法

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

GET     请求指定的页面信息,并返回实体主体。
HEAD     类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST     向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT     从客户端向服务器传送的数据取代指定的文档的内容。
DELETE      请求服务器删除指定的页面。
CONNECT     HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS     允许客户端查看服务器的性能。
TRACE     回显服务器收到的请求,主要用于测试或诊断。

5.1 GET 和 POST的区别

(都是HTTPP常用的谓词、方法)

(1)从功能上:
  Get用于从服务器上请求资源
  Post用于向服务器提交和更新资源
(2)从服务角度上(幂等性):
  Get是幂等的,Post是不幂等的
(3)从请求参数形式上:
  Get的请求参数会附在URL之后,即报文的请求头
    - 以?分割url和传输数据
    - 参数之间用&连接
    - 字母和数字原样发送,其他需进行转义、加密处理
  Post的请求参数附在请求体中即http body
(4)从安全性上:
  Post比Get更加安全,因为Get的请求参数直接暴露于url中,而Post则是包装在请求体中
(5)从请求大小上:
  Get的请求参数的大小受限于url长度:
    url长度限制来源于两个方面:
      i.  浏览器对于url长度的限制
      ii. 服务器对于url长度的限制
(6)编码支持:
  Get 只支持 url编码;
  Post 则支持各种编码格式

  ----------------------------------

7 GET和POST的区别(5)
GET和POST  都属于 HTTP谓词、HTTP Method

- 从功能上
  - GET是向服务器请求资源
  - POST是一般用于更新服务器资源
- 从服务角度上(幂等性)
  - GET是幂等的,即申请同一资源总是得到相同的值
  - POST不是幂等的,因为每次POST请求都可能会修改服务器的资源
- 从请求参数上
  - GET的请求参数放在url之后,用?分隔,
    - 参数之间用&分隔
    - 英文和数字原样发送
    - 汉字和其他字符经转义、编码后发送
  - POST 请求参数放在请求体中
- 从安全性上
  - POST更安全
    - 因为POST的请求参数包装在请求体中,而GET的请求参数直接暴露在URL中
- 从请求的大小上
  - POST大小通常无限制
  - GET大小受限于
    - 1)浏览器对于URL长度的限制
    - 2)服务器对于URL长度的限制

6 HTTP 工作原理

1、客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.oakcms.cn。

2、发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

3、服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。

4、释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

5、客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。


(从输入网址到获得页面的过程:)
例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:

1、域名解析
浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

2、建立TCP连接
解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;

3、发送请求
浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,**该请求报文作为 TCP 三次握手的第三个报文**的数据发送给服务器;

4、响应请求
服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
(根据请求参数,经后端处理生成HTML页面,返回给浏览器)

~5、释放连接~
~释放 TCP连接;~

6、页面解析、渲染
浏览器将该 html 文本解析并显示内容;   


7 HTTP常见字段

  • HOST
    • 客户端发送请求时用于指定服务器域名
    • 可以将请求发到 同一台服务器上 的不同网站
  • Connection
    • 客户端要求服务器使⽤ TCP 持久连接,以便其他请求复⽤该连接
    • 注意,HTTP/1.1 之后默认使用持久连接,但出于兼容性保留该字段
  • Accept
    • 客户端声明自己所接受的数据格式和编码
  • Content-type
    • 服务器用于告知客户端,所返回数据的格式和编码
  • content-length
    • 服务器返回数据时,用于表明数据的长度(单位为 字节Byte)

Session 和 cookie 机制

: 都是会话跟踪机制,是客户端和服务端之间保持状态的解决方案
cookie机制采用的是 在客户端 保持状态的方案
session ~ 在服务端 保持状态的方案

cookie

客户端向服务端发起请求。如果服务端需要记录该用户状态,就 用response 向客户端颁发一个cookie。
客户端随之将cookie保存在本地。
当客户端(浏览器)再次请求时,可以携带上cookie一同提交给服务器,服务器检查cookie来辨认用户状态

session

同样,会化妆台也可以保存在服务端;
服务端记录用户状态时会获取(生成)session-sessionid,并且把sessionid通过response返回给客户端保存。
当客户端(浏览器)再次请求时,可以携带上sessionid一同提交给服务器,服务器检查sessionid来查session和辨认用户

cookie 和 session的区别

(1)实现机制:
session的实现依赖于cookie机制,sessionid通过cookie机制进行回传
(2)大小限制
cookie有大小限制,并且浏览器对于每个站点有cookie数量的限制
session无大小限制,理论上只与服务器的内存大小有关
(3)安全性
cookie存在安全隐患,在回传过程汇总可能被拦截,保存在本地的文件也可能被获取;
session相对安全,因为存在服务端
(4)服务器消耗
session在服务端的 生存周期为 会话期+20min(通常),若session过多会增加服务端的负担和压力

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值