HTTP 协议整理(转)
HTTP 协议
作为web开发人员,了解一些http协议的知识很有必要。本文简单介绍了HTTP协议的知识,若有错误的地方,望大家斧正。
1.HTTP协议是什么?
- http协议是一个应用层的协议。规定了浏览器和服务器之间的通信规范。通常用TCP连接方式。
2.HTTP 1.0、1.1 连接的方式。
- 在HTTP 1.0 中,浏览器和服务器使用的是短连接,响应完,立即断开。
- 请求的过程:3次握手,请求,响应,断开连接。
- http不保存连接,好处:服务器可以处理更多的连接,但是每次建立连接会降低处理速度。
- 现在主流的版本是HTTP 1.1 ,在HTTP 1.1 中我们使用长连接,一个请求结束后,不断开,继续请求。
3.HTTP协议的URL
URL的格式:
http://host[":"port][abs_path]
- host: 代表主机域名或IP地址
- port: 端口号,缺省端口80
- abs_path : 请求资源的URL,如果没有,填 "/",通常浏览器会帮我们自动完成。
EG:
1、输入:www.cnblogs.com
浏览器自动转换成:http:// www.cnblogs.com/
- abs_path : 请求资源的URL,如果没有,填 "/",通常浏览器会帮我们自动完成。
2、http:192.168.0.116:8080/index.jsp
4. HTTP请求
4.1 请求报文格式:

- HTTP的请求由3部分组成:请求行、请求头、请求体。
- SP代表空格、CRLF代表换行
- 浏览器必须已这个格式发送请求,服务器才能正常解析和响应。
4.2 请求报文示例

4.3 请求方法
- GET 请求获取Request-URI所标识的资源
- POST 在Request-URI所标识的资源后附加新的数据,常用于提交表单。
- HEAD 请求获取由Request-URI所标识的资源的响应消息报头
- PUT 请求服务器存储一个资源,并用Request-URI作为其标识
- DELETE 请求服务器删除Request-URI所标识的资源
- TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
- CONNECT 保留将来使用
- OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
get和post是最常用的方法,简单来说,前者用于获取数据,后者用于提交数据。
5. HTTP响应
5.1 响应报文格式:

- HTTP的响应也是由3个部分组成:响应行、响应头,响应体
- 响应行:status code 表示响应的状态码,description是描述信息。
- 同样 SP代表空格、CRLF代表换行,
- 响应必须以这种规范格式发送给浏览器,浏览器才能正常解析并显示。
5.2 响应报文示例

5.3响应码
200段是成功;300段需要对请求做进一步的处理;400段表示客户端请求错误;500段是服务器的错误
常见响应码:
- "200" : OK
- "302" : Found 重定向.
- "400" : Bad Request 错误请求,发出错误的不符合Http协议的请求
- "403" : Forbidden 禁止
- "404" : Not Found 未找到。演示访问一个不存在的页面看报文
- "500" : Internal Server Error 服务器内部错误。演示页面抛出异常。
- "503" : Service Unavailable。一般是访问人数过多。
PS:会在文章的末尾为大家提供一份HTTP状态码大全的文档。
6. HTTP消息报头
HTTP消息报头分4类:普通报头、请求报头、响应报头、实体报头
每一个报头域都是由名字+“:”+空格+值 组成,消息报头域的名字是大小写无关的。
6.1 普通报头
应用于所有请求和响应消息且和请求体与响应体无关的信息就存放在普通报头中。
- Cache-Control: no-cache (用于指示请求或响应消息不能缓存)
- Date 普通报头域表示消息产生的日期和时间
- Connection: close/keep-alive (是否开启长连接)
6.2 请求报头
客户端向服务器端传递请求的附加信息以及客户端自身的信息存放在请求报头
常用的请求报头:
- Accept: text/html,application/xhtml+xml,application/xml; 指定客户端接受哪些类型的信息。
- Accept-Charset: iso-8859-1,gb2312 客户端接受的字符集 (缺省是任何字符集都可以接受。)
- Accept-Encoding: gzip,deflate,sdch 可接受的内容编码。 (缺省是各种内容编码都可以接受。)
- Accept-Language: zh-CN,zh 指定语言。(缺省各种语言都可以接受。)
- Authorization 用于证明客户端有权查看某个资源
- Host: www.cnblogs.com 被请求资源的Internet主机和端口号 (缺省端口号:80) 这个报头是必需的
- User-Agent: Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) 操作系统、浏览器和其它属性
6.2 响应报头
响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。
常用的响应报头:
- Location 响应报头域用于重定向接受者到一个新的位置
- Server:Apache-Coyote/1.1 服务器信息
6.3 实体报头
请求和响应消息都可以传送一个实体。
常用的实体报头:
- Content-Encoding: text/html; charset=utf-8 压缩算法
- Content-Language: zh-CN 语言
- Content-Length: 10 实体正文的长度
- Content-Type: text/html;charset=GB2312 返回数据的类型
- Last-Modified 实体报头域用于指示资源的最后修改日期和时间。
- Expires:Thu,15 Sep 2006 16:23:12 GMT 响应过期的日期和时间。
参考文献
HTTP协议详解(真的很经典)
http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html
HTTP 状态码大全下载
http://pan.baidu.com/s/1kTGaXAv
Content-Type下载
http://pan.baidu.com/s/1qWjwHkw
编程并没有捷径,真正的成长都是来源于实践、思考和总结。
搬运自:http://www.cnblogs.com/simple-blog/p/4377647.html
HTTP 协议整理(转)的更多相关文章
- MODBUS协议整理——功能码简述
1.Modbus简介——来自维基百科 Modbus是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的.Modbus是工业领域通信协议的业界标准,并且现在是工业电 ...
- 欧姆龙PLC HostLink协议整理
欧姆龙PLC HostLink协议整理 1.常用的存储器功能区 CIO: 输入继电器 272 点(17 CH) 0.00-16.15 输出继电器 272 点(17 CH) 100.00-116.1 ...
- AHB协议整理 AMBA
本文对AHB协议作了简单整理,整理自两篇文章: AHB总线协议 AHB重点难点总结 1. 简介 AHB总线规范是AMBA总线规范的一部分,AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计 ...
- SIP协议整理
本文记录开发.实现IMS项目时,整理的SIP协议基础知识:若有侵权,请告之. SIP协议 1. SIP协议简介 SIP是一个应用层的控制协议,可以用来建立.修改.和终止多媒体会话(或者会议) ...
- HTTP协议整理
一.概念 1.HTTP协议:即超文本传输协议(Hypertext transfer protocol).是一种详细规定了浏览器和Web服务器之间互相通信的规则,它允许将超文本标记语言(HTML)文档从 ...
- 学习笔记之TCP/IP协议分层与OSI參考模型
1.协议的分层 ISO在制定标准化OSI之前,对网络体系结构相关的问题进行了充分的讨论, 终于提出了作为通信协议设计指标的OSI參考模型.这一模型将通信协议中必要 的功能分成了7层.通过这些 ...
- 痞子衡嵌入式:开源软件协议(MIT/BSD/Apache/LGPL/MPL/GPL)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是关于开源软件协议基本知识. 牛顿曾说过:"如果我比别人看得更远,那是因为我站在巨人的肩上".在软件开发中如果说也存在巨 ...
- 直播推流实现RTMP协议的一些注意事项
—— 2017-2-12 更新RTMP 协议整理了一下,包括rtmp 消息类型,rtmp 如何分块,rtmp分块例子. 用脑图整理了一下,使用Xmind 打开,URL: https://github. ...
- PHP安全之Web攻击
一.SQL注入攻击(SQL Injection) 攻击者把SQL命令插入到Web表单的输入域或页面请求的字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影响)动态 ...
随机推荐
- [译]AngularJS sercies - 获取后端数据
原文:ANGULARJS SERVICES – FETCHING SERVER DATA $http是AngularJS内置的服务,能帮助我们完成从服务端获数据.简单的用法就是在你需要数据的时候,发起 ...
- GitFlow
git工作流 始终保持有master分支(只要有目录,git就自动创建)和develop分支(手动创建) 一.主分支Master二.开发分支Develop三.临时性分支(最后发布要删除的)* 功能(f ...
- 调用Child Package
使用Execute Package Task,能够在一个package中调用并执行其他package,被调用的Package称作 Child Package,Execute Package Task ...
- jQuery 2.0.3 源码分析Sizzle引擎 - 超级匹配
声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 通过Expr.find[ type ]我们找出选择器最右边的最终seed种子合集 通过Sizzle.compile函数编译器 ...
- Ruby之入门(一)
前言 这门语言很少去听过,可能是没怎么用到就不会听到太多关于ruby的消息,工作需要这门语言,需要从0开始学习这门语言,慢慢学习简直...太神奇了...,原谅我见识浅薄.原来很早就已经出世了,园子中也 ...
- android给View设置上下左右边框
给View控件设置边框,可以动态设置上下左右.通过布局文件就能搞定 1.在drawable文件夹下新建一个shape_main_list_bg.xml文件 <layer-list xmlns:a ...
- 关于Android多项目依赖在Eclipse中无法关联源代码的问题解决
被Eclipse中Android依赖项目无法关联源代码的问题困扰了许久,网上搜索了一下,终于得到解决,大大提高了开发效率. 问题描述: 项目有A,B两个Android Project组成, B是And ...
- scikit-learn 支持向量机算法库使用小结
之前通过一个系列对支持向量机(以下简称SVM)算法的原理做了一个总结,本文从实践的角度对scikit-learn SVM算法库的使用做一个小结.scikit-learn SVM算法库封装了libsvm ...
- 如何利用脚本实现MySQL的快速部署以及一机多实例的部署
MySQL有三个版本:二进制,源码包,RPM. 下面讲讲二进制包的安装过程 下载地址: http://dev.mysql.com/downloads/mysql/ 选择Linux-Generic 我这 ...
- Oracle启动报错ORA-27102解决
环境:RHEL5.5 + Oracle 10.2.0.4 此错误一般是因为数据库的初始化参数文件的内存设置不当导致.本例是因为操作系统参数设置问题导致. 当前现象:Oracle启动报错ORA-2710 ...