解析HTTP协议
基本的Web应用程序的组成部分:
- web服务器:接收客户端请求,然后向客户端返回一些结果
- web客户端浏览器:允许用户请求服务器上的某个资源,并且向用户显示请求的结果
- HTTP协议:web客户端和服务器之间通信所用的协议
- 静态HTML文件:用于告诉浏览器怎样想用户显示内容
HTTP协议是一种超文本传输协议(HyperText Transfer Protocol),是一套计算机在网络中通信的规则。
浏览Web时,浏览器通过HTTP协议与WEB服务器交换信息,Web服务器向web浏览器返回的文件都有与之相关的类型,这些信息类型的格式有MIME(Multipurpose Internet Mail Extensions)定义
MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开
发送请求信息
一旦建立了TCP连接,Web浏览器就会想Web服务器发送请求命令。HTTP协议将来自客户端的请求信息封装成HTTP请求,它包括请求行、请求头、消息体、以及分隔请求头和消息体的一个空行
1) 请求行
请求行是一个ACALL文本行,由三个标记组成:请求的HTTP方法、请求的URL、HTTP版本,中间用空格分开。例如:GET /lovobook/index.html HTTP/1.0
在HTTP版本1.1中定义了有八种可能的HTTP请求方法
- GET:用于向服务器检索资源
- POST:用于向服务器发送数据,并要求指定的URI处理
- HEAD:与GET方法相同,服务器值返回状态行和头标,并不返回请求文档
- PUT:请求服务器保存请求数据作为指定URI新内容
- DELETE:请求服务器删除URI中命名的资源
- OPTIONS:请求关于服务器支持的请求方法信息
- TRACE:请求Web服务器反馈HTTP请求和其头标
- CONNECT:已文档化当当前未实现的一个方法,预留做隧道处理
在这些方法中我们最常用的是GET和POST方法,其它几种方法对于Web开发者来说不是很有用。GET方法用于向服务器检索信息,它可以以查询字符串的形式提供有限长度的数据。但是,GET方法却不能发送大量的信息。很多WEB服务器会限制完整URL的长度为255个字符,超过这个长度的信息通常被忽略了。因此,GET方法适合发送我们不介意在URL中可见的少量信息。此外,GET方法只能用在一个Web应用程序中执行查询,而不能用于执行更新。
以下方式的HTTP请求为GET方法
- 在浏览器地址栏输入URL
- 在当前网页点击HTML链接
- 在HTML表单中设置表单的method=’get’,并提交表单:
- 在HTML表单中没有设置表单的method属性,提交表单(不设置method属性,默认为get方法)
POST方法用于向服务器发送数据,并要求制定的URI处理。与GET方法类似,POST方法也可以有查询字符串,但是POST方法用完全不同的机制传递信息。POST方法可以将无限制数量的数据作为HTTP请求的一部分,通过套接字连接发送。数据不会作为URL的一部分出现,而且只发送一次。因此,POST方法通常被用于发送敏感信息或者上传文件。如果一个应用程序需要修改数据或添加数据,并且通过HTTP发送请求,那么就应该使用POS法
2)请求头
HTTP协议使用HTTP头来传递请求的元信息。HTTP头是一个用冒号分隔的名称/值对,冒号前面是HTTP头的名称,后面是HTTP头的值。常见的请求头有用户代理资料、可以接受的格式、语言以及内容编码,这些信息用于告诉服务器客户端是什么,客户端想要得到什么格式的回馈信息等
3)空行
发送回车符合退行,通知服务器不在有请求头
4)消息体
HTTP请求中带有查询字符串时,如果是GET方法,查询字符串或表单数据附在请求行中,那么消息体中就没有内容;如果是POST方法,查询字符串或表单数据就添加在消息体中
回应响应消息
Web服务器解析请求,定位并读取指定的资源,将文件以及其他信息组成HTTP响应返回到客户端。HTTP响应包括:状态行、响应头、消息体以及分隔消息头个响应头的一个空行。
1) 状态行
每个HTTP响应以一个状态行开头。状态行由HTTP协议版本,响应状态码和响应描述组成,三者之间用空格隔开
响应状态码是一个三位的数字,它分为如下几个组:
- 1xx:信息,请求收到,继续处理。
- 2xx:成功,行为被成功地接受、理解和采纳。
- 3xx:重定向,为了完成请求,必须进一步执行的动作
- 4xx:客户端错误,请求包含的语法错误或者请求无法实现
- 5xx:服务器错误,服务器不能实现一种明显无效的请求
每一个响应状态码都有相关联的字符串响应描述。我们经常看到的响应状态码是200,它 表明成功执行,我们得到了一个有效的响应。
2)响应头
响应头与请求头一样,也是一个用冒号分开的名称/值对,冒号前面是HTTP头的名称,后面是HTTP头的值。典型的响应头包括内容类型描述,内容长度,时间邮戳,服务器信息,内容最后一次响应时间。这些新兴县帮助客户端得到发送过来的的内容是什么,内容的大小、数据是否比前一次响应更新。
在响应头中,最重要的HTTP头是Content-type,它指定MIME类型。MIME类型告诉浏览器要接收的数据是什么类型,这样浏览器才知道如何显示这些数据。这个值通常与HTTP请求头中的Accpt相关
3)空白行
最后一个响应头之后是一个空行,发送回车符合退行,表明以下不再有响应头
4)消息体
要发送会客户端的HTML文档或其他要显示的内容等。Web服务器把要发送给客户端的文档信息放在消息体中