HTTP 协议 学习笔记一
2016-07-23 11:33
429 查看
一、什么是HTTP 协议?
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。是工作在tcp/ip协议基础上的,所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过httpwatch插件来抓取http请求内容。
http1.0 短连接 http1.1 长连接.
http是TCP/IP协议的一个应用层协议,http也是我们web开发的基础.
看一个test.html页面
<html> <head> </head> <body> <h1>abc</h1> <img src="/resource/images/baby.png"/> <img src="/resource/images/cat.png"/> </body> </html>
该页面会向浏览器发出几次http请求?
答案是:3次(第一次获取html页面,第2、3分别是获取对应的图片)
具体信息如下:
演示demo下载:http://download.csdn.net/detail/xunzaosiyecao/9584009
二、HTTP请求
客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括如下内容: 一个请求行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。如下所示 :1、HTTP请求的细节——请求行
请求行中的GET称之为请求方式,请求方式有:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
常用的有:POST、GET
POST、GET有以下区别.
POST、GET在http请求中出现位置不一样
GET提交:请求的数据会跟在URL之后例如:login.php?name=abc&password=kkk
POST提交:把提交的数据放置在是HTTP包的包体中。比如:
POST /test/reg.php HTTP/1.1
Host:
Content-Type:
Content-Length:
name=abc&password=xyz
因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变。
传输数据的大小
首先声明:
HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。
而在实际开发中存在的限制主要有:
GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。
因此对于GET提交时,传输数据就会受到URL长度的限制。
POST:由于不是通过URL传值,理论上数据不受限。
安全性
相对而言post提交,安全高.
Get提交 更利于添加到我的收藏夹
2、HTTP请求的细节——消息头
用于HTTP请求中的常用头Accept: text/html,image/* [告诉服务器,我可以接受 文本,网页,图片] Accept-Charset: ISO-8859-1 [接受字符编码 iso-8859-1] Accept-Encoding: gzip,compress [可以接受 gzip,compress压缩后数据.] Accept-Language: en-us,zh-cn [浏览器支持中,英文] Host: www.sohu.com:80 [我要找主机是 www.sohu.com:80] If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT [ 告诉服务器,我的缓冲中有这个资源文件,该文件的时间是 。。。] Referer: http://www.sohu.com/index.jsp [告诉服务器,我来自哪里,该消息头,常用于防止盗链] User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)[告诉服务器,浏览器内核] Cookie [cookie??] Connection: close/Keep-Alive [保持连接,发完数据后,我不关闭连接] Date: Tue, 11 Jul 2000 18:23:51 GMT [浏览器发送该http请求的时间]
获取Referer:
//获取用户浏览器Referer String referer=request.getHeader("Referer");
当服务器需要知道请求是来自哪个ip等信息,就可通过程序获得相应的信息。
3、HTTP响应
一个HTTP响应代表服务器向客户端回送的数据,它包括:一个状态行、若干消息头、以及实体内容 ,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。
4、HTTP响应的细节——状态行
基本结构:格式: HTTP版本号 状态码 原因叙述
举例:HTTP/1.1 200 OK
状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:
状态码 | 含义 |
---|---|
100~199 | 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程 |
200~299 | 表示成功接收请求并已完成整个处理过程,常用200 |
300~399 | 为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址,常用302、304 |
400~499 | 客户端的请求有错误,常用404 |
500~599 | 服务器端出现错误,常用 500 |
5、HTTP响应细节——常用响应头
Location: http://www.baidu.org/index.jsp 【让浏览器重新定位到url】 Server:apache tomcat 【告诉浏览器我是tomcat】 Content-Encoding: gzip 【告诉浏览器我使用 gzip】 Content-Length: 80 【告诉浏览器会送的数据大小80节】 Content-Language: zh-cn 【支持中文】 Content-Type: text/html; charset=GB2312 [内容格式text/html; 编码gab2312] Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT 【告诉浏览器,该资源上次更新时间】 Refresh: 1;url=http://www.baidu.com 【过多久去,刷新到 http://www.baidu.com】 Content-Disposition: attachment; filename=aaa.zip 【告诉浏览器,有文件下载】 Transfer-Encoding: chunked [传输的编码] Set-Cookie:SS=Q0=5Lb_nQ; path=/search[后面详讲] Expires: -1[告诉浏览器如何缓存页面IE] Cache-Control: no-cache [告诉浏览器如何缓存页面火狐] Pragma: no-cache [告诉浏览器如何缓存页面] Connection: close/Keep-Alive [保持连接 1.1是Keep-Alive] Date: Tue, 11 Jul 2000 18:23:51 GMT
Expires: -1
Cache-Control: no-cache
Pragma: no-cache
是用来防止浏览器进行缓存的。
相关文章推荐
- 【Web开发原理】HTTP协议详解
- Android之使用HttpURLConnection进行网络编程
- tcpdump netstat traceroute详解
- 解决VM克隆虚拟机网络IP配置问题及时区改为中国时区
- 无线网络安全一瞥
- 高性能网络服务器编程:为什么linux下epoll是最好,Netty要比NIO.2好?
- TCP/IP三次握手,四次挥手
- 是网络直播延时(1):起播延时及优化
- android 判断网络状态情况
- HDU 3549 网络流初步
- ISCC2016宣传海报
- 关于android-async-http
- 贝叶斯网络
- 网络编程问题集锦
- Python案例-网络编程-进程池
- 网络协议
- 计算机网络基础知识点学习(一)(概述)
- Java网络编程 服务器Socket
- Python案例-网络编程-异步解耦
- centos 没有可用的网络设备