HTTP协议

1.定义:规范 浏览器和服务器之间 传输格式
b() ---- s(web服务软件)

对浏览器客户端与服务器的数据传输格式规范。

2.一个请求,有且只有一个响应
Request , Response

服务器读取请求,解析请求。

浏览器(B)请求的时候,有很多种浏览器,火狐,IE,谷歌等,
请求到服务器的时候。
服务器给浏览器提要求,要求,不同浏览器发送的请求数据格式必须一致!
服务器解析之后,返回给浏览器的数据也要一定的规范。因为服务器也有不同的。

就需要一个协议,出现了HTTP协议。

3.浏览器也是一个socket客户端。

C --- S   之间的传输是用的socket技术。( )

socket是基于tcp/ip协议,数据的传输完整性较高,三次握手。udp和tcp/ip对应,udp很快,不会经过数据连接,直接把数据发送,接不接是你的事情。tcp/ip协议关注的是客户端与服务器端数据传输是否成功,没有成功还会重新发送。

tcp/ip协议:是数据传输的底层协议。
http协议:是在tcp/ip协议之上封装的一层协议。关注的是数据传输的规范。
浏览器和服务器之间的通信,说白了就是客户端与服务器端的通信。

4.抓包。
查看HTTP协议的工具:
火狐浏览器的firebug
谷歌就是审查元素
Telnet:默认情况是不开启的。需要在打开或关闭
windows功能里面打开Telnet客户端.
telnet 主机名 端口号

![{E~JJL5L$P]R``5G_E_JQ42.png](http://upload-images.jianshu.io/upload_images/1197462-20aa69db3834e885.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

5.http协议的内容

Request:

    Host: cdn-accounts.firefox.com.cn
    User-Agent: Mozilla/5.0 (Windows NT 6.1;                  WOW64; rv:48.0) Gecko/20100101 Firefox/48.0

Accept: text/css,/;q=0.1
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Referer: https://accounts.firefox.com.cn/
Origin: https://accounts.firefox.com.cn
Connection: keep-alive

Response:

    Access-Control-Allow-Origin:                        https://accounts.firefox.com.cn

Age: 79293
Cache-Control: max-age=86400
Content-Encoding: gzip
Content-Length: 10956
Content-Type: text/css
Date: Thu, 25 Aug 2016 04:23:58 GMT
EagleId: b68cee4a14721783318278291e
Expires: Fri, 26 Aug 2016 04:23:58 GMT
Last-Modified: Thu, 18 Aug 2016 02:56:57 GMT
Server: Tengine
Timing-Allow-Origin: *
Vary: Accept-Encoding
Via: cache1.l2eu6[0,304-0,H], cache3.l2eu6[0,0], kunlun10.cn172[0,200-0,H], kunlun10.cn172[0,0]
X-Cache: HIT TCP_MEM_HIT dirn:11:499525583
X-Firefox-Spdy: h2
X-Swift-CacheTime: 86400
X-Swift-SaveTime: Thu, 25 Aug 2016 04:24:45 GMT


【格式是固定的】

请求行 (注意,三个之间都有空格):GET /day09/hello HTTP/1.1
请求头(多个key-value对象):Host:localhost:8080
一个空行
(可选的)实体内容:name=eric&password=123456

---解释
a.请求行:(GET /day09/hello HTTP/1.1)

http协议的版本:http1.0 当浏览器你客户端与服务器端简历连接之后,只能发送一次请求,一次请求之后关闭连接。要发送第二次请求需要再建立连接。

                      http1.1  当浏览器与服务器建立练级而之后,可以发送多次请求。现在浏览器基本都用1.1的,效率高点。

*问题:当一个web页面的3个<img>标签嵌入了三张不同的图片的链接,打开这个页面,发送了几次请求。
答案:4次。请求html一次,3次img标签。
只要寻找另外的资源,就会发送一次请求。

如果3张图片有2张一样的,那么就是虽然发送了4次,但是浏览器有缓存的功能,就拦截了请求,在抓包上面也只能看到3次。

请求资源:

    URL:统一资源定位符。http://www.baidu.com 是URI的子集。
    URI :统一资源标记符。  /day09/hello 用于标记任何资源。可以是本地文件资源,也可以是局域网重的资源,也可以是互联网上的资源。

请求方式:

    请求方式:GET  POST  PUT HEAD DELETE TRACE CONNECT OPTIONS
    常用的只有2个:GET POST
    get 和 post 常用在表单的提交。
    
    表单提交:
    <form action="提交地址" method="GET/POST">
    </form>
  
    >GET vs POST
    1)get
    以?开头,多个参数之间用&连接。放在Url的后面。  
   get提交的数据有限制,不超过100kb
    2)post
post请求提交的参数,是放在post请求头的空行,空行之后的。是跟在请求的实体内容之中。
多个参数之间是以&连接。

    post提交没有限制,或者说限制的数据两会很大。Post方式提交敏感数据。

请求参数,get是放在请求行的URI中,post是放在请求体之后。

b.请求头:
请求头有多个,
Accept:text/html,image/*   接受html,image(*代表各种,gif,png,jpeg都可以) --- 浏览器可以接受的数据类型。
Accept-Charset:ISO-8859-1  --- 浏览器可以接受的编码格式
Accept-Encoding:gzip,compress  --- 浏览器接受的数据压缩格式
Accept-Language:en-us,zh-  ---浏览器接受的语言。
Host:www.it356.org:80  ---(必须的)当前请求访问的目标地址(主机:端口)
If-Modified-Since:Tue,11 Jul 2000 18:3:::51 GMT  --- 浏览器最后的缓存时间
Refere:http://www.it315.org/index.jsp  --- 当前请求来自于哪儿
User-Agent:Mozilla/4.0(compatible;MSIE 5.5; Windows NT5.0)  --- 浏览器类型
Cookie:name=eric  --- 浏览器保存的cookie信息
Connection:close/Keep-Alive  --- 浏览器跟服务器连接状态。 close:连接关闭  keep-alive:连接保持
Date:Tue,11 Jul 2000 18:23:51 GMT  --- 请求时间

*注意:
所有的请求信息都封装在了HttpServletRequest对象中。servlet:伺服小程序,小服务程序。
这个对象是服务器封装的。
tomcat第二部是调用doGet方法,然后把request对象传入到servlet中。
浏览器直接访问一个资源,默认的请求方式就是get方式。
    request.getHeader("Host"); // 拿到请求通的Host
    request.getHeaderNames();  // 得到所有请求头的名称。
Enumeration<String> enums = request.getHeaderNames();
While(enums.hasMoreElements()){
    String headerName = enums.nextElement();           // 去除下一个元素
}
request.getInputStream();  // 得到实体内容
byte[] buf = new byte[1024];
int len = 0;
while((len=in.read(buf)) != -1){
    String str = new String(buf, 0, len);
    System.out.println(str);
}
GET请求是没有实体内容的。
// doPost 是可以得到Post请求的请求参数
public void doPost(HttpServletRequest request, HttpServletResponse response){

}

c.实体内容
只有post请求才能放到实体内容里面

核心API:
请求行:
    request.getMethod();  // 方式
    request.getRequestURI(); / request.getRequestURL();
    request.getProtocol();  请求协议

请求头:
request.getHeader("名称");
实体内容:
request.getInputStream();  // 获取实体内容数据
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352

推荐阅读更多精彩内容