HTTP请求响应的过程
1.客户端执行请求,从url中解析主机名,有主机名解析IP,解析端口号(默认8080)。
2.客户端与服务器建立TCP连接
3.客户端通过Socket输出流发送Http请求
3.服务器向客户端返回http响应报文,客户端通过输入流解析获得报文内容。
4.关闭TCP连接,更新ui或数据
HTTP的请求方式
7中请求方式:GET,POST,DELETE,PUT,HEAD,TRACE,OPTIONS
1.GET请求
GET请求用于获取服务器中的某个资源,url 一般格式:如 http://my.csdn.net/?ref=toolbar,?后面接参数多个参数使用 & 分割
2.POST请求
post请求向服务器传递数据,通常用来提交html表单,服务器会对其进行处理。
请求参数放在的实体部分
3.PUT 请求
与GET相反,PUT向服务器写入资源,请求参数通常是url,请求服务器创建一个指定的url新的文档,如果url已经存在则替换。参数存放在实体部分。
4.Delete 请求
请求服务器删除指定url的资源,但服务器不一定会执行删除操作。参数放在URL中。
5.HEAD 请求
HEAD 请求与GET类似,但是只返回报文的首部,而不返回实体的主体部分。所以允许客户端在不获取资源情况下,获得资源的信息。HEAD的返回必须要和GET返回的头部内容一致。
6.TRACE 请求
客户端发送请求需要穿过防火墙和代理网关等,trace请求可以最终的目的服务器返回trace响应,客户端可以通过响应报文查看所有中间HTTP请求响应链上,原始报文是否被修改。
该方式主要用于诊断,查看代理和应用程序对请求产生的影响。
7.OPTIONS
OPTIONS请求用于向客户端返回服务器支持的各种功能,比如支持的请求方式等。
#HTTP 报文格式
请求报文格式
不同请求方式的请求报文内容有所差别,但是都包含四部分:请求行,请求头,空行,请求数据
1.请求行:说明了请求方法,url,和协议版本
2.请求头:请求行后面是请求头,请求头包含多个字段和值,用冒号分割。添加一个头部字段就添加一行。头部以空行结束。
3.请求主体(请求数据):空行之后是主体部分。包含了请求的数据,请求行和头部都是结构化文本,主体可以使二进制数据。
GET和DELETE
这两请求参数是在请求行的url中指定,比较简单
POST和PUT
这两请求的参数在报文主体,所以包含,请求行,请求头,和主体部分。
请求头中指定本次请求的属性如请求使用的编码方式,主机等等,boundary值改值是主体部分数据的分隔符。
请求主体,boundary开始(换行),参数的属性(格式,参数名等),空行,参数的值
参数间使用boundary分隔,最后使用boundary结束。
手动构建post报文时,格式很重要否则不能被服务端识别。
响应报文格式
与请求报文类似,包括:状态行,消息报头,空行,响应正文
响应报文和请求报文只是首行有差别。
响应返回的状态码,含义
100-199 请求已接受
200 -299成功
300-399 重定向
400-499 客户端错误
500-599 服务端错误
常见的头部字段
http规定了几种头部字段,应用程序也可以自定义字段
通用首部:可以在请求也可以在响应中使用。
请求首部:描述请求的信息
响应头部:描述响应的信息
实体首部:描述主体的信息
扩展首部:http中没有规范的首部
典型的请求首部字段:
Content-type:请求数据格式
Content-Length:消息长度
User-agent:客户端浏览器类型,可以自行设置
Accept:客户端识别的内容类型类表
Accept-Encoding:客户端识别的编码
Connection:连接有关的选项,如keep-alive
Transfer-encoding:当使用分块发送时,采用编码格式一般是chunked,这种发送报文的方式使用于文件很大需要分块发送,告知接受方需要分块接受,这时一般来说服务器将不会提供Content-Length的头信息。
编码使用若干个Chunk组成,由一个标明长度为0的chunk结束,每个Chunk有两部分组成,第一部分是该Chunk的长度和长度单位(一般不 写),第二部分就是指定长度的内容,每个部分用CRLF隔开。在最后一个长度为0的Chunk中的内容是称为footer的内容