关于HTTP协议及SOCKET通信
一.HTTP
1.报文结构
HTTP:超文本传输协议,报文分为请求报文和响应报文。
2.端口(tomcat端口)
http在熟知的80端口使用TCP的服务;tomcat的默认端口是8080
3.状态码含义
5.get和post方法
get是最简单的一种请求,其主要功能是从服务器端获取用户所需资源,并将其作为响应返回给客户端,这些资源可以是html页面,图片,文档等内容中的任何一种,但需要注意的是,get方法主要用来获取服务器端资源信息,就如同数据库中查询操作一样,不会影响到自身的状态,删除,修改,新增资源都是不允许的。但post不仅能够从服务器端获取资源,还可以想服务器端上传资源。采用get方法上传文件,数据量非常小,而且URL跟数据之间是采用“?”连接的,不安全。POST方法向服务器提交的内容在URL中并没有明文显示,对用户是不可见的。所以安全性高。
6.http head的各个特点和区别
7.http request的几种类型
8.http1.1和http1.0的区别
HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。HTTP 1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间。HTTP 1.0不支持Host请求头字段,HTTP 1.1中增加Host请求头字段后,WEB浏览器可以使用主机头名来明确表示要访问服务器上的哪个WEB站点,这才实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点。HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。
9. 页面请求的工作流程
*1用户通过浏览器输入链接的地址来请求所需的资源,浏览器接受用户的请求,并把该请求组装成指定的格式发送给服务器端,客户端与服务器端之间通过HTTP来完成具体的交互。其中请求的数据流中主要包含HTTP请求方法(get和post),请求的网址(URL,统一资源定位符)以及请求的一些参数。
*2服务器收到客户端发来的请求,并查找用户所需要的资源。
*3服务器查找到用户请求的资源后,把该资源返回给客户端
*4服务器通过把响应消息组装成特定的消息格式后返回给客户端,这个过程通过HTTP来完成。响应的数据流主要包含状态编码(代表请求成功或者失败),content-type(text,picture、html),响应消息的内容(图片或者html格式的内容)
*5浏览器对html进行解析,并把响应结果展现给客户
10.http怎么处理长连接(轮询)
http 长轮询:
http 长轮询是服务器收到请求后如果有数据, 立刻响应请求; 如果没有数据就会 hold 一段时间, 这段时间内如果有数据立刻响应请求; 如果时间到了还没有数据, 则响应 http 请求;浏览器受到 http 响应后立在发送一个同样 http 请求查询是否有数据;
http 长轮询的局限:
- 浏览器端对统一服务器同时 http 连接有最大限制, 最好同一用户只存在一个长轮询;
- 服务器端没有数据 hold 住连接时会造成浪费, 容易产生服务器瓶颈;
http 短轮询:
http端轮询是服务器收到请求不管是否有数据都直接响应 http 请求; 浏览器受到 http 响应隔一段时间在发送同样的 http 请求查询是否有数据;
http 短轮询的局限是实时性低;
两者相同点:
可以看出 http 长轮询和 http 短轮询的都会 hold 一段时间;
两者不同点
间隔发生在服务端还是浏览器端: http 长轮询在服务端会 hold 一段时间, http 短轮询在浏览器端 “hold” 一段时间;
11.主流的web服务器有哪些
apache,IBM websephertomcat,tomcat,微软的IIS
二.HTTPS(443端口)
http+ssl(secure socket layout)
更多https的加密解密:http://www.cnblogs.com/chyingp/p/https-introduction.html
不能单独用公私钥加密,还得用CA签名
三.cookie和session
cookie是客户端保持状态的一种方案,而session机制采用的是服务器端保持状态的方案。cookie分发是通过扩展http协议来实现的,服务器通过在http的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。 session机制的话,服务器使用一种类似于散列表的结构(可能就是散列表)来保存信息。当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已经包含了session的标识(session ID),如果已包含则说明以前已经为此客户端创建过session,服务器就按照这个session ID检索这个session,检索不到,就会创建一个。
总结:1.cookie数据存在在客户的浏览器上,session的数据放在服务器上。2.cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。3.session会在一定时间内保存在服务器上。当访问增多时,会比较占用你的服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。4.单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存200个cookie。5.综上,登录信息保存在session,其他的如需保留,放cookie里。
四.socket通信
1.socket通信的几个关键函数
socket(创建一个用于通信的套接字)
closesocket(关闭套接字,套接字描述符是参数)
bind(当创建一个SOCKET以后,套接字数据数据中有一个默认的IP地址和默认的端口)。一个服务程序必须调用bind函数来给其绑定一个IP地址和一个特定的端口号。
listen(服务程序可以调用Listen函数使其套接字处于监听状态)
accept(调用accept函数从处于监听状态的流套接字的客户连接请求队列中取出排在最前的一个客户请求,并且创建一个新的套接字创建连接通道)
connect(客户程序调用connect函数来使客户套接字描述符与name所指定的计算机的特定端口上的服务socket进行连接)
send(客户端用来发送请求, 服务器端用来发送应答)
recv(客户端服务器用来接收数据)
2.http与socket的区别
http:简单对象访问,对用于应用层,http协议是基于TCP连接的,http连接是短连接
socket是对TCP/IP协议的封装,本身并不是一个协议,而是一个调用接口,通过socket,才能使用TCP/IP协议;socket是长连接,理论上一旦连接建立起连接就不主动断掉。
五.DNS
1.DNS劫持,怎么预防?
DNS劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能反应或访问的是假网址。
对付DNS劫持,只需要把系统的DNS设置手动切换为国外的DNS服务器的IP地址即可解决。
2.DNS污染,怎么预防?
DNS污染是指一些刻意制造或无意中制造出来的域名服务器分组,把域名指往不正确的IP地址。
对于DNS污染,一般除了使用代理服务器和VPN之类的软件之外,并没有什么其它办法。但是利用我们对DNS污染的了解,还是可以做到不用代理服务器和VPN之类的软件就能解决DNS污染的问题,从而在不使用代理服务器或VPN的情况下访问原本访问不了的一些网站。当然这无法解决所有问题,当一些无法访问的网站本身并不是由DNS污染问题导致的时候,还是需要使用代理服务器或VPN才能访问的。
关于HTTP协议及SOCKET通信的更多相关文章
- Python进阶----UDP协议使用socket通信,socketserver模块实现并发
Python进阶----UDP协议使用socket通信,socketserver模块实现并发 一丶基于UDP协议的socket 实现UDP协议传输数据 代码如下:
- day31——recv工作原理、高大上版解决粘包方式、基于UDP协议的socket通信
day31 recv工作原理 源码解释: Receive up to buffersize bytes from the socket. 接收来自socket缓冲区的字节数据, For the opt ...
- 基于TCP与UDP协议的socket通信
基于TCP与UDP协议的socket通信 C/S架构与初识socket 在开始socket介绍之前,得先知道一个Client端/服务端架构,也就是 C/S 架构,互联网中处处充满了 C/S 架构(Cl ...
- JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo
OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七 ...
- Java开发笔记(一百一十六)采用UDP协议的Socket通信
前面介绍了如何通过Socket接口传输文本与文件,在示例代码中,Socket客户端得先调用connect方法连接服务端,确认双方成功连上后才能继续运行后面的代码,这种确认机制确保客户端与服务端的的确确 ...
- Android TCP协议的Socket通信
1.介绍 2.使用方法 3.java后台代码 服务器server package com.lucky.servertest; import java.io.BufferedReader; import ...
- python 30 基于TCP协议的socket通信
目录 1. 单对单循环通信 2. 循环连接通信:可连接多个客户端 3. 执行远程命令 4. 粘包现象 4.1 socket缓冲区 4.2 出现粘包的情况: 4.3 解决粘包现象 bytes 1. 单对 ...
- 基于TCP协议的socket通信
一.服务器端 1.创建serverSocket,即服务器端的socket,绑定指定的端口,并侦听此端口 ServerSocket server = new ServerSocket(8888); 2. ...
- 基于UDP协议的socket通信
服务器端: 1.创建DatagramSocket,指定端口号 2.创建DatagramPacket 3.接收客户端发送的数据信息 4.读取数据 客户端: 1.定义发送信息 2.创建DatagramPa ...
随机推荐
- Cenots7对lvm逻辑卷分区大小的调整
Cenots7对lvm逻辑卷分区大小的调整 (针对xfs和ext4不同文件系统) 1.支持的文件系统类型 特别注意的是: resize2fs命令 针对的是ext2.ext3.ex ...
- python 典型文件结构
#/usr/bin/env/ python #(1) 起始行 "this is a test module" #(2) 模块文档(文档字符串) import sys import ...
- gcc gdb调试 (三)
编写代码过程中少不了调试.在windows下面,我们有visual studio工具.在linux下面呢,实际上除了gdb工具之外,你没有别的选择.那么,怎么用gdb进行调试呢?我们可以一步一步来试试 ...
- BASIC-21_蓝桥杯_Sine之舞
思路: 先根据例子找出规律,列出递归要打印的数据; 示例代码: #include <stdio.h> int n = 0; void dg(int x){ int i = 0; if (x ...
- Zeroc Ice 3.6.1 生成 vs2015 c++ 版本库及相关配置
背景: 目前发布的Ice最新版本为3.6.0,使用的vs2013编译的,vs2015版本正在开发,发布只是时间问题: 不过官方实在给力,github上的源码已经支持vs2015编译了.源码版本为3.6 ...
- hdu 1278 逃离迷宫
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 关于String.valueOf()和.toString的问题
以下是String.valueOf()的源代码 public static String valueOf(Object obj) { return (obj == null) ? " ...
- RabbitMQ 主题
RabbitMQ (三) 发布/订阅 RabbitMQ主题 RabbitMQ Tutorials
- [UE4]换枪需要做的事,容器:数组、集合、Map
换枪: 1.需要同时保存多把枪 2.换下去的枪需要隐藏,而不是销毁 3.换枪应该有动作 4.不同的枪应该有不同的行为 蓝图中常见的容器 1.数组 特点: 1.元素连续存放 2.通过索引访问 3.索引从 ...
- [Windows]Win10下VM虚拟机桥接模式无法上网的解决办法
Win10出来了,赶紧尝尝鲜.既然是预览版,肯定会出现以前没有过的问题.这不,问题马上就来了.我的VM虚拟机本来在Win8.1下使用桥接模式是可以上网的,但是现在不可以了.重置了好几次虚拟网络,NAT ...