码迷,mamicode.com
首页 > Web开发 > 详细

HTTP协议

时间:2018-03-08 17:28:08      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:html   解析   不同的   键值   版本   文本   添加   传输   主机名   

HTTP协议

http协议概述

Hypertext Transfer Protocol,超文本传输协议;
**协议双方*: 浏览器 和 服务器server;
通信规则规定了客户端发送给服务器的内容格式(请求协议request),也规定了服务器发送给客户端的内容格式(响应协议response);
http是基于请求/响应模式,请求一次响应一次, 不是时刻连接的;
http是无状态协议,服务器server无法区分客户端;
URL: 统一资源定位符,即网址:协议名://域名:端口/路径

请求协议

GET http1.1 # 请求方式
key:value   # 多个键值对
\r\n        # 空行,区分
请求体()    # 具体的数据,针对POST方式,若果是GET请求,请求体为空,键值对数据会追加在路径后面,中间用?隔开

一般情况下:
    地址栏url访问   GET
    <a href="">     GET
    form表单默认    GET

# 1. 请求行
描述客户端的请求方式、请求资源的名称、http协议的版本号。 例如: GET/BOOK/JAVA.HTML HTTP/1.1

# 2. 请求头:
Accept:用于告诉服务器,客户机支持的数据类型  (例如:‘Accept:text/html,image/*‘)
Accept-Charset:用于告诉服务器,客户机采用的编码格式
Accept-Encoding:用于告诉服务器,客户机支持的数据压缩格式
Accept-Language:客户机语言环境
Host:客户机通过这个服务器,想访问的主机名
If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间
Referer:客户机通过这个头告诉服务器,它(客户端)是从哪个资源来访问服务器的(防盗链)
User-Agent:客户机通过这个头告诉服务器,客户机的软件环境(操作系统,浏览器版本等)
Cookie:客户机通过这个头,将Coockie信息带给服务器
Connection:告诉服务器,请求完成后,是否保持连接
Date:告诉服务器,当前请求的时间

# 3. 实体内容
就是指浏览器端通过http协议发送给服务器的实体数据。例如:name=dylan&id=110
(get请求时,通过url传给服务器的值。post请求时,通过表单发送给服务器的值)

响应协议

# 1. 响应首行
HTTP/1.1  200 OK   (协议的版本号是1.1  响应状态码为200  响应结果为 OK)

# 2. 响应头信息
    Response Headers
    Location:这个头配合302状态吗,用于告诉客户端找谁
    Server:服务器通过这个头,告诉浏览器服务器的类型
    Content-Encoding:告诉浏览器,服务器的数据压缩格式
    Content-Length:告诉浏览器,回送数据的长度
    Content-Type:告诉浏览器,回送数据的类型
    Last-Modified:告诉浏览器当前资源缓存时间
    Refresh:告诉浏览器,隔多长时间刷新
    Content-Disposition:告诉浏览器以下载的方式打开数据。例如: context.Response.AddHeader("Content-Disposition","attachment:filename=aa.jpg");                                        context.Response.WriteFile("aa.jpg");
    
    Transfer-Encoding:告诉浏览器,传送数据的编码格式
    ETag:缓存相关的头(可以做到实时更新)
    Expries:告诉浏览器回送的资源缓存多长时间。如果是-1或者0,表示不缓存
    Cache-Control:控制浏览器不要缓存数据   no-cache
    Pragma:控制浏览器不要缓存数据          no-cache
    Connection:响应完成后,是否断开连接。  close/Keep-Alive
    Date:告诉浏览器,服务器响应时间

# 3. 空行
\r\n

# 4. 响应体
响应包含浏览器能够解析的静态内容,例如:html,纯文本,图片等等信息


# 状态码:
200 请求已成功,请求所希望的响应头或数据体将随此响应返回;
404 请求失败,请求所希望得到的资源未被在服务器上发现;
500 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。

302 请求的资源现在临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。

304 如果客户端发送了一个带条件的GET请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。该响应必须包含以下的头信息:Date,除非这个服务器没有时钟。假如没有时钟的服务器也遵守这些规则,那么代理服务器以及客户端可以自行将 Date 字段添加到接收到的响应头中去(正如RFC2068中规定的一样),缓存机制将会正常工作。

状态码304:原理详见下图
技术分享图片

HTTP协议

标签:html   解析   不同的   键值   版本   文本   添加   传输   主机名   

原文地址:https://www.cnblogs.com/fqh202/p/8529057.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!