2013-04-12 1 views
1

아래 코드는 내 코드입니다. 이 코드에서는 Java 소켓을 사용하여 HTML 텍스트를 특정 포트 (이 경우 8900)로 보냅니다. Java 소켓을 통해 전송 된 HTML 컨텐츠에 액세스하려면 로컬 브라우저에서 URL http://localhost:8900/을 사용하십시오. 문제는 크롬과 인터넷 익스플로러가 HTML 텍스트를 멋지게 렌더링하는 동안 모질라는 HTML 컨텐트 전체를 간단한 텍스트로 보여주고 있다는 것입니다. 그것에 대한 해결책이 있습니까?html 콘텐츠가 mozilla에서 일반 텍스트로 표시되는 반면 크롬과 ie는 멋지게 표시됩니다.

import java.net.*; 
import java.io.*; 

class Proxy 
{ 
    public static void main(String args[]) 
    { 
      try 
      { 
       ServerSocket svr = new ServerSocket(8900); 
       System.out.println("waiting for request"); 
       Socket s = svr.accept(); 
       System.out.println("got a request"); 
       InputStream in = s.getInputStream(); 
       OutputStream out = s.getOutputStream(); 

       FileOutputStream fout = new FileOutputStream("d:\\q.txt"); 
       int x; 
       byte data[]= new byte[1024]; 

       x = in.read(data); 
       fout.write(data,0,x); 

       fout.flush(); 
       fout.close(); 

       String response = "<html><head><title>HTML content via java socket</title></head><body><h2>Hi! Every Body.</h2></body></html>"; 
       out.write(response.getBytes()); 
       out.flush(); 

       s.close(); 
       svr.close(); 
       System.out.println("closing all"); 
      } 
      catch(Exception ex) 
      { 
       System.out.println("Err : " + ex); 
      } 
    } 
} 
+1

확실하지 않지만 보안 문제가있을 수 있습니다. localhost에서 항목을로드 할 때 Firefox가 다른 브라우저보다 더 많은 규칙을 적용한다는 것을 경험했습니다. 필자의 경우'@ font-face' 글꼴 로딩 (CSS)은 localhost의 Firefox에서는 작동하지 않지만 다른 모든 브라우저에서는 작동하지 않습니다. –

답변

3

서버가 HTTP 프로토콜을 올바르게 구현하지 않습니다. 상태 표시 줄부터 시작하여 HTTP 헤더 (HTML 내용 유형을 지정해야 함), 빈 줄, 마침내 올바른 HTTP 응답을 보내는 대신 HTTP 응답의 본문을 직접 보냅니다. 응답 본문.

http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Response_message

+0

Firefox를 행복하게 만들기 위해 추가 할 수있는 최소한은'out.write (("HTTP/1.1 200 OK \ r \ n \ r \ n"). getBytes()); 'HTTP' 프로토콜이 지켜 져야하는 %이므로'+ 1' – andyb

관련 문제