第6章HTTP
2016-04-13 10:14
495 查看
第6章 HTTP
HTTP协议
HTTP指定客户端与服务器如何建立连接,客户端如何从服务器请求数据,服务器如何响应请求,以及最后如何关闭连接。HTTP连接使用TCP/IP来传输数据。对于从客户端到服务器的每一个请求,都有4个步骤:1.默认情况下,客户端在端口80打开与服务器的一个TCP连接,URL中还可以指定其他端口。
2.客户端向服务器发送消息,请求指定路径上的资源。这个请求包括一个首部,可选地(取决于请求的性质)还可以有一个空行,后面是这个请求的数据。
3.服务器向客户端发送响应。响应以响应吗开头,后面是包含元数据的首部、一个空行以及所请求的文档或错误消息。
4.服务器关闭连接
每个请求和响应都哟同样的基本形式:一个首部行,一个包含元数据的HTTP首部、一个空行,然后是一个消息体。一般的客户端请求如下所示:
GET /index.html HTTP/1.1
*第一行称为请求行,包括一个方法、资源的路径以及HTTP的版本。
User-Agent: Mozilla/5.0 (Macintosh: Intel Mac OS X 10.8; rv:20.0)
Gecko/20100101 Firefox/20.0
*User-Agent让服务器知道使用什么浏览器
Host: en.wikipedia.org
*Host域指定服务器的名,允许Web服务器区分来自相同IP地址的不同名的主机
Connection: keep-alive
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip,deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
*Accept告诉服务器客户端可以处理哪些数据类型
像这样的GET请求不包含消息体,所有请求以一个空行结束
MIME类型分为两级:类型(type)和子类型(subtype)。
HTML的内容类型是text/html.
8个顶级类型:
1、text/*表示人可读的文字
2、image/*表示图片
3、model/*表示3D模型,如VRML文件
4、audio/*表示声音
5、video/*表示移动的图片,可能包括声音
6、application/* 表示二进制数据
7、message/*表示协议特定的信封,如email消息和HTTP响应
8、multipart/*表示多个文档和资源的容器
服务器看到空行,就开始通过同一个连接向客户端发送它的响应。这个响应以一个状态行开始,后面是一个首部,这个首部采用请求首部同样的“名:值”语法描述响应,然后是一个空行,最后是所请求的资源。
例子:
HTTP/1.1 200 OK
*协议 状态码
Date: Sun, 21 Apr 2013 15:12:46 GMT
*请求的日期
Server: Apache
*服务器软件
Connection: close
*服务器结束发送时关闭连接
Content-Type: text/html; charset=ISO-8859-1
*MIME媒体类型
Content-length: 115
*传输文档的长度,不考虑这个首部
<html>
<head>
<title>
A Sample HTML file
</title>
</head>
<body>
The rest of the document goes here
</body>
</html>
HTTP状态码
1XX 消息
2XX 请求成功
3XX 重地位及重定向
4XX 客户端错误
5XX 服务器错误
Keep-Alive
HTTP 1.0 会为每个请求打开一个新连接。HTTP 1.1和以后版本中,服务器不必在发送响应后就关闭连接。
客户可以在HTTP请求首部中包括一个Connection字段,指定值为Keep-Alive,指示它希望重用一个socket:
Connection:Keep-Alive
HTTP方法
1、GET*GET方法可以获取一个资源的表示,没有副作用
2、POST
它也将资源的一个表示上传到已知URL的服务器,但是没有指定服务器如何处理这个新提供的资源。POST要用于不能重复的不安全的操作,如完成一个交易。
3、PUT
*将资源的一个表示上传到已知URL的服务器。有副作用,不过它有幂等性。可以重复这个方法而不用担心它是否失败
4、DELETE
*从一个指定URL删除一个资源。有副作用,但它也是幂等的。将同一个资源删除两次不是错误。
请求主体
例如,下面这个POST请求向服务器发送表单数据:POST /cgi-bin/register.pl HTTP 1.0
Date: Sun, 27 Apr 2013 12:32:36
Host: www.cafeaulait.org
Content-type: application/x-www-form-urlencoded
Content-length: 54
username=Elliotte+Harold&email=elharo%40ibiblio.org
Cookie
很多网站使用一些小文本串在连接之间存储持久的客户端状态,这些小文本串称为cookie.cookie在请求和响应的HTTP首部,从服务器传递到客户端,再从客户端传回服务器。cookies只能是非空白符的ASCII文本,不能包含逗号或分号。
要在浏览器中设置一个cookie,服务器会在HTTP首部中包含一个Set-Cookie首部行。例如,下面的HTTP首部将cookie "cart"的值设置为“ATVPDKIKX0DER”:
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: cart=ATVPDKIKX0DER
除了简单的name=value时,cookie可以有多个属性来控制它们的作用域,包括过期日期、路径、域、端口、版本和安全选项。
默认情况下,cookie来自哪个服务器就应用于哪个服务器。
Cookie的作用域还受路径限制,默认作用域是最初的URL和所有子目录。可以使用cookie中的Path属性改变默认作用域。
cookie可以同时包括域和路径。
通过将expires属性设置为“Wdy,DD-Mon-YYYY HH:MM:SS GMT”形式的一个日期,可以设置cookie在某个时间点过期。
Max-Age属性可以设置cookie经过一定秒数之后过期。
CookieManager
在Java存储和返回cookie之前,需要先启动cookie:CookieManager manager = new CookieManager();
CookieHandler.setDefault(manager);
CookieStore
可以用getCookieStore()方法获取这个cookie库,CookieManager就在这里保存它的cookie:
CookieStore store = manager.getCookieStore();
CookieStore类允许你增加、删除和列出cookie,使你能控制在正常HTTP请求和响应流之外发送的cookie
相关文章推荐
- 网络策略中使用的 VLAN 属性
- 网络:hmac 与服务器时间
- Nginx配置SSL证书部署HTTPS网站
- MFC之HTTP客户端应用程序
- [android] HttpURLConnection的初步学习
- 使用java开源工具httpClient及jsoup抓取解析网页数据
- Google数据中心网络技术漫谈
- HTTP 缓存策略
- 网络备忘之参考资料
- Android Volley完全解析(二),使用Volley加载网络图片[转]
- 4种安卓自带的HTTP通讯方式(只是例子,网络通讯就随便写在主线)
- 从tcp原理角度理解Broken pipe和Connection reset by peer的区别
- linux下关于网络配置(永久性的)
- SSL证书常见错误和解决办法
- nginx搭建https服务器
- 网络:md5加密框架的使用
- HTTP 头部解释
- TCP/IP(十)TCP三次握手 与四次挥手
- TCP/IP(九)TCP协议概述
- http响应头里没有或者有content-length的几种可能性