详谈HTTP协议

目录

1、HTTP是什么?

2、HTTP的工作过程

※ 2.1 HTTP协议格式

2.1.1 抓包工具的使用

2.1.2 抓包工具的原理

2.1.3 协议格式

3、HTTP请求

3.1 请求地址URL(统一资源定位符)俗称网址

 3.2 请求的方法

3.2.1 GET

3.2.2 POST

3.3 请求报头 

3.3.1 Host

3.3.2 Content-Length

3.3.3 Content-Type ※

3.3.4 User-Agent(UA) 

3.3.5 Referer

3.3.6 Cookie

3.4 请求正文

4、HTTP响应

4.1 状态码※

4.2 响应报头


1、HTTP是什么?

HTTP,全称为超文本传输协议,是一种应用广泛的应用层协议。我们平时打开一个网站,就是通过HTTP协议来传输数据的。一个完整的应用由前端页面+后端程序构成,而其之间的通讯是依靠HTTP来完成的

2、HTTP的工作过程

当我们在浏览器中输入Bing搜索的“网址”(url)时,浏览器就给Bing的服务器发送一个HTTP请求,Bing服务器随后给浏览器一个HTTP响应。响应结果会被浏览器解析,随后就展示成我们看到的样子。事实上,我们在访问一个网站时,可能涉及不止一次的HTTP请求/响应 的交互过程。

※ 2.1 HTTP协议格式

HTTP是一个超文本传输协议,可以通过Chrome开发者工具或者FIddler 抓包,分析HTTP请求/响应的细节。

2.1.1 抓包工具的使用

以Fiddler为例

左边为当前所有的HTTP请求/响应。

右上切换到Raw标签可以看到HTTP请求报文的内容。

右下切换到Raw标签,可以看到HTTP响应报文的内容。

2.1.2 抓包工具的原理

 当浏览器访问某个页面时,就会把HTTP请求先发给Fiddler,Fiddler然后再把请求转发给相应的服务器,当服务器返回响应时,Fiddler先拿到数据,再把数据交给浏览器。

 Fiddler就相当于一个中介,浏览器和服务器就分别相当于租客和房东,租客租房需要经中介才能进行办理租房,中介对于租客和房东之间交易的细节是非常清楚的。

2.1.3 协议格式

 为什么HTTP报文中要存在“空行”? 

因为HTTP协议并没有规定报头的键值对有多少个,加入一个空行,来作为报头结束的标识。

3、HTTP请求

3.1 请求地址URL(统一资源定位符)俗称网址

 3.2 请求的方法

 GET和POST是最常用的方法。

3.2.1 GET

GET是最常用的HTTP方法,常用于获取服务器上的某个资源,在浏览器中直接输入URL,此时浏览器就会发送一个GET请求。

特点:

①请求行第一部分为GET

②URL的query string 可以为空,也可以不为空

③请求报头部分有若干个键值对结构

④body部分为空

3.2.2 POST

POST也是常用的方法,多用于提交用户输入的数据给服务器(例如login页面)

特点:

①第一部分为POST

②URL的query string一般为空

③header部分由若干键值对构成

④body部分一般不为空。

GET VS POST ※

①语义不同,get是查询、post非查询操作

②body不同,get一般为空,post一般不为空。

③幂等不同,get是幂等的,post不幂等。

④get通常是缓存的,post不缓存

⑤最大值限制不同,浏览器通常对get是有最大长度限制的,post没有最大长度限制。

⑥安全性不同,get是把参数直接显示在url上的,所以不安全,post是放在body中的相对安全一点。

3.3 请求报头 

3.3.1 Host

表示服务器主机的地址和端口

3.3.2 Content-Length

表示body中数据长度

3.3.3 Content-Type ※

表示body中数据格式

①fapplication/x-www-form-urlencoded:form表单提交的数据格式,此时body的格式形如:

title=test&content=hello

 ②application/json:数据为json格式,body格式形如:

{"username":"zhangsan","password":"123456789"}

 什么是JSON?

JavaScript Object Notation(JavaScript 对象表示法)

json是存储和交换文本信息的语法是用来进行数据交换的

 JSON 教程 | 菜鸟教程 (runoob.com)

3.3.4 User-Agent(UA) 

表示用户浏览器/操作系统的属性,服务器端可以拿到当前访问服务器的user的浏览器信息和操作系统的信息。

3.3.5 Referer

表示这个页面是从哪个页面跳转过来的,若是直接浏览器中直接输入URL或者直接从收藏夹访问,此属性则为空。

3.3.6 Cookie

Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器之后向同一服务器再次发送请求时被带上,用于告知服务端两个请求是否来自于同一浏览器。(HTTP为无状态协议,它本身无法知道此时的请求是谁的请求)

Token是服务端生成的一串字符串,以作为客户端请求的令牌,比如登录CSDN访问自己的私密内容,初次登录时,服务器下发Cookie和Token返回给客户端,登陆成功后,再去访问自己的私密内容,这时就会带着Cookie和Token去请求下一部操作,以此类推。

(105条消息) 做web开发,怎么能不懂cookie、session和token呢?_>no problem<的博客-CSDN博客

3.4 请求正文

正文中的内容和header(请求报头)中的Content-Type密切相关。最常用的还是JSON格式

 

4、HTTP响应

HTTP响应的具体信息:

1、首行

        a.版本号

        b.状态码

2、响应报头

3、空行

4、返回正文(body)

4.1 状态码※

状态码表示访问一个页面的结果(是成功还是失败,或者另外的一些状况)

200:成功

301:永久重定向

302:临时重定向

403:没有权限访问

404:访问页面不存在

500:服务器错误

502:网关错误

504:访问超时

4.2 响应报头

响应报头的基本格式和请求报头格式基本一致。

Content-Type

text/html:body数据格式为HTML

text/css:body中的格式时css

application/javascript:body中数据格式是js

application/json:body中的数据格式是json

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值