HTTP协议

参考链接:https://www.cnblogs.com/weibanggang/p/9454581.html
https://www.cnblogs.com/qiang07/p/9304771.html
https://blog.csdn.net/weixin_39963132/article/details/84280374

HTTP协议

HTTP是超文本传输协议,其定义了客户端与服务器端之间文本传输的规范

HTTP工作原理

HTTP协议规定了Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含:请求的方法、URL、协议版本、请求头部、空行和请求数据。服务器以一个状态行作为响应,响应的内容包括:协议的版本、成功或者错误代码、状态码描述信息例:OK、响应头部、空行和响应数据

请求/响应过程

第一步 客户端连接服务器:
客户端(浏览器)-----------TCP三次握手------------>Web服务器(80端口)
描述:客户端与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接

第二步 发送HTTP请求
客户端(浏览器)-----------(发送请求报文)------------>Web服务器
通过TCP套接字,客户端向服务器发送一个文本的请求报文,请求报文由请求行、请求头部、空行、请求数据4部分组成
请求行包括:请求方法,请求URL,HTTP版本

第三步 服务器收到并解析请求,返回HTTP响应报文
客户端(浏览器)<--------------------(返回响应报文)----------------Web服务器(解析请求)
服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。响应报文由状态行、响应头部、空行、响应数据4部分组成
状态行包括:HTTP版本,状态码,状态描述信息

第四步 服务器关闭连接
客户端(浏览器)--------------------(TCP四次挥手)----------------Web服务器
如果连接模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;如果连接模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求。

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

请求方法

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

方法解释
GET向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner(性能测试)中对应get请求函数:web_link和web_url
POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner(性能测试)中对应POST请求函数:web_submit_data(网络提交数据),web_submit_form(网络提交表单)
HAED向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
OPTIONS返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
PUT向指定资源位置上传其最新内容
DELETE请求服务器删除Request-URL所标识的资源
TRACE回显服务器收到的请求,主要用于测试或诊断
CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

请求报文

请求报文包括:请求行,请求头,空行,请求数据。

  1. 请求行
    由三部分组成:请求方法,请求URL,HTTP版本
    例:GET www.baidu.com HTTP/1.1
    例:GET /index.html HTTP/1.1
    例:POST / HTTP1.1
  1. 请求头
    HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等
    例:User-Agent:产生请求的浏览器类型。
    Accept:客户端可识别的内容类型列表。
    Host:主机地址
  1. 请求数据
    使用GET方法时,一般将信息放在url后
    使用POST方法时,放在这个部分

响应报文

响应报文包括:状态行,消息报头,空行,响应正文

  1. 状态行
    由HTTP版本,状态码,状态描述信息三部分组成
    例:HTTP/1.1 200 OK
  1. 消息报头
    用来说明客户端要使用的一些附加信息
    例:Date: Fri, 22 May 2009 06:07:21 GMT
    例:Content-Type: text/html; charset=UTF-8
    Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8
  1. 响应正文
    响应正文就是服务器返回的HTML页面或者json数据

GET请求方法

GET方法提交的数据会直接填充在请求报文的URL上,如“ https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1 ” , 用“?”问号划分域名和GET提交的参数,A=B中的A是参数名,B是参数值,多个参数之间用&进行分割,如果参数值是中文,则会转换成诸如%ab%12加密16进制码。一般来说,浏览器处理的URL最大限度长度为1024B(不同浏览器不一样),所以GET方法提交参数长度有限制。可以用来传输一些可以公开的参数信息,解析也比较方便,如百度的搜索的关键词

POST请求方法

POST方法提交的数据会附在正文上,一般请求正文的长度是没有限制的,但表单中所能处理的长度一般为100k(不同协议不同浏览器不一样),而且需要考虑下层报文的传输效率,不推荐过长。POST方法可以用来提交一个用户的敏感信息(如果不使用HTTPS加密,报文正文仍旧是明文,容易被人截获读取)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值