HTTP协议

41 篇文章 2 订阅

目录

1. HTTP是什么?

2. HTTP工作过程

3. 抓包结果分析

 4. HTTP请求

4.1 请求地址URL

 4.2 认识请求方法类型

4.2.1 GET

4.2.2 POST

4.2.3 其他方法

4.3 请求报头

4.3.1 Host

4.3.2 Content - Length

4.3.3 Content - Type

4.3.4 User - Agent

4.3.5 Referer

4.3.6 Cookie

 4.4 请求正文

4.4.1  application/x-www-form-urlencoded

4.4.2  multipart/form-data

4.4.3  application/json

5. HTTP 响应

1. 首行

a. 版本号

b. 状态码

c. 状态描述信息

2. 响应报头

3. 空行

4. 返回主题


1. HTTP是什么?

HTTP :超文本传输协议。是一种流行的应用层协议,“超文本”不仅仅是指文本(html, css, JavaScript等),还可以使其他的资源,比如图片,视频,音频等二进制的数据。

2. HTTP工作过程

在浏览器中输入一个“网址”,浏览器会给对应服务器发送一个HTTP请求,服务器收到该请求之后,会返回一个HTTP相应。

 

3. 抓包结果分析

HTTP是一个文本格式的协议,可以通过Chrome开发者工具或者Fiddler进行抓包,分析HTTP请求/响应。

浏览器访问sougou.com时,会把HTTP请求现发给Fiddler,Fiddler再把请求转发给 sogou 的服务

器. 当 sogou 服务器返回数据时, Fiddler 拿到返回数据, 再把数据交给浏览器.

HTTP  请求头:

1. 首行 : 请求的类型  请求的地址  请求的版本号

2. 请求头:  

        key :  value   

        key :  value   

           .... ....

        key :  value   

3. 空行:为了区分第二部分请求头和第四部分请求体。

4. 请求正文:用来存储开发者传递的参数和参数的值。

HTTP 响应头: 

 1. 状态行: HTTP 版本号     状态码   状态码的描述

 2. 响应行: 

        key :  value

        key :  value   

           .... ....

        key :  value   

3. 空行

4. 响应正文

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

因为 HTTP 协议并没有规定报头部分的键值对有多少个. 空⾏就相当于是 "报头的结束标记", 或者是  "报头 和 正⽂ 之间的分隔符"。
HTTP 在传输层依赖 TCP 协议, TCP 是⾯向字节流的. 如果没有这个空⾏, 就会出现 "粘包问题".

  

 4. HTTP请求

4.1 请求地址URL

“网址”  就是URL 。互联⽹上的每个⽂件都有⼀个唯⼀的URL,它包含的信息指出⽂件的位置以及浏览器应该怎么处理它。

URL 中可省略部分
        ● 协议名: 可以省略, 省略后默认为 http://
        ● ip 地址 / 域名: 在 HTML 中可以省略(⽐如 img, link, script, a 标签的 src 或者 href 属性). 省略后 。表示服务器的 ip / 域名与当前 HTML 所属的 ip / 域名⼀致.
        ● 端⼝号: 可以省略. 省略后如果是 http 协议, 端⼝号⾃动设为 80; 如果是 https 协议, 端 ⼝号⾃动 设为 443.
        ● 带层次的⽂件路径: 可以省略. 省略后相当于 / . 有些服务器会在发现 / 路径的时候⾃动访问 /index.html
        ● 查询字符串: 可以省略
        ● ⽚段标识: 可以省略

 4.2 认识请求方法类型

4.2.1 GET

GET 用于获取服务器上的资源。在浏览器上输入URL之后,浏览器就会发送出一个GET请求。(HTML中的 link, img, script 等标签, 也会触发 GET 请求

GET 请求类型特征: 长度限制。 HTTP协议标准是没有规定GET类型有长度限制。

(在URL中可以看到传递参数的值,不安全,但是POST不会看到要传递参数的值,POST比GET安全。)

4.2.2 POST

POST 用于提交用户输入的数据给服务器。(通过 HTML 中的 form 标签可以构造 POST 请求, 或者使⽤ JavaScript 的 ajax 也可以构造 POST 请求.

GET 与 POST 区别总结:

(MS)GET 与 POST 区别

(没有本质上的区别,但也不是没有区别!!!)

1. 语义不同 :GET 获取数据(查询),POST 提交数据(非查询)。

2. body 非空不同 :GET一般为空,POST一般不为空,GET传递数据通过的query string传递,POST的query string一般为空。

3. 幂等(多次请求得到的结果一样,就视为幂等)不同 :GET 是幂等的(查询),POST 不幂等(添加插入操作)。

4. GET 通常是缓存的,POST 是不缓存的。

5. 最大值的限制不同:标准上没有规定GET的URL的长度,也没有规定POST的body的长度,传输数据量多少,完全取决于不同浏览器和不同服务器之间的区别。

6. 安全性不同:GET是把参数直接显示在URL上的,不安全。POST是放在body中,故相对安全,但也不能完全就说POST比GET安全,用抓包工具就可以抓到POST请求正文body中的数据,也不安全,因此,是否安全,取决于前端在传输密码等mingan信息时是否加密,和GET和POST无关。

4.2.3 其他方法

1. PUT 与 POST 相似,只是具有幂等特性,⼀般⽤于更新

2. DELETE 删除服务器指定资源

3. OPTIONS 返回服务器所⽀持的请求⽅法

4. HEAD 类似于GET,只不过响应体不返回,只返回响应头

5. TRACE 回显服务器端收到的请求

4.3 请求报头

4.3.1 Host

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

4.3.2 Content - Length

表示body中的数据长度。

验证数据在网络传递过程中有没有丢失。比如length 是7,通过网络传递到服务端,服务端拿到的数据长度是4,发生数据丢失。 

4.3.3 Content - Type

表示请求的body中的数据格式。

常见选项:

1.  application/x-www-form-urlencoded: form 表单提交的数据格式. 此时 body 的格式形如:

         title=test&content=hello

2.  multipart/form-data: form 表单提交的数据格式

通常⽤于提交图⽚/⽂件. body 格式形如:

                
        Content-Type:multipart/form-data; boundary=----
        WebKitFormBoundaryrGKCBY7qhFd3TrwA
        ------WebKitFormBoundaryrGKCBY7qhFd3TrwA
        Content-Disposition: form-data; name="text"
        title
        ------WebKitFormBoundaryrGKCBY7qhFd3TrwA
        Content-Disposition: form-data; name="file"; filename="chrome.png"
        Content-Type: image/png
        PNG ... content of chrome.png ...
        ------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
3.  application/json: 数据为 json 格式 . body 格式形如:
        
        {"username":"123456789","password":"xxxx","code":"jw7l"} (key : value)形式

4.3.4 User - Agent

表示浏览器 / 操作系统的属性 

4.3.5 Referer

表示这个页面是从哪个页面跳转过来的。比如:https://baidu.com/

但是直接在浏览器中输入URL,或者通过收藏夹访问页面是没有Referer的。

4.3.6 Cookie

Cookie就是,由服务器发送给客户端的特殊信息,这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求时都会带上这些特殊的信息。 

当用户使用浏览器访问一个网站的时候,用户输入个人信息给服务器,接着,服务器在向客户端回传响应的超文本的同时,也会发回这些个人信息(存放在Response Header 中)。当客户端收到来自服务器的响应之后,浏览器会将这些信息存放在一个统一的位置。当客户端再次向服务器发送请求时,都会把响应的Cookie再次发挥服务器,而这次Cookie信息存放在Request Header 中 。

通常,我们在网上的登录界面第一次输入个人信息及密码之后,点击“记住我” 这种选项之后,之后访问该网站就不需要输入个人信息及密码了。这个功能就是通过Cookie来完成的。


 4.4 请求正文

正⽂中的内容格式和 header 中的 Content-Type 密切相关。
下⾯可以通过抓包来观察这三种情况:

4.4.1  application/x-www-form-urlencoded

 

4.4.2  multipart/form-data

(文件) 

4.4.3  application/json

(前后端进行交互)

5. HTTP 响应

1. 首行

a. 版本号

b. MS状态码

状态码表示访问⼀个⻚⾯的结果.

200 OK      表示访问成功。  

301 Moved Permanently 永久重定向 

302 Move temporarily  临时重定向 

403 Forbidden    访问被拒绝 ,没有权限访问

404 Not Found       没有找到资源 ,访问页面不存在

500 Internal Server Error  服务器内部错误

503 网关错误 

504 Gateway Timeout   服务器负载较大(双十一),访问超时

  (MS 301、 302)

c. 状态描述信息

2. 响应报头

响应报头的基本格式和请求报头的格式基本⼀致.
类似于 Content-Type, Content-Length 等属性的含义也和请求中的含义⼀致.

  

Content-Type :

        响应中的 Content-Type 常⻅取值有以下⼏种:

               1.  text/html : body 数据格式是 HTML

                2. text/css : body 数据格式是 CSS

                3. application/javascript : body 数据格式是 JavaScript

                4. application/json : body 数据格式是 JSON

3. 空行

4. 返回主题

  • 37
    点赞
  • 228
    收藏
    觉得还不错? 一键收藏
  • 24
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值