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

news2024/11/18 16:29:25

目录

一、HTTP协议概念

二、HTTP 协议格式

三、HTTP请求详解

认识URL

 认识HTTP方法 

GET

POST

Host

Content-Length

Content-Type

User-Agent (简称 UA)

Referer

四、HTTP 响应详解

状态码

200 OK

404 Not Found

403 Forbidden

500 Internal Server Error

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的区别

        一般来说,GET和POST没有太大的区别,能够使用GET的场景POST也能够使用,能够使用POST的场景GET也能够使用.

1)  GET一般用于获取服务器的某一资源,POST一般适用于提交数据给服务器

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

3)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

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

500 Internal Server Error

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/545919.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IMX6ULL裸机篇之DDR3初始化

一. DDR3L初始化简介 I.MX6U-ALPHA 开发板上带有一个 256MB/512MB 的 DDR3 内存芯片&#xff0c;16 位宽&#xff0c;型号为 NT5CC128M16JR/MT5CC256M16EP&#xff0c;nanya 公司出品的&#xff0c;分为对应 256MB 和 512MB 容量。 我自己用的开发板上 DDR3L内存芯片型号为…

【论文阅读】REPLUG: Retrieval-Augmented Black-Box Language Models

文章目录 前言REPLUGREPLUG LSR: Training the Dense RetrieverComputing Retrieval LikelihoodComputing LM likelihood 前言 原文地址&#xff1a;REPLUG: Retrieval-Augmented Black-Box Language Models 本文提出REPLUG&#xff0c;一个将语言模型视为黑盒检索增强的语言模…

45道SQL题目陆续更新

文章目录 学习视频配置环境第一天内连接 外连接第二天 学习视频 学习视频 配置环境 四张表 配置四张表的sql语句 #创建发据库 create database frogdata charsetutf8&#xff1b;use frogdata;# 学生表 Student create table Student( SId varchar(10), Sname varchar(1…

网易云音乐开发--SongDetail搭建

SongDetail静态页面搭建 我们再新建一个页面songDetail 先写结构 再写结构 然后在写样式&#xff0c;把这个图片放进去 这样就放进去了&#xff0c;这里有一个新的让元素居中的方式就是&#xff0c;子绝父相&#xff0c;然后 position: absolute;top: 0;left: 0;right: 0;bot…

MultipartFile来上传单个及多个文件代码示例

目录 一、MultipartFile上传单个文件代码示例1.1、MultipartFile上传单个文件,不包含其它参数1.2、MultipartFile上传单个文件,包含其它参数1.3、MultipartFile上传单个文件,包含其它请求实体 二、MultipartFile上传多个文件代码示例2.1、MultipartFile上传多个文件,不包含其它…

java(springboot+ssm)/python/php/nodejs/基于vue的景区门票预约管理系统

后端&#xff1a;java(springbootssm)/python/php/nodejs/ 开发运行&#xff1a;微信开发者/hbuilderx 后端:idea/eclipse/vscode/pycharm 模块划分&#xff1a;公告类型、公告信息、用户信息、用户咨询、地区信息、景区信息、景区开放、景区预约、统计信息 本技术是Java平台的…

国考省考行测:年均增长率,等速率增长率问题

国考省考行测&#xff1a;年均增长率&#xff0c;平均增长率 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#xff0c;而常规国考省考最重要的还是申论和行测&#xff0c;所以大家认真准备吧&#xff0c;我讲一起屡屡申…

异常和中断

异常和中断机制 ​ 现代计算机中都配有完善的异常和中断处理系统&#xff0c;CPU的数据通路中有相应的异常检测和响应逻辑&#xff0c;外设接口中有相应的中断请求和控制逻辑&#xff0c;操作系统中有相应的中断服务程序。 异常和中断的基本概念 异常&#xff08;内中断&#…

数据结构之树,实现堆的增删改查接口及堆的应用

目录 一、树 1.树的概念及结构 1.1树的概念 1.2树的相关概念 1.3树的表示 2.二叉树的概念及结构 2.1二叉树的概念 2.2特殊的二叉树 2.3二叉树的性质 2.4二叉树的存储结构 3.二叉树的顺序结构及实现 3.1二叉树的顺序结构 3.2堆的概念及结构 二、堆的实现 0.定义堆…

神经网络:Zero2Hero 2 - MLP、Embedding

Zero → \to → Hero : 2 接上篇&#xff0c;Zero → \to → Hero : 1&#xff0c;进一步的扩展模型&#xff1a; 增加输入字符序列的长度&#xff0c;通过多个字符预测下一个字符的概率分布增加模型的深度&#xff0c;通过多层的MLP来学习和预测字符的生成概率增加嵌入层&…

LeetCode高频算法刷题记录5

文章目录 1. 最长递增子序列【中等】1.1 题目描述1.2 解题思路1.3 代码实现 2. 接雨水【困难】2.1 题目描述2.2 解题思路2.3 代码实现 3. 二叉树中的最大路径和【困难】3.1 题目描述3.2 解题思路3.3 代码实现 4. 二叉树的中序遍历【简单】4.1 题目描述4.2 解题思路4.3 代码实现…

HTB靶机014-Sunday-WP

Sunday 靶机IP&#xff1a;10.10.10.76 PortScan Nmap 快速扫描&#xff1a; ┌──(xavier㉿kali)-[~] └─$ sudo nmap -sSV -T4 -F 10.10.10.76 Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-06 00:10 CST Nmap scan report for 10.10.10.76 Host is …

2023年广东省中职网络安全Web渗透测试解析(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 1.访问地址http://靶机IP/task1,分析页面内容,获取flag值,Flag格式为flag{xxx}; 2.访问地址http://靶机IP/task2,访问登录页面。用户user01的密码为1-1000以内的数,获取用户user01的密码,将密码作为Flag进行提交,Flag格式…

客户端读取响应头+后端读取请求头的那些事

在一些特殊场景中&#xff0c;我们在客户端想要去获取服务端接口设置的一些自定义响应头&#xff0c;服务端该如何处理&#xff0c;客户端才能取到这些自定义响应头的值呢&#xff1f; 特殊场景&#xff0c;我这里也举例一下&#xff0c;原生页面webView嵌入web页面。这个时候…

Shell脚本编程入门--Day2

文章目录 几个简单内置shell命令shell字串的语法计算变量长度的各种玩法批量修改文件名特殊shell扩展变量实际应用父子shell创建进程列表&#xff08;创建子shell&#xff09; 几个简单内置shell命令 echo -n 不换行输出 -e 解析字符串中的特殊符号 &#xff08;\n, \r, \t, \…

浏览器的进程和线程

浏览器是多进程多线程的应用程序 浏览器进程 主要负责界面显示、用户交互、子进程管理等。浏览器进程内部会启动多个线程处理不同的任务。 网络进程 负责加载网络资源。网络进程内部会启动多个线程来处理不同的网络任务。 渲染进程 渲染进程启动后&#xff0c;会开启一个染主线…

macOS 13.4正式版(22F66)With OpenCore 0.9.2开发版 and winPE双引导分区原版镜像

镜像特点 原文地址&#xff1a;http://www.imacosx.cn/113625.html 完全由黑果魏叔官方制作&#xff0c;针对各种机型进行默认配置&#xff0c;让黑苹果安装不再困难。系统镜像设置为双引导分区&#xff0c;全面去除clover引导分区&#xff08;如有需要&#xff0c;可以自行直…

java boot项目基础配置之设置启动端口

因为 springboot 项目是一个内嵌的tomcat 那么 我们就来研究一下 怎么改它的启动端口 其实 它的配置 还是非常多的 我们基础部分讲一下 后面 到实用部分 再一边用 一边再看一些 首先 我们如果不设置 他就会占用 我们的 8080端口 那么 我们最好就直接用 80端口 就不用输入端口…

【滤波】卡尔曼滤波数学

本文主要翻译自rlabbe/Kalman-and-Bayesian-Filters-in-Python的第7章节07-Kalman-Filter-Math&#xff08;卡尔曼滤波数学&#xff09;。 %matplotlib inline#format the book import book_format book_format.set_style()简介 如果你已经学习到了这一步&#xff0c;我希望你…

vue基础知识一:说说你对vue的理解?

一、从历史说起 Web是World Wide Web的简称&#xff0c;中文译为万维网 我们可以将它规划成如下的几个时代来进行理解 石器时代 文明时代 工业革命时代 百花齐放时代 石器时代 石器时代指的就是我们的静态网页&#xff0c;可以欣赏一下1997的Apple官网 最早的网页是没有数据库…