HTTP协议
协议
- 约束双方规范的一个准则(标准)
HTTP协议
- HTTP,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议
- 所有的WWW文件都必须遵守这个标准
- 设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方式(方法)
- 约束请求与响应的规则
HTTP组成部分
- 请求
- 响应
- 请求与响应都是成对存在的
请求的发送方式
- 通过浏览器的地址栏
- 通过HTML当中的
form表单
- 通过a链接的href
- src属性(src是把响应的结果展示出来,例如请求一张网络图片)
HTTP请求
- 请求行
- 请求方式:POST、GET
- 请求的资源:/bntang/login.html?username=bntang&pwd=1234
- 协议版本:HTTP/1.0,发送请求,创建一次连接,获得一个Web资源,
连接断开
。HTTP/1.1,发送请求,创建一次连接,获得多个Web资源,保持连接
- 请求头
- 请求头是客户端发送给服务器端的一些信息
- 使用键值对表示,key:value
- 常见请求头
- Referer:浏览器通知服务器,当前请求来自何处。如果是直接访问,则不会有这个头。常用于:
防盗链
- If-Modified-Since:浏览器通知服务器,本地缓存的最后变更时间
- Cookie:用于存放浏览器缓存的cookie信息
- User-Agent:浏览器通知服务器,客户端浏览器(用的什么浏览器)与操作系统相关信息(用的什么操作系统)
- Connection:保持连接状态。Keep-Alive 连接中,close 已关闭
- Host:请求的服务器主机名
- Content-Length:请求体的长度
- Content-Type:如果是POST请求,会有这个头,默认值为 application/x-www-form-urlencoded,表示请求体内容使用URL编码
- Accept:浏览器可支持MIME类型。文件类型的一种描述方式
- text/html,html文件
- text/css,css文件
- text/javascript,js文件
- image/*,所有图片文件
- Accept-Encoding:浏览器通知服务器,浏览器支持的数据压缩格式。如:GZIP压缩
- Accept-Language:浏览器通知服务器,浏览器支持的语言
- Referer:浏览器通知服务器,当前请求来自何处。如果是直接访问,则不会有这个头。常用于:
- 自动的把客户端的信息发送给服务器
- 请求体
当请求方式是POST时,请求体会有请求的参数
如果请求方式为GET,那么请求参数不会出现在请求体中,会拼接在URL地址后面
HTTP响应
- 响应行
- HTTP协议
- 状态码
- 200:请求成功
- 302:请求重定向
- 304:请求的资源没有改变,访问本地缓存
- 404:请求的资源没找到不存在。通常是用户路径编写错误,也可能是服务器资源已删除
- 500:服务器内部错误。通常是程序抛异常,代码问题
- 其它状态码
- 成功
- 200:OK
- 201:已创建
- 202:接收
- 203:非认证信息
- 204:无内容
- 205:重置内容
- 206:部分内容
- 重定向
- 300:多路选择
- 301:永久转移
- 302:暂时转移
- 303:参见其它
- 304:未修改(Not Modified)
- 305:使用代理
- 客户方错误
- 400:错误请求(Bad Request)
- 401:未认证
- 402:需要付费
- 403:禁止(Forbidden)
- 404:未找到(Not Found)
- 405:方法不允许
- 406:不接受
- 407:需要代理认证
- 408:请求超时
- 409:冲突
- 410:失败
- 411:需要长度
- 412:条件失败
- 413:请求实体太大
- 414:请求URI太长
- 415:不支持媒体类型
- 服务器错误
- 500:服务器内部错误
- 501:未实现(Not Implemented)
- 502:网关失败
- 504:网关超时
- 成功
- 响应头
- 服务器端将信息以键值对的形式返回给客户端
- 常见响应头
- Location:指定响应的路径,需要与状态码302配合使用,完成跳转
- Content-Type:响应正文的类型(MIME类型)
- Content-Disposition:通知浏览器以下载方式解析正文
- Set-Cookie:服务器向浏览器写入cookie
- Content-Encoding:服务器使用的压缩格式
- Content-length:响应正文的长度
- Refresh:定时刷新
- Server:服务器名称,默认值:Apache-Coyote/1.1。可以通过conf/server.xml配置进行修改
- Last-Modified:服务器通知浏览器,文件的最后修改时间
- 自动的把服务器端的信息传给客户端
- 响应体
- 响应体是服务器回写给客户端的页面正文
- 浏览器将正文加载到内存
- 然后解析渲染显示正文内容
请求方式
8种请求类型
- OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向Web服务器发送
*
的请求来测试服务器的功能性 - HEAD:请求指定的页面信息,并返回头部信息
- GET:请求指定的页面信息,并返回实体主体
- POST:向指定资源提交数据进行处理请求
- PUT:向指定资源位置上传其最新内容
- DELETE:请求服务器删除Request-URL所标识的资源
- TRACE:回显服务器收到的请求,主要用于测试或诊断
- CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
常用两种请求
🐤GET
- GET请求向页面请求发送参数
- 地址和参数信息中间用
?
字符分隔,例如:http://www.bntang.com/hello?key1=value1&key2=value2 - 查询字符串会显示在地址栏的URL中,不安全,请不要使用GET请求提交敏感数据
- GET请求有大小限制:请求字符串中最多只能有
1024
个字符 - GET请求能够被缓存
- GET请求会保存在浏览器的浏览记录中
- 可以添加书签
- 编码类型为
application/x-www-form-urlencoded
- 只允许ASCII字符类型,不能用二进制流
- 点击刷新时,不会有反应
- GET请求主要用于获取数据
🐸POST
- POST请求向页面请求发送参数
- 使用POST请求时,查询字符串在POST信息中单独存在,和HTTP请求一起发送到服务器
- 编码类型为:application/x-www-form-urlencoded or multipart/form-data,请求二进制数据使用 multipart 编码
- 没有历史记录
- 参数类型没有限制,可以是字符串也可以是二进制流
- 数据不会显示在地址栏中,也不会缓存下来或保存在浏览记录中,所以POST请求比GET请求安全,但也不是最安全的方式。如需要传送敏感数据,请使用加密方式传输
- 查询字符串不会显示在地址栏中
- POST传输的数据量大,可以达到
2M
,而GET请求由于受到URL长度限制,只能传递大约1024字节 - POST就是为了将数据传送到服务器,GET就是为了从服务器取得数据