【计算机网络之HTTP篇】HTTP协议详解

目录

一、HTTP协议概念

二、HTTP 协议格式

三、HTTP请求详解

认识URL

 认识HTTP方法 

GET

POST

Host

Content-Length

Content-Type

User-Agent (简称 UA)

Referer

四、HTTP 响应详解

状态码

200 OK

404 Not Found

403 Forbidden

499

413

500 Internal Server Error

502  服务器网络连接失败,服务器不可用

504 Gateway Timeout

302 Move temporarily

301 Moved Permanently

HTTP状态码总结 

报头

 通过 form 表单构造 HTTP 请求



一、HTTP协议概念

        HTTP协议是应用层上的协议,HTTP协议叫做超文本传输协议。

所谓 " 超文本 " 的含义 , 就是传输的内容不仅仅是文本 ( 比如 html, css 这个就是文本 ), 还可以是一些 其他的资源, 比如图片 , 视频 , 音频等二进制的数据

我们在输入网站在浏览网页时,就是使用HTTP协议来进行数据传输的。

        当我们在浏览器中输入一个 " 网址 " (URL) , 浏览器就给服务器发送了一个 HTTP 请求, 服务器返回了一个 HTTP 响应 . 这个响应结果被浏览器解析之后, 就展示成我们看到的页面内容 . ( 这个过程中浏览器可能会给服务器发多个 HTTP 请求 , 服务器会对应返回多个响应 , 这些响应里就包含了页面 HTML, CSS, JavaScript, 图片 , 字体等信息).
        当我们在浏览器界面输入一个URL到浏览器界面加载画面这期间具体发生了细节可以参考我的这篇文章:输入网址url到网页显示,期间发生了什么?
 

二、HTTP 协议格式

HTTP 是一个文本格式的协议. 可以通过Fiddler 抓包工具来分析 HTTP 请求/响应的细节

        Fiddler 抓包工具的原理就相当于一个"代理",当我们在浏览器中输入一个网址时,会生成HTTP请求发送给代理,然后代理再把这个HTTP请求发送给服务器,服务器在收到请求后会生成一个HTTP响应,代理收到响应后再发送给浏览器。

Fiddler 抓包工具下载地址:https://www.telerik.com/fiddler

 首次使用,需要开启 https(当前网络上主要的协议是 https,很少直接使用 http)

接下来就使用Fiddler来进行抓包使用

协议格式总结

因为 HTTP 协议并没有规定报头部分的键值对有多少个 . 空行就相当于是 " 报头的结束标记 ", 或者是 " 报头和正文之间的分隔符 "。

HTTP请求协议格式:

请求行:

1)Method:HTTP的方法,大部分是GET和POST方法,获取资源和传输主体

2)URL:输入的网址

3)Version:使用的http协议的版本号,如HTTP/ 1.1

请求报头(header)

key:value 为键值对,键值对的个数不限制

空行

空行为请求报头的结束标志

请求正文(body)

空行后面的内容都是Body. Body 允许为空字符串 . 如果 Body 存在 , 则在 Header 中会有一个Content-Length 属性来标识 Body 的长度 ; 如果服务器返回了一个 html 页面 , 那么 html 页面内容就是在body .

HTTP响应协议格式:

状态行:

1)Version:使用的HTTP协议的版本号,如HTTP/ 1.1

2)状态码:200 OK 这是一个最常见的状态码, 表示访问成功,还有其他状态码:

404 Not Found、403 Forbidden (访问被拒绝)等等

响应报头

key:value 为键值对,键值对的个数不限制

空行

空行为请求报头的结束标志

请求正文

空行后面的内容都是body.就是服务器返回给客户端的具体数据。内容可能有各种格式,最常见的就是 HTML。

HTTP请求的抓包如下:

HTTP响应的抓包如下:

三、HTTP请求详解

认识URL

我们在浏览器中输入的网址就相当于是一个URL,URL的组成如下:

 认识HTTP方法 

GET

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

POST

POST 方法也是一种常见的方法 . 多用于提交用户输入的数据给服务器 ( 例如登陆页面 ). 通过 HTML 中的 form 标签可以构造 POST 请求 , 或者使用 JavaScript ajax 也可以构造 POST 请求 .

经典面试题:GET和POST的区别

1)  GET一般用于获取服务器的某一资源(也就是进行查询操作),POST一般适用于提交数据给服务器(进行修改、删除和更新操作)

2)  GET 和 POST 的参数传递也是不同的,GET 请求是将参数拼加到 URL 上进行参数传递的,而 POST 是将参数写入到请求正文中传递的

3)GET 请求一般是幂等的, POST 请求一般是不幂等的. (如果多次请求得到的结果一样, 就视为请求是幂等的).

4)GET可以被本地缓存,而POST不能被本地缓存

5)   GET 请求的参数会保存在历史记录中,而 POST 请求的参数不会保留到历史记录中。

Host

表示浏览器这个请求要访问的服务器的地址和端口

         大多数情况下,Host 中的值和 URL 中的域名是一致的;但是如果当我们访问的服务器不是直接访问,而是通过”代理“来访问的,此时 Host 和 URL 可能就不一致了(相当于 Host 是最终目标,URL是当前目标)。因此在这里 Host写一遍去确认访问的服务器是什么

Content-Length

 表示body的长度:空格后面都是body部分

Content-Type

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

User-Agent (简称 UA)

表示当前的设备是电脑还是手机

Referer

表示当前页面是从哪个页面跳转过来的。如果直接在浏览器中输入 URL, 或者直接通过收藏夹访问页面时是没有 Referer  

        Cookie 中存储了一个字符串, 这个数据可能是客户端(网页)自行通过 JS 写入的, 也可能来自于服务器(服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据)。往往可以通过这个字段实现 "身份标识" 的功能。

        Cookie是当浏览器第一次访问服务器时,服务器返回响应给浏览器的同时也附带cookie给浏览器。这样浏览器下一次再访问服务器时,带着这个cookie,此时服务器就会自动识别浏览器的身份。    Cookie一般是保存在浏览器本地上。在服务器上会保存着Session。     

四、HTTP 响应详解

状态码

状态码表示访问一个页面的结果 . ( 是访问成功 , 还是失败 , 还是其他的一些情况 ...).
以下为常见的状态码

200 OK

这是一个最常见的状态码 , 表示访问成功

404 Not Found

找不到资源,当在浏览器输入一个 URL, 目的就是为了访问对方服务器上的一个资源. 如果这个 URL 标识的资源不存在, 那么就会出现 404

403 Forbidden

表示访问被拒绝,即没有权限访问服务器的某一个资源

499

499状态码是一个非标准的状态码, 客户端发送请求后,但在服务器完成响应之前,客户端主动关闭了连接。

413

413状态码表示请求实体过大,服务器无法处理。

当客户端发送的请求过于庞大,超出了服务器预定的限制时,服务器可能会返回413状态码。

这通常发生在客户端试图上传的数据超过服务器的限制,例如上传的文件大小超过了服务器允许的最大限制。

500 Internal Server Error

服务器出现内部错误。 一般是服务器的代码执行过程中遇到了一些特殊情况 ( 服务器异常崩溃 ) 会产生这个状态码

502  服务器网络连接失败,服务器不可用

502状态码即表示服务器暂时不可用

504 Gateway Timeout

服务器响应超时。

302 Move temporarily

临时重定向。
就相当于手机号码中的 " 呼叫转移 " 功能 .
比如我本来的手机号是 186-1234-5678, 后来换了个新号码 135-1234-5678, 那么不需要让我的朋友知道新号码, 只要我去办理一个呼叫转移业务, 其他人拨打 186-1234-5678 , 就会自动转移到 135-1234-5678 上.
在登陆页面中经常会见到 302. 用于实现登陆成功后自动跳转到主页 .

301 Moved Permanently

永久重定向 . 当浏览器收到这种响应时 , 后续的请求都会被自动改成新的地址 .

HTTP状态码总结 

高频面试题:

                                        五大类THHP常见状态码

1xx提示信息,接收请求正在处理
2xx成功,报文已经收到并被正确处理200、204、206
3xx重定向,资源位置发生变动,需要客户端重新发送请求301、302、304
4xx客户端错误,请求报文有误,服务器无法处理400、403、404
5xx服务器错误,服务器在处理请求时内部发生了错误500、501、502、503

报头

响应报头的格式和请求报头的格式基本一致。像 Content-Type , Content-Length 等属性的含义也和请求中的含义一致。不过响应的 Content-Type 常见取值有这几种:

  1. text/html : body 数据格式是 HTML
  2. text/css : body 数据格式是 CSS
  3. application/javascript : body 数据格式是 JavaScript
  4. application/json : body 数据格式是 JSON

 通过 form 表单构造 HTTP 请求

form (表单) HTML 中的一个常用标签. 可以用于给服务器发送 GET 或者 POST 请求.  

form 的重要参数 :
action: 构造的 HTTP 请求的 URL 是什么 .
method: 构造的 HTTP 请求的 方法 是 GET 还是 POST (form 只支持 GET POST).
input 的重要参数 :
type: 表示输入框的类型 . text 表示文本 , password 表示密码 , submit 表示提交按钮 .
name: 表示构造的  HTTP 请求的 query string key. query string value 是输入框用户的
输入的内容 .
value: input 标签的值 . 对于 type submit 类型来说 , value 就对应了按钮上显示的文本 .
<form action="https://www.baidu.com/" method="GET">
    <input type="text" name="userId">
    <input type="password" name="classId">
    <input type="submit" value="提交">
</form>

 抓包如下:

 form 代码和 HTTP 请求之间的对应关系

  • form action 属性对应 HTTP 请求的 URL
  • form method 属性对应 HTTP 请求的方法
  • input name 属性对应 query string key
  • input 的 内容 对应 query string value

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTTP 协议(Hypertext Transfer Protocol)是一种用于传输超文本的应用层协议,是万维网数据传输的基础。它采用客户端-服务器模式,客户端发起请求,服务器返回响应。下面对 HTTP 协议进行详细解析。 HTTP 协议以简洁的请求-响应模型为基础。客户端发送请求报文给服务器,报文包含请求方法、URL、协议版本等信息。服务器收到请求后,根据请求内容进行相应处理,并返回响应报文给客户端。响应报文包含协议版本、状态码、响应头和响应体等信息。客户端接收到响应后,根据状态码判断请求是否成功,并解析响应内容。 HTTP 协议的特点主要包括:无状态、可靠性差、传输效率低。无状态指的是服务器不会保存任何客户端的状态信息,每次请求都是单独的。可靠性差是因为 HTTP 使用 TCP 进行数据传输,TCP 协议本身也有一定的不可靠性。传输效率低是由于 HTTP 建立连接的开销较大,并且每次请求都需要重新建立连接。 HTTP 协议的工作流程如下:客户端发送一条请求到服务器服务器接收并解析请求,处理请求并生成响应,将响应发送给客户端,客户端接收并解析响应。 HTTP 协议的主要优点包括:易于使用、灵活性强、便于扩展。易于使用指的是 HTTP 的语法规则简单明了,易于理解和实现。灵活性强指的是可以通过设置请求头、传递参数等方式来定制请求。便于扩展指的是可以根据需要添加新的功能或特性。 总之,HTTP 协议作为互联网应用最常用的协议之一,它的设计简洁、易于使用,为用户提供了方便、快速的网络通信方式。同时,由于协议本身的一些限制,HTTP 协议的传输效率相对较低,因此在一些对效率要求较高的场景下,可能需要使用其他协议替代。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值