Http
? 超文本传输协议 (HTTP-Hypertext transfer protocol) 是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。
? 客户端浏览器和tomcat服务器进行访问交互,其采用的协议是http,该协议规定了客户端和服务器之间的交互方式,以及交互内容的格式要求。
交互方式
http协议规定,默认情况下:
先由客户端(浏览器)向服务器(tomcat)发送请求(
request)服务器接收到请求后,根据请求的资源路径,在服务器内部部署的项目中,查找是否有该资源,如果该资源存在,那么服务器就会将该资源返回(静态资源),或者把该资源的运行结果返回(动态资源)如果该资源不存在,那么服务器就会返回一个状态码(404),表示本次访问的资源找不到不管资源存在还是不存在,服务器都会针对这次请求,返回一个结果,这个结果就被称之为响应(response)
客户端(浏览器)接收到本次请求的响应内容后,解析并显示出来此时,本次http协议下的访问结束。用户还可以再次发出请求,那么就重复上述过程。
内容格式
无论是客户端发送的请求内容,还是服务器返回的响应内容,在http协议中,都是有固定的格式要求的。
请求
客户端发送到服务器端的请求消息,称之为请求(request)
,其实就是一个按照http协议的规则拼接而成的字符Request请求消息包含三部分:请求行,request line消息报头(请求头),request head请求正文,request body
**请求行,**request line
//格式: CRLF表示回车和换行 Method Request-URI HTTP-Version CRLF
Method表示请求方法;一般为GET或者POST
Request-URI是一个统一资源标识符,本次请求的资源路径
HTTP-Version表示请求的HTTP协议版本,HTTP/1.1
例如,
GET /test.html HTTP/1.1
2、消息报头(请求头),request head
http请求报头的生成,主要有三种情况:
浏览器自动生成的请求
绝大部分正常用户访问都是这类情况,只要是用户主动输入网址访问时发送的http请求,那这些头
部字段都是浏览器自动生成的,比如host,cookie,user-agent, Accept-Encoding:等
浏览器插件
javascript脚本增加或者修改的header。JS能够控制浏览器发起请求,也能在这里增加一些header,
但是考虑到安全和性能的原因,对JS控制 header的能力做了一些限制,比如host和cookie, user-
agent等这些字段,JS是无法干预的
中间代理
如果用户请求要经过一些中间代理(比如运营商或者公司网关),中间代理能够查看和修改用户的
全部数据和任何头部字段。除非使用了HTTPS
http消息报头包括普通报头、请求报头、响应报头、实体报头这四大类,它们的作用是描述 客户端或者
服务器 的属性,并且都是由 名字+冒号+空格+值 组成,例如, Content-Type: text/html
普通报头
即可用于请求,也可用于响应,是作为一个整体而不是特定资源与事务相关联
例如,
Cache-Control
Connection
Date
Pragma
Transfer-Encoding
Upgrade
Via
请求报头
允许客户端传递关于自身信息和希望的响应形式
例如,
Accept
Accept-Charset
Accept-Encoding
Accept-Language
Authorization
Host
User-Agent
From
If-Modified-Since
If-Match
If-None-Match
If-Range
If-Unmodified-Since
Max-Forwards
Proxy-Authorization
Range
Referer
响应报头
允许服务器传递关于自身信息的响应
例如,
Location
Server
WWW-Authenticate
Age
Proxy-Authenticate
Public
Retry-After
Vary
Warning
实体报头
定义被传送资源的信息。即可用于请求,也可用于响应
例如,Content-Encoding
Content-Language
Content-Length
Conten-Type
Last-Modified
Expires
Allow
Content-Base
Content-Location
Content-MD5
Content-Range
Etag
extension-header
响应
服务器在接收和解析客户端的请求消息后,会返回给客户端一个HTTP响应消息(response)。
其实也是一个按照http协议的规则拼接而成的一个字符串。
HTTP响应也是由三个部分组成:
响应状态行,
response status line
消息报头(响应头),
response head
响应正文,
response body
1、响应状态行,response status line
//格式如下:CRLF表示回车和换行 HTTP-Version Status-Code Reason-Phrase CRLF
HTTP-Version表示服务器HTTP协议的版本
Status-Code表示服务器发回的响应状态代码
Reason-Phrase表示状态代码的文本描述
例如,
HTTP/1.1 200 OK 1
关于响应状态代码,共分为5种类型:
分类 分类描述
1xx 信息,服务器收到请求,需要请求者继续执行操作
2xx 成功,操作被成功接收并处理
3xx 重定向,需要进一步的操作以完成请求
4xx 客户端错误,请求包含语法错误或无法完成请求
5xx 服务器错误,服务器在处理请求的过程中发生了错误
|