HTTP协议学习笔记(一)请求方法名及状态码
HTTP协议是位于TCP协议之上的应用层协议,是应用进程之间通讯的一种协议。之所以称之为应用层协议,是因为它无需关心数据是通过什么方式到达对端的,在到达对方的应用程序之前都经历了什么,而只需要协商好使用的数据格式,保证一方可以解析出另一方的意图即可
这也是TCP/IP协议的真正目的,上层无需过度关心底层的实现细节
当用户在浏览器上输入一段网址后,主要经历了以下几个阶段
- dns解析,通过主机名找到主机ip地址
- 向对应ip地址和端口(默认是80)发送连接请求,服务器接收请求(三次握手)
- 浏览器发送HTTP请求报文段
- 服务器解析HTTP请求,生成响应报文段
- 浏览器解析HTTP响应,将资源信息显示在屏幕上
- 保持连接或者断开连接,取决于是否开启keep-alive
可以参考这篇博客,讲得比较详细从输入URL到页面加载发生了什么
URL格式
不管是否学过HTTP协议,总听过URL这个东西吧,平时输入在浏览器上的网址,自然就是URL本尊了。但是URI又是什么呢
URI学名叫统一资源标识符,它有两种形式,分别是URL和URN
URL,统一资源定位符是URI最常见的形式,它描述了资源在一台特定服务器上的特定位置。比如输入下面的网址时
http://www.balabala.com/index.html
实际上要访问的资源就是目标主机服务器当前目录下的index.html文件,而
http://www.balabala.com/image/hello.jpg
要访问的是目标主机服务器当前目录下的image子目录下的hello.jpg文件
通过URL可以准确定位一个资源的具体位置。但是如果服务器主机的内部目录有所改变,那么网站就要改变了
URL的完整格式如下
虽然很复杂,但是基本上没有哪个URL包含的这么完整,由于http默认端口号是80,经常省略,所以通常使用协议,地址,路径三部分就足以定位到某个主机的某个资源了,比如下面这段URL
http://www.balabala.com/index.html
其中http就是采用的协议,www.balabala.com代表目标服务器的主机ip或者主机名,/index.html表示目标主机的资源路径
除了上述三部分,出现次数比较多的还有查询字符串,它由?标识开始,通常是将后面出现的变量值作为参数传递给访问的资源(动态资源)。比如下面的URL
http://www.balabala.com/cgi-bin/adder?a=1&b=2
首先从中截取出资源位置/cgi-bin/adder(这里假设adder是一个可执行文件,接收两个数,返回加法和)
并将1和2作为参数调用/cig-bin/adder这个程序,然后将计算结果返回给客户端
URN称为统一资源名,是通过文件名定位资源的一种形式,目前正在研究中。。。
HTTP请求报文段
客户端与服务器的通信是基于HTTP协议的,通信双方发送的数据格式必须符合HTTP协议标准,这样接收方才能解析出发送方的意图。
HTTP协议规定必须是客户端先发送请求,然后服务器处理后发送响应。服务器不能在没有收到客户端请求的情况下主动发送数据给客户端。
websocket正是为了解决这一问题而诞生的,比如一个获取时间的web服务器,一有连接就将当前时间主动发给客户端
请求报文段分为请求行,请求头,请求体(数据实体)三部分。请求行由方法名,资源路径,版本号三部分组成
GET /index.html HTTP/1.1
方法名
方法名指出客户端的意图,常用的几个方法名有GET, POST, HEAD, PUT, OPTIONS, TRACE等
GET
GET是最常用的方法,当客户端想要从服务器上获取某个资源的内容时使用。服务器将资源内容作为响应报文段的数据实体返回
HEAD
HEAD方法与GET类似,但是服务器只通过HTTP响应头返回资源的信息(如文件大小,类型等),响应报文段的数据实体为空
PUT
PUT方法表示客户端想要在服务器上生成一个文件,文件名由请求行的资源路径指出,文件内容由数据实体指出。如果服务器上存在同名文件,则覆盖
POST
POST方法表示客户端打算向服务器提交某些数据,比如图书管理员想要向服务器的数据库中增加新图书,就可以通过POST方法提交一个表单,包含图书的各种信息
TRACE
TRACE方法表示客户端想要看看自己发送的请求报文段是什么样子,也就是服务器回复的HTTP响应头的数据实体部分是它收到的请求报文段。由于在HTTP请求报文段被送往服务器的过程中可能会途径代理服务器,而代理服务器可能会更改请求报文段,为了一探究竟,客户端可以使用TRACE方法
OPTIONS
OPTIONS方法用于获取服务器支持的所有方法名,以防止客户端使用了服务器不支持的方法
DELETE
DELETE方法用于将服务器上的某个资源删掉,是否删除取决于服务器
HTTP响应报文段
HTTP响应报文段由响应行,响应头,响应体(数据实体)三部分组成。当服务器处理完客户端的请求后会发送响应报文段给客户端告知服务器的处理结果
比如客户端想要获取目标资源/index.html的内容,如果服务器正确找到index.html文件,就会将它的内容作为数据实体返回给客户端。但是如果服务器没有找到/index.html文件或者无法识别HTTP请求信息,就会返回一个代表出错的响应报文段
响应行包含了HTTP协议版本号,状态码和状态信息
HTTP/1.1 200 OK
状态码
状态码用于说明服务器对于客户端请求的处理情况,分成五大类,范围从100到599总共600个
100~199代表信息性状态码
使用不多
200~299代表成功状态码
这些状态码表示客户端的请求服务器已经成功处理。常见的状态码及解释如下
300~399代表重定向状态码
这些状态码告知客户端要么使用替代的位置访问想要的资源,要么告诉服务器可以返回什么来替代资源内容
比如客户端请求服务器上的一个资源信息,但是这个资源已经移动到其它地方了,此时服务器会将资源的新位置返回给客户端,随后客户端重新请求资源信息
常见的状态码有
400~499代表客户端错误状态码
比如最讨厌的404,它表示服务器对客户端请求的资源一无所知
常见的状态码如下
500~599代表服务器错误状态
表示服务器出现错误,常见的状态码如下
HTTP协议学习笔记(一)请求方法名及状态码相关推荐
- TCP/IP协议族(一) HTTP简介、请求方法与响应状态码
接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的.接下来的几篇博客都是关于TCP/IP协议族的,本篇博客就先简单 ...
- http接口测试:了解协议、请求方法、响应状态码
http接口测试:了解协议.请求方法.响应状态码 接口在各个系统间的重要性无需重申,主要体现在外部系统与系统之间以及内部各子系统之间的交互点.通过这些特定的交互点和一些特殊的规则标准(协议)来进行系统 ...
- HTTP简介、请求方法与响应状态码
点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! Https相关的文章,请看这一篇:TCP.IP协议族之数字签名与HTTPS详解 接下来想系统的回顾 ...
- 02-HTTP的请求方法以及响应状态码
1. HTTP的请求方法以及响应状态码 1.1. 请求方法 http请求方法有GET.POST.PUT.HEAD.DELETE.OPTIONS.TRACE.CONNECT.当然上述方法是基于HTT ...
- HTTP协议、HTTP请求方法、常见状态码、HTTP消息
HTTP协议 客户端请求,服务端响应.浏览器与服务器不建立持久连接,响应后连接失效. HTTP请求方法 一.GET GET方法用于获取请求页面的指定信息. 二.HEAD 除了服务器不能在响应里返回消息 ...
- 3-3:HTTP协议之request和respond及常见请求方法和常见状态码
文章目录 一:request (1)请求报文基本构成 (2)请求方法 二:respond (1)响应报文基本构成 (2)HTTP常见状态码 三:HTTP常见Header(字段) 注意下面需要分析请求报 ...
- Servlet和HTTP请求协议-学习笔记01【Servlet_快速入门-生命周期方法、Servlet_3.0注解配置、IDEA与tomcat相关配置】
Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...
- Servlet和HTTP请求协议-学习笔记02【Servlet_体系结构与urlpartten配置、HTTP请求协议】
Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...
- BGP协议学习笔记——BGP基础
BGP协议学习笔记--BGP基础(BGP概念.BGP报文.BGP状态机.BGP关系建立.BGP路由通告) 说明:本文学习笔记整理自网络.华为公开产品文档.华为公开PPT及部分的自我理解 一.BGP简介 ...
最新文章
- 初次使用VS附加到进程功能
- [置顶] 编写自己的JQUERY插件
- CSS3制作一个简单的进度条
- 基于matlab/simulink的双电机速度跟踪伺服系统仿真,基于MatlabSimulink的伺服系统仿真pdf.doc...
- python爬取b站弹幕_爬取B站弹幕并且制作词云
- Vue 学习笔记 — css属性计算的问题
- Linux中断一网打尽(1) — 中断及其初始化
- 随便说说removeFromSuperview方法
- firefox访问页面 直接显示代码问题问题解决办法
- 51单片机模拟交通灯c语言程序,51单片机protues仿真——LED模拟交通灯
- Android 仿qq 点赞功能
- 深度学习之卷积自编码器
- 少儿Python编程教程
- 火爆数字资产Vpay plustoken各种钱包开发,你看中了哪一款?
- 试题 历届试题 回文数字
- 贼好用的对比工具--BeyondComper
- IBM Spectrum LSF-手册
- 微信小程序简单demo
- golang使用iris框架全局异常捕获
- 剑指offer 专项突破版 78、合并排序链表
热门文章
- Java黑皮书课后题第1章:1.1(显示三条消息)编写程序,显示Welcome to Java、Welcome to Computer Science和Programming is fun
- 单细胞数据整合方法 | Comprehensive Integration of Single-Cell Data
- windows下基于IIS配置ssl证书
- 使用C#获取IP地址方法
- iframe有那些缺点
- iOS开发之时间格式的转化
- Windows 7 VHD 启动
- ORACLE----触发器,存储过程及JOB
- 【数据结构与算法】之深入解析“不同路径II”的求解思路与算法示例
- HarmonyOS之AI能力·IM类意图识别