推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 大饼蓝 > HTTP协议请求

HTTP协议请求

大饼蓝 2018-10-26

一、HTTP协议请求

想知道何为HTTP协议请求,那得先了解一下HTTP协议是什么?

HTTP协议即为超文本传输协议。他可以完成从客户端到服务器端等一系列运作流程。但HTTP是不保存状态的协议。

HTTP协议的作用:用于客户端和服务器端之间的通信。先从客户端发起请求建立通信,服务器端在收到请求后返回响应,通过请求和响应的交换达成通信目的。服务器在没有接收到请求之前是不会发送响应的。HTTP协议能够明确区分哪一端是客户端,哪一端是服务器端。


客户端如何访问资源呢?

这时HTTP需要找到URI(统一资源定位符)这个小伙伴来助客户端一臂之力,URI有特异功能(本身持有的特定功能),在互联网上任意位置的资源都能访问到,分分钟给你定位啊,厉害吧?

具体操作是酱紫的:

当客户端大佬请求访问资源而发送请求时,URI需要将作为请求报文中的请求URI包含在内,如此才能请求到资源。

举个栗子:

GET http://www.baidu.com/index.html HTTP/1.1

其中的URI是啥?没错就是红色的这一串http://www.baidu.com/index.html

GET /index.html HTTP/1.1

Host:www.baidu.com

嗯,好好理解下。


HTTP方法

你以为URI那么好使唤?想访问到URI指定的资源那么容易?你甚至还想对请求的资源进行某些骚操作?不,你必须用“方法”这块尚方宝剑去给它下命令,让它干啥它就干啥,否则是不会鸟你的。

向请求URI指定的资源发送请求报文时,采用称为“方法”的命令。方法的作用在于,可以指定请求的资源按期望产生某种行为。

下面我来列举下HTTP1.0和HTTP1.1支持的方法:

GET——获取资源——1.0,1.1

POST——传输实体主体——1.0,1.1

PUT——传输文件——1.0,1.1

HEAD——获得报文首部——1.0,1.1

DELETE——删除文件——1.0,1.1

OPTIONS——询问支持的方法——1.1

TRACE——追踪路径——1.1

CONNECT——要求用隧道协议连接代理——1.1

LINK——建立和资源之间的联系——1.0

UNLINK——断开连接关系——1.0


HTTP的持久连接

持久连接的好处乃节省通信量,亦可让请求更快结束。因为多数请求都是以管线化的形式发送。


使用Cookie的状态管理

上面说了HTTP是不保存状态的协议。emmmm....既然如此那是不是我登录某个网站浏览,关闭这个网站后我再次登录该网站时就得重新登录,乃至以后每次都是这样........莫慌,Cookie小姐姐来解决你的烦恼。

Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。从此,你就告别每次进入网站都要重新登录的烦恼。

举例:比如你登录某个网站后,浏览器会弹出一个对话框提示你是否保存登录信息,即你的用户名和密码。你选择保存,那状态就被保存了,反之则不保存。


HTTP报文

用于协议交互的信息被称为报文。请求端(客户端)为请求报文,响应端(服务器)为响应报文。其大致可分为两大块:报文首部、报文主体。

报文首部。服务器端或客户端需处理的请求或响应的内容及属性。如下图:

(各种首部字段)

报文主体。应被发送的数据。其实就是一个html页面。一图胜千言:

(报文主体)

二、HTTP状态码

状态码是干嘛的?答:返回结果。

构成元素?由3位数字和原因短语构成。

状态码的类别

1XX——Informational(信息性状态码)接收的请求正在处理。

2XX——Success(成功状态码)请求正常处理完毕。

(1)200 OK —— 表示从客户端发来的请求在服务器端被正常处理了。

(2)204 No Content —— 表示服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。(请求处理成功,但没有资源可返回)

(3)206 Partial Content —— 表示客户端进行了范围请求,服务器成功执行了这部分的GET请求。(客户端对某一部分资源的请求)

3XX——Redirection 重定向

(1)301 Moved Permanently —— 永久性重定向。表示请求的资源已被分配了新的URI,以后应使用现在所指的URI。

(2)302 Found —— 临时性重定向。表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。

(3)303 See Other —— 表示由于请求对应的资源存在另一个URI,应使用GET方法定向获取请求的资源。

(4)304 Not Modified —— 表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304Not Modified。

(5)307 Temporary Redirect —— 临时重定向。与302Found有着相同含义。

4XX——Client Error 客户端错误

(1)400 Bad Request —— 表示请求报文中存在语法错误。

(2)401 Unauthorized —— 表示发送的请求需要有通过HTTP认证的认证信息。

(3)403 Forbidden —— 表明对请求资源的访问被服务器拒绝了。

(4)404 Not Found —— 表明服务器上无法找到请求的资源。

5XX——Server Error 服务器错误

(1)500 Internal Server Error —— 表示服务器端在执行请求时发生了错误。

(2)503 Service Unavailable —— 表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

三、post / get 区别

post:用来传输实体的主体。

get:用来请求访问已被URI识别的资源。

相同点是都可以传输实体主体。但一般不用GET方法进行传输,而是POST方法,因为POST的主要目的并不是获取响应的主体内容。

个人认为post和get的区别在于,get用来获取数据,post用来更新数据。



本文为学习《图解HTTP》时所做的笔记与总结。

很不错的书,对入门HTTP很有帮助。



版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《HTTP协议请求》的版权归原作者「大饼蓝」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注大饼蓝微信公众号

大饼蓝微信公众号:lanziisbusy

大饼蓝

手机扫描上方二维码即可关注大饼蓝微信公众号

大饼蓝最新文章

精品公众号随机推荐