HTTP学习笔记(1)
无论是请求消息还是响应消息都由4个部分组成:首行、首部字段行区、空行、消息主题。
请求消息
一般由一个请求行
、0到多个首部字段行
、一个空行
、消息主体
构成
GET /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: example.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
请求行
包含:请求方法
、资源标识符
、HTTP版本
请求方法
常用请求方法包括:GET、POST、HEAD、PUT、DELETE、CONNECT、OPTIONS、TRACE
GET
: 表示我要请求一个指定名称的资源。
PUT
: 表示如果指定URL不存在就创建它,否则就修改它。资源数据由消息主体提供。
POST
: 表示要创建一个新的子资源,或者更新一个存在的资源。资源数据由消息主体提供。
DELETE
: 表示我要删除一个指定名称的资源。
OPTIONS
: 允许客户端查看服务器的性能。
HEAD
: 只请求页面的首部。
TRACE
: 请求服务器在响应中的实体主体部分返回所得到的内容。
PUT和POST区别:
PUT是幂等性
的,而POST不具备幂等性;体现在如果你重复一次提交POST创建子资源的请求,会导致创建两个子资源,而PUT在第二次重复提交时,只是更新子资源而已。
首部字段
可以用来传递客户端的更多信息,以及传递解析消息主题的必要信息。
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: example.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
左边称为头字段名
,右边称为头字段值
空行(CRLF)
指示头字段区已完成,消息主体开始(如果有消息主体的话)
消息主体
比如POST提交表单时,表单数据会打包在消息主体内。
无论是请求消息还是响应消息,都有一个可选的消息主体(message-body)。如果客户端在提交表单,那么请求消息主体内就可以放置表单的数据;如果客户端请求下载一个gif,那么响应消息主体内就可以放置gif文件的二进制字节集合。所以,消息主体内可以放置任何内容。它的定义也是如此:
message-body = *OCTET
OCTET
就是字节。而 *OCTET
则标示为多个字节。 仅仅看*OCTET
是无法知道其中到底是什么内容。这就需要在消息头字段内用一组头字段来标示它。比如Content-Type
就会指示内容的类型。下图列出可作为消息主体限定的首部字段清单。
entity-header = Content-Encoding
| Content-Language
| Content-Length
| Content-Location
| Content-MD5
| Content-Range
| Content-Type
| Allow
| Expires
| Last-Modified
| extension-header
extension-header = message-header#response(OK)
Content-Type
实体中所承载对象的类型。Content-Length
所传送实体主体的长度或大小。Content-Language
与所传送对象最相配的人类语言。Content-Encoding
对象数据所做的压缩格式。Content-Location
一个备用位置,请求时可通过它获得对象。Content-Range
说明它是整体的哪个部分。Content-MD5
实体主体内容的校验和。Last-Modified
所传输内容在服务器上创建或最后修改的日期时间。Expires
实体数据将要失效的日期时间。Allow
该资源所允许的各种请求方法,例如,GET 和 HEAD。ETag
这份文档的唯一验证码。
响应信息
由一个状态行
、一个或者多个首部字段行
、一个空行
、消息主体
构成
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed<html><body><h1>Hello, World!</h1></body>
</html>
状态行
由http版本
、状态码
、状态描述文字
构成。
状态码
状态码共5组,分别是 100-199,200-299,300-399,400-499,500-599的范围。
200-299
成功。 指明客户端请求是正确的,并被成功执行。300-399
重定向。指明客户端请求是正确的,不过当前请求资源的位置在别处,请再次定向你的资源位置,发起新的请求。400-499
客户端错误。 指明客户端的请求是不正确的,可能是格式无法识别,或者URL太长等等。500-599
服务器端错误。 指明客户端的请求正确,但是服务器因为自身原因无法完成请求。100-199
信息提示。 这个系列的状态码只有2个,但是比较费解,会专门单独的做出解释。
详细:
① 客户方错误
100
继续
101
交换协议
② 成功
200
OK
201
已创建
202
接收
203
非认证信息
204
无内容
205
重置内容
206
部分内容
③ 重定向
300
多路选择
301
永久转移
302
暂时转移
303
参见其它
304
未修改(Not Modified)
305
使用代理
④ 客户方错误
400
错误请求(Bad Request)
401
未认证
402
需要付费
403
禁止(Forbidden)
404
未找到(Not Found)
405
方法不允许
406
不接受
407
需要代理认证
408
请求超时
409
冲突
410
失败
411
需要长度
412
条件失败
413
请求实体太大
414
请求URI太长
415
不支持媒体类型
⑤ 服务器错误
500
服务器内部错误
501
未实现(Not Implemented)
502
网关失败
504
网关超时
505
HTTP版本不支持
首部字段
和请求消息类似,包括服务器本身的一些信息指示、以及响应消息本身的元数据
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed
一个空行(CRLF)
指示头字段完成
可选的消息主体
案例中就是一个hello.html文件的内容
HTTP学习笔记(1)相关推荐
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 2020年Yann Lecun深度学习笔记(下)
2020年Yann Lecun深度学习笔记(下)
- 2020年Yann Lecun深度学习笔记(上)
2020年Yann Lecun深度学习笔记(上)
- 知识图谱学习笔记(1)
知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...
- 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记
计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...
- Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)
Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...
- MongoDB学习笔记(入门)
MongoDB学习笔记(入门) 一.文档的注意事项: 1. 键值对是有序的,如:{ "name" : "stephen", "genda" ...
- NuGet学习笔记(3) 搭建属于自己的NuGet服务器
文章导读 创建NuGetServer Web站点 发布站点到IIS 添加本地站点到包包数据源 在上一篇NuGet学习笔记(2) 使用图形化界面打包自己的类库 中讲解了如何打包自己的类库,接下来进行最重 ...
最新文章
- ROSE 好的参考资料 http://topic.csdn.net/t/20020716/14/878323.html
- 总结ThinkPHP使用技巧经验分享(四)
- Stored Procedure 里的 WITH RECOMPILE 到底是干麻的?
- Boost:reference wrapper参考包装的测试程序
- aspx隐藏前台控件div_javascript总结--div
- jeecg_framework_v2.1.0(20130123).rar 版本发布
- 无法生成会话打印机,点打印提示没有选择的打印机
- 54 岁的当当李国庆“杀入”区块链!
- FFmpeg源代码简单分析:makefile
- php ssl扩展,php如何安装openssl扩展?
- Java常用设计模式(面试常考)
- 【前端知识梳理】HTML篇 笔记整理(一)
- emmagee 性能工具梳理
- 面向对象:结构化开发方法和面向对象开发方法
- CAD2006 ----VBA(Hello World)
- Odoo集成Plausible埋码监控平台
- WINDOWS 7全系列验证码
- 学生信息管理系统之查:查询成绩信息流程
- pandas dataframe drop函数
- 常用传感器讲解十--光传感器根据亮度安排灯光
热门文章
- excel函数FREQUENCY、COUNTIFS、COUNTIF
- findHomography(src_points, dst_points, CV_RANSAC)
- Linux下防火墙iptables用法规则详及其防火墙配置
- 使用DBNEWID Utility 修改oracle数据库的 db name 和 dbid
- TensorFlow MNIST最佳实践
- Matlab scatter 如何显示不同颜色点状
- .net get set用法
- codeforces 650D. Zip-line 线段树
- QT5利用chromium内核与HTML页面交互
- 棋盘型动态规划 之 CODE[VS] 1169 传纸条 2008年NOIP全国联赛提高组