理解HTTP协议
来源:互联网 发布:flame软件 编辑:程序博客网 时间:2024/05/21 17:44
网络协议
任何两个不同的事物之间进行通信都需要具有一定的规则,将数据按照规定的方式组织起来便成了可用的网络包。
就像人与人交流一样,光有各种词汇(相当于数据)是不够的,需要按照事先规定好的语法(相当于协议)组织起来才能让人听明白。
网络协议就像语言一样多种多样,在不同情形下使用不同的协议(语言)。当然,每个人都可以创建属于自己的协议(语言)。
HTTP协议
总领
HTTP协议是最常见的协议,常用于浏览器和WEB服务器之间通信。
当我们在浏览器上键入某个URL并确认时,浏览器便会按照HTTP协议规定的语法将我们的请求(网络包)发送给WEB服务器,而WEB服务器在收到这个请求后便也会根据HTTP协议规定的语法来解析这个请求,并且再次按照HTTP协议规定的语法将响应(网络包)发送给浏览器,于是浏览器再次根据HTTP协议规定的语法来解析这个响应最终呈现给客户。
HTTP协议的主要特点可概括如下:
1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP协议之请求
HTTP请求由三部分组成,分别是:请求行、消息报头、请求正文
1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:
Method Request-URI HTTP-Version CRLF
//其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;
CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。
请求方法(所有方法全为大写)有多种,各个方法的解释如下:
GET 请求获取Request-URI所标识的资源 (常用)
POST 在Request-URI所标识的资源后附加新的数据 (常用)
HEAD 请求获取由Request-URI所标识的资源的响应消息报头
PUT 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE 请求服务器删除Request-URI所标识的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT 保留将来使用
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
掌握GET和POST即可,其中GET请求没有请求正文,而POST请求则可以有请求正文(POST字面意思就是打包发送的意思),如提交表单内容时使用POST,此时表单内容会被加入到请求正文中。
2、请求报头用来描述请求的一些属性,常用属性有:
Accept:用于指定客户端接受哪些类型的信息,如 image/gif 等
User-Agent:用来描述客户代理的信息(浏览器便是典型的客户代理)
HOST:主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的,eg: 我们在浏览器中输入:http://www.guet.edu.cn/index.html 浏览器发送的请求消息中,就会包含Host请求报头域: Host:www.guet.edu.cn
等等,一般看字面意思就能明白。
3,、请求正文用来存放额外的内容,如提交的表单内容等等。
一个提交表单的请求例子:
POST /reg.jsp HTTP/1.1 (CRLF) //请求行结束,后接消息报头Accept:image/gif,image/x-xbit,... (CRLF) ... HOST:www.guet.edu.cn (CRLF) Connection:Keep-Alive (CRLF) Cache-Control:no-cache (CRLF) (CRLF) //该CRLF表示消息报头已经结束,后可接请求正文user=hello&password=123 //此行及以下为提交的数据(请求正文),提交了一个 user 字段和 password 字段(2个input元素)
HTTP协议之响应
HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文
1、状态行格式如下
HTTP-Version Status-Code Reason-Phrase CRLF//其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态代码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
2、响应报头与请求报头类似,用来描述响应的属性,不再细说
3、响应正文用来存放响应的文件,如与客户请求对应的HTML文件,图片等等
浏览器最终呈现出来的便是HTML文件与图片,视频的组合
一个响应的例子:
HTTP/1.1 200 ok (CRLF) //状态行Location:https://www.hahaha.com/ (CRLF) //报头开始,描述服务器IP(域名)及端口Content-Type:text/html; charset=utf-8 (CRLF) //描述响应正文类型及编码类型..... (CRLF)(CRLF)<h1>hello</h1> //响应正文,此处为text/html类型<p>hello world!</p>
0 0
- http协议:http协议理解
- 深入理解HTTP协议
- 深入理解HTTP协议
- 深入理解HTTP协议
- 深入理解http协议
- 深入理解HTTP协议
- 深入理解HTTP协议
- 深入理解HTTP协议
- HTTP协议理解
- 深入理解HTTP协议
- 深入理解HTTP协议
- 深入理解http协议
- 深入理解HTTP协议
- 深入理解HTTP协议
- 深入理解HTTP协议
- 深入理解HTTP协议
- HTTP协议深入理解
- 深入理解http协议
- POJ 2184 Cow Exhibition(0-1背包,负化正)
- RocketMQ源码分析----Broker处理发送请求
- Fibonacci Again hdu1021
- 字符串的每个单词首字母大写
- 大数据IMF传奇行动绝密课程第89课:SparkStreaming On Kafka之kafka解析和安装实战
- 理解HTTP协议
- 利用sleep函数(Linux平台)结合结构体,编写一个模拟时钟
- C++ 编译的时候缺少mex.h文件
- 关于qemu-system-i386.exe 停止工作 在android studio下
- 神秘的三位数
- 【网络流24题 搭配飞行员】二分图匹配
- 笔记本电脑+一根网线+树莓派(含充电设备) 远程控制树莓派
- eclipse maven add Archetype and Maven repository URL
- 决策树之ID3算法