WEB开发之HTTP简述
HTTP—–超文本传输协议(HTTP,HyperText Transfer Protocol)
1. 长连接和短连接
在HTTP/1.0中,默认使用的是短连接。浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。
-
从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:
Connection:keep-alive
在使用长连接时,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
-
短连接的操作步骤是:
建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接
- 长连接的操作步骤是:
建立连接——数据传输…(保持连接)…数据传输——关闭连接
2. 一个Http请求流程
- DNS域名解析 –> 发起TCP的三次握手 –> 建立TCP连接后发起http请求 –> 服务器响应http请求,浏览器得到html代码 –> 浏览器解析html代码,并请求html代码中的资源(如javascript、css、图片等) –> 浏览器对页面进行渲染呈现给用户
3. http 常见的状态码有哪些?
- 200 OK //客户端请求成功
- 301 Moved Permanently(永久移除),请求的 URL 已移走。Response 中应该包含一个 Location URL, 说明资源现在所处的位置
- 302 found 重定向
- 400 Bad Request //客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized //请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用
- 403 Forbidden //服务器收到请求,但是拒绝提供服务
- 404 Not Found //请求资源不存在,eg:输入了错误的 URL
- 500 Internal Server Error //服务器发生不可预期的错误
- 503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
4.GET 和 POST 的区别?
GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
- 根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。
- 幂等的意味着对同一URL的多个请求应该返回同样的结果。
- 在实际应用中,并没有这么严格。比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。从根本上说,如果目标是当用户打开一个链接时,他可以确信从自身的角度来看没有改变资源即可。
根据HTTP规范,POST表示可能改变服务器上的资源的请求。
继续引用上面例子:新闻以网站为例,读者对新闻发表自己的评论应通过POST实现,因在评论提交后站点的资源已经不同了,或者说资源被修改了。
* 大概说了下HTTP规范中GET和POST的一些原理性的问题。但实际做时,大多没有按照HTTP规范去做,导致这个问题的原因有很多,比如:
1. 方便,更新资源时用了GET,因用POST要用到FORM(表单),麻烦一点。
2. 对资源的增,删,改,查操作,其实都可通过GET/POST完成,不需PUT和DELETE。
3. 早期的Web MVC框架设计者们并没有意识地将URL当作抽象的资源来看待和设计,所以一个较严重的问题是传统Web MVC框架基本上只支持GET和POST两种HTTP方法,不支持PUT和DELETE方法。
从表面现像上面看 GET 和 POST 的区别:
- GET 请求的数据会附在 URL 之后(就是把数据放置在 HTTP 协议头中),以?分割 URL 和传输数据,参数之间以&相连,
如:login.action?name=zhagnsan&password=123456。POST 把提交的数据则放置在是 HTTP 包的包体中。
- GET 方式提交的数据最多只是1024 字节,理论上 POST 没限制,可传较大量数据。
其实这样说是错误的,不准确的:- “GET 方式提交的数据最多只能是 1024 字节”,因为 GET 是通过 URL 提交数据,那么 GET 可提交的数据量就跟URL 的长度有直接关系了。
- 而实际上,URL 不存在参数上限的问题,HTTP 协议规范没有对 URL 长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox 等,理论上没有长度限制,其限制取决于操作系统的支持。
-
POST 的安全性要比 GET 的安全性高。
这里的安全性和上面 GET 提到的“安全”不是同个概念。
上面“安全”的含义仅是不作数据修改,这里安全的含义是真正的Security.
比如:通过 GET 提交数据,用户名和密码将明文出现在 URL 上,因(1)登录页面可能被浏览器缓存(2)其他人查看浏览器的历史纪录,那么别人可拿到你的账号和密码
除此之外,使用 GET 提交数据还可能会造成 Cross-site request forgery 攻击。 Get 是向服务器发索取数据的一种请求,而 Post 是向服务器提交数据的一种请求,在 FORM(表单)中,Method默认为”GET”.实质上,GET 和 POST 只是发送机制不同,并不是一个取一个发!
5. http中重定向和转发
- 本质区别:转发是服务器行为,重定向是客户端行为。
重定向特点:两次请求,浏览器地址发生变化,可以访问自己 web 之外的资源,传输的数据会丢失。
请求转发特点:一次强求,浏览器地址不变,访问的是自己本身的 web 资源,传输的数据不会丢失。
推荐阅读
-
java web开发之购物车功能实现示例代码
-
web开发(2) 传说的盒模型之padding_html/css_WEB-ITnose
-
java web开发之servlet图形验证码功能的实现
-
Android开发之HTTP访问网络
-
CSS3实战开发: 弹性盒模型之响应式WEB界面设计 博客分类: div+csscss3 csscss3响应式布局盒模型弹性布局
-
WEB开发之HTTP简述
-
eclipse 之 scrapbook 博客分类: JAVA开发工具web开发学习笔记 eclipsescrapbook
-
eclipse 之 scrapbook 博客分类: JAVA开发工具web开发学习笔记 eclipsescrapbook
-
JavaWeb开发之Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架
-
JavaWeb开发之Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架